2007-10-31 01:21:04 +00:00
/ *
2008-03-18 05:16:43 +00:00
* Copyright ( c ) Contributors , http : //opensimulator.org/
* See CONTRIBUTORS . TXT for a full list of copyright holders .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions are met :
* * Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* * Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
2009-06-01 06:37:14 +00:00
* * Neither the name of the OpenSimulator Project nor the
2008-03-18 05:16:43 +00:00
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ` ` AS IS ' ' AND ANY
* EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED . IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES
* ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
* LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
* /
2007-10-31 01:21:04 +00:00
using System ;
2009-09-21 18:05:01 +00:00
using System.Collections.Generic ;
2007-10-31 01:21:04 +00:00
using System.Net ;
using System.Net.Sockets ;
2007-12-27 21:41:48 +00:00
using System.Xml ;
2009-06-25 17:53:03 +00:00
using System.IO ;
2007-12-27 21:41:48 +00:00
using Nini.Config ;
2008-11-08 17:20:54 +00:00
using OpenMetaverse ;
2009-02-14 16:37:55 +00:00
using OpenMetaverse.StructuredData ;
2009-06-25 17:53:03 +00:00
using OpenSim.Framework.Console ;
2007-10-31 01:21:04 +00:00
namespace OpenSim.Framework
{
2007-11-27 13:46:52 +00:00
[Serializable]
2007-10-31 01:21:04 +00:00
public class SimpleRegionInfo
{
2008-05-16 01:22:11 +00:00
// private static readonly log4net.ILog m_log
2008-04-29 14:04:55 +00:00
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
2008-08-01 18:49:48 +00:00
/// <summary>
2008-04-29 14:04:55 +00:00
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
2008-08-01 18:49:48 +00:00
/// </summary>
public uint HttpPort
{
get { return m_httpPort ; }
set { m_httpPort = value ; }
}
2008-04-29 14:04:55 +00:00
protected uint m_httpPort ;
2008-08-18 00:39:10 +00:00
2008-08-01 18:49:48 +00:00
/// <summary>
/// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
/// </summary>
public string ServerURI
{
get { return m_serverURI ; }
set { m_serverURI = value ; }
2008-08-18 00:39:10 +00:00
}
2008-08-01 18:49:48 +00:00
protected string m_serverURI ;
2008-04-29 14:04:55 +00:00
2009-09-22 21:46:05 +00:00
public string RegionName
{
get { return m_regionName ; }
set { m_regionName = value ; }
}
protected string m_regionName = String . Empty ;
2008-08-01 18:49:48 +00:00
protected bool Allow_Alternate_Ports ;
public bool m_allow_alternate_ports ;
protected string m_externalHostName ;
2008-08-18 00:39:10 +00:00
2008-04-29 14:04:55 +00:00
protected IPEndPoint m_internalEndPoint ;
protected uint? m_regionLocX ;
protected uint? m_regionLocY ;
2008-08-18 00:39:10 +00:00
protected uint m_remotingPort ;
2008-09-06 07:52:41 +00:00
public UUID RegionID = UUID . Zero ;
2008-04-29 14:04:55 +00:00
public string RemotingAddress ;
2009-06-22 12:18:04 +00:00
public UUID ScopeID = UUID . Zero ;
2008-04-29 14:04:55 +00:00
2007-10-31 01:21:04 +00:00
public SimpleRegionInfo ( )
{
}
public SimpleRegionInfo ( uint regionLocX , uint regionLocY , IPEndPoint internalEndPoint , string externalUri )
{
m_regionLocX = regionLocX ;
m_regionLocY = regionLocY ;
m_internalEndPoint = internalEndPoint ;
m_externalHostName = externalUri ;
}
2007-12-06 01:41:41 +00:00
public SimpleRegionInfo ( uint regionLocX , uint regionLocY , string externalUri , uint port )
2007-10-31 01:21:04 +00:00
{
m_regionLocX = regionLocX ;
m_regionLocY = regionLocY ;
m_externalHostName = externalUri ;
2007-12-06 01:41:41 +00:00
m_internalEndPoint = new IPEndPoint ( IPAddress . Parse ( "0.0.0.0" ) , ( int ) port ) ;
2007-10-31 01:21:04 +00:00
}
2007-12-27 21:41:48 +00:00
2007-12-10 19:16:50 +00:00
public SimpleRegionInfo ( RegionInfo ConvertFrom )
{
2009-09-23 03:25:00 +00:00
m_regionName = ConvertFrom . RegionName ;
2007-12-10 19:16:50 +00:00
m_regionLocX = ConvertFrom . RegionLocX ;
m_regionLocY = ConvertFrom . RegionLocY ;
m_internalEndPoint = ConvertFrom . InternalEndPoint ;
m_externalHostName = ConvertFrom . ExternalHostName ;
m_remotingPort = ConvertFrom . RemotingPort ;
2008-03-23 21:21:39 +00:00
m_httpPort = ConvertFrom . HttpPort ;
2008-02-02 06:34:07 +00:00
m_allow_alternate_ports = ConvertFrom . m_allow_alternate_ports ;
2007-12-10 19:16:50 +00:00
RemotingAddress = ConvertFrom . RemotingAddress ;
2008-09-06 07:52:41 +00:00
RegionID = UUID . Zero ;
2008-04-29 14:04:55 +00:00
ServerURI = ConvertFrom . ServerURI ;
2007-12-10 19:16:50 +00:00
}
2007-10-31 01:21:04 +00:00
public uint RemotingPort
{
2007-12-27 21:41:48 +00:00
get { return m_remotingPort ; }
set { m_remotingPort = value ; }
2007-10-31 01:21:04 +00:00
}
2008-04-29 14:04:55 +00:00
2008-03-22 20:44:15 +00:00
/// <value>
/// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
2008-05-16 01:22:11 +00:00
///
2008-03-22 20:44:15 +00:00
/// XXX Isn't this really doing too much to be a simple getter, rather than an explict method?
/// </value>
2007-10-31 01:21:04 +00:00
public IPEndPoint ExternalEndPoint
{
get
{
// Old one defaults to IPv6
2008-05-14 05:11:23 +00:00
//return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port);
2007-10-31 01:21:04 +00:00
IPAddress ia = null ;
// If it is already an IP, don't resolve it - just return directly
if ( IPAddress . TryParse ( m_externalHostName , out ia ) )
return new IPEndPoint ( ia , m_internalEndPoint . Port ) ;
// Reset for next check
ia = null ;
2009-05-25 06:46:41 +00:00
try
2007-10-31 01:21:04 +00:00
{
2009-05-25 06:46:41 +00:00
foreach ( IPAddress Adr in Dns . GetHostAddresses ( m_externalHostName ) )
2007-10-31 01:21:04 +00:00
{
2009-05-25 06:46:41 +00:00
if ( ia = = null )
ia = Adr ;
if ( Adr . AddressFamily = = AddressFamily . InterNetwork )
{
ia = Adr ;
break ;
}
2007-10-31 01:21:04 +00:00
}
}
2009-05-25 06:46:41 +00:00
catch ( SocketException e )
{
throw new Exception (
"Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
e + "' attached to this exception" , e ) ;
}
2007-10-31 01:21:04 +00:00
return new IPEndPoint ( ia , m_internalEndPoint . Port ) ;
}
2007-12-27 21:41:48 +00:00
set { m_externalHostName = value . ToString ( ) ; }
2007-10-31 01:21:04 +00:00
}
public string ExternalHostName
{
2007-12-27 21:41:48 +00:00
get { return m_externalHostName ; }
set { m_externalHostName = value ; }
2007-10-31 01:21:04 +00:00
}
public IPEndPoint InternalEndPoint
{
2007-12-27 21:41:48 +00:00
get { return m_internalEndPoint ; }
set { m_internalEndPoint = value ; }
2007-10-31 01:21:04 +00:00
}
public uint RegionLocX
{
2007-12-27 21:41:48 +00:00
get { return m_regionLocX . Value ; }
set { m_regionLocX = value ; }
2007-10-31 01:21:04 +00:00
}
public uint RegionLocY
{
2007-12-27 21:41:48 +00:00
get { return m_regionLocY . Value ; }
set { m_regionLocY = value ; }
2007-10-31 01:21:04 +00:00
}
public ulong RegionHandle
{
2008-04-29 14:04:55 +00:00
get { return Util . UIntsToLong ( ( RegionLocX * ( uint ) Constants . RegionSize ) , ( RegionLocY * ( uint ) Constants . RegionSize ) ) ; }
}
public int getInternalEndPointPort ( )
{
return m_internalEndPoint . Port ;
2007-10-31 01:21:04 +00:00
}
2009-09-21 18:05:01 +00:00
public Dictionary < string , object > ToKeyValuePairs ( )
{
Dictionary < string , object > kvp = new Dictionary < string , object > ( ) ;
kvp [ "uuid" ] = RegionID . ToString ( ) ;
kvp [ "locX" ] = RegionLocX . ToString ( ) ;
kvp [ "locY" ] = RegionLocY . ToString ( ) ;
kvp [ "external_ip_address" ] = ExternalEndPoint . Address . ToString ( ) ;
kvp [ "external_port" ] = ExternalEndPoint . Port . ToString ( ) ;
kvp [ "external_host_name" ] = ExternalHostName ;
kvp [ "http_port" ] = HttpPort . ToString ( ) ;
kvp [ "internal_ip_address" ] = InternalEndPoint . Address . ToString ( ) ;
kvp [ "internal_port" ] = InternalEndPoint . Port . ToString ( ) ;
kvp [ "alternate_ports" ] = m_allow_alternate_ports . ToString ( ) ;
kvp [ "server_uri" ] = ServerURI ;
return kvp ;
}
public SimpleRegionInfo ( Dictionary < string , object > kvp )
{
if ( ( kvp [ "external_ip_address" ] ! = null ) & & ( kvp [ "external_port" ] ! = null ) )
{
int port = 0 ;
Int32 . TryParse ( ( string ) kvp [ "external_port" ] , out port ) ;
IPEndPoint ep = new IPEndPoint ( IPAddress . Parse ( ( string ) kvp [ "external_ip_address" ] ) , port ) ;
ExternalEndPoint = ep ;
}
else
ExternalEndPoint = new IPEndPoint ( IPAddress . Parse ( "0.0.0.0" ) , 0 ) ;
if ( kvp [ "external_host_name" ] ! = null )
ExternalHostName = ( string ) kvp [ "external_host_name" ] ;
if ( kvp [ "http_port" ] ! = null )
{
UInt32 port = 0 ;
UInt32 . TryParse ( ( string ) kvp [ "http_port" ] , out port ) ;
HttpPort = port ;
}
if ( ( kvp [ "internal_ip_address" ] ! = null ) & & ( kvp [ "internal_port" ] ! = null ) )
{
int port = 0 ;
Int32 . TryParse ( ( string ) kvp [ "internal_port" ] , out port ) ;
IPEndPoint ep = new IPEndPoint ( IPAddress . Parse ( ( string ) kvp [ "internal_ip_address" ] ) , port ) ;
InternalEndPoint = ep ;
}
else
InternalEndPoint = new IPEndPoint ( IPAddress . Parse ( "0.0.0.0" ) , 0 ) ;
if ( kvp [ "alternate_ports" ] ! = null )
{
bool alts = false ;
Boolean . TryParse ( ( string ) kvp [ "alternate_ports" ] , out alts ) ;
m_allow_alternate_ports = alts ;
}
if ( kvp [ "server_uri" ] ! = null )
ServerURI = ( string ) kvp [ "server_uri" ] ;
}
2007-10-31 01:21:04 +00:00
}
2007-12-27 21:41:48 +00:00
2007-10-31 01:21:04 +00:00
public class RegionInfo : SimpleRegionInfo
{
2008-05-16 01:22:11 +00:00
// private static readonly log4net.ILog m_log
2008-04-29 14:04:55 +00:00
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
2007-10-31 01:21:04 +00:00
2008-04-29 14:04:55 +00:00
public bool commFailTF = false ;
public ConfigurationMember configMember ;
2008-01-15 02:09:55 +00:00
public string DataStore = String . Empty ;
2008-09-18 15:44:05 +00:00
public string RegionFile = String . Empty ;
2007-10-31 01:21:04 +00:00
public bool isSandbox = false ;
2009-07-03 15:36:47 +00:00
public bool Persistent = true ;
2008-04-29 14:04:55 +00:00
private EstateSettings m_estateSettings ;
2008-06-30 14:09:19 +00:00
private RegionSettings m_regionSettings ;
2009-06-25 15:48:54 +00:00
// private IConfigSource m_configSource = null;
2007-10-31 01:21:04 +00:00
2008-09-06 07:52:41 +00:00
public UUID MasterAvatarAssignedUUID = UUID . Zero ;
2008-01-15 02:09:55 +00:00
public string MasterAvatarFirstName = String . Empty ;
public string MasterAvatarLastName = String . Empty ;
public string MasterAvatarSandboxPassword = String . Empty ;
2008-09-06 07:52:41 +00:00
public UUID originRegionID = UUID . Zero ;
2008-04-29 14:04:55 +00:00
public string proxyUrl = "" ;
2009-03-02 16:33:11 +00:00
public int ProxyOffset = 0 ;
2008-09-06 07:52:41 +00:00
public string regionSecret = UUID . Random ( ) . ToString ( ) ;
2009-05-02 16:28:30 +00:00
public string osSecret ;
2007-10-31 01:21:04 +00:00
2008-09-06 07:52:41 +00:00
public UUID lastMapUUID = UUID . Zero ;
2008-06-14 02:39:27 +00:00
public string lastMapRefresh = "0" ;
2009-01-02 17:41:12 +00:00
private int m_nonphysPrimMax = 0 ;
private int m_physPrimMax = 0 ;
private bool m_clampPrimSize = false ;
private int m_objectCapacity = 0 ;
2009-10-17 13:33:46 +00:00
private string m_regionType = String . Empty ;
2009-01-02 17:41:12 +00:00
2009-07-03 15:36:47 +00:00
2007-10-31 01:21:04 +00:00
// Apparently, we're applying the same estatesettings regardless of whether it's local or remote.
2007-12-07 02:00:35 +00:00
2008-09-30 10:50:41 +00:00
// MT: Yes. Estates can't span trust boundaries. Therefore, it can be
// assumed that all instances belonging to one estate are able to
// access the same database server. Since estate settings are lodaed
// from there, that should be sufficient for full remote administration
2009-06-25 15:48:54 +00:00
// File based loading
/ /
public RegionInfo ( string description , string filename , bool skipConsoleConfig , IConfigSource configSource ) : this ( description , filename , skipConsoleConfig , configSource , String . Empty )
2007-10-31 01:21:04 +00:00
{
2009-06-25 15:48:54 +00:00
}
public RegionInfo ( string description , string filename , bool skipConsoleConfig , IConfigSource configSource , string configName )
{
// m_configSource = configSource;
if ( filename . ToLower ( ) . EndsWith ( ".ini" ) )
{
2009-06-25 17:53:03 +00:00
if ( ! File . Exists ( filename ) ) // New region config request
{
IniConfigSource newFile = new IniConfigSource ( ) ;
ReadNiniConfig ( newFile , String . Empty ) ;
newFile . Save ( filename ) ;
2009-06-26 00:00:20 +00:00
RegionFile = filename ;
2009-06-25 17:53:03 +00:00
return ;
}
2009-06-25 23:31:55 +00:00
IniConfigSource source = new IniConfigSource ( filename ) ;
bool saveFile = false ;
if ( source . Configs [ configName ] = = null )
saveFile = true ;
2009-06-25 15:48:54 +00:00
ReadNiniConfig ( source , configName ) ;
2009-06-25 23:31:55 +00:00
if ( configName ! = String . Empty & & saveFile )
source . Save ( filename ) ;
2009-06-26 00:00:20 +00:00
RegionFile = filename ;
2009-06-25 15:48:54 +00:00
return ;
}
try
{
// This will throw if it's not legal Nini XML format
// and thereby toss it to the legacy loader
/ /
IConfigSource xmlsource = new XmlConfigSource ( filename ) ;
ReadNiniConfig ( xmlsource , configName ) ;
2009-06-26 00:00:20 +00:00
RegionFile = filename ;
2009-06-25 15:48:54 +00:00
return ;
}
catch ( Exception )
{
}
2007-12-27 21:41:48 +00:00
configMember =
2008-02-05 19:44:27 +00:00
new ConfigurationMember ( filename , description , loadConfigurationOptions , handleIncomingConfiguration , ! skipConsoleConfig ) ;
2007-11-03 15:09:21 +00:00
configMember . performConfigurationRetrieve ( ) ;
2008-09-18 15:44:05 +00:00
RegionFile = filename ;
2007-11-03 15:09:21 +00:00
}
2007-12-27 21:41:48 +00:00
2009-06-25 15:48:54 +00:00
// The web loader uses this
/ /
2009-01-02 17:41:12 +00:00
public RegionInfo ( string description , XmlNode xmlNode , bool skipConsoleConfig , IConfigSource configSource )
2007-11-03 15:09:21 +00:00
{
2009-06-25 15:48:54 +00:00
// m_configSource = configSource;
2007-12-27 21:41:48 +00:00
configMember =
2008-01-04 14:14:15 +00:00
new ConfigurationMember ( xmlNode , description , loadConfigurationOptions , handleIncomingConfiguration , ! skipConsoleConfig ) ;
2007-10-31 01:21:04 +00:00
configMember . performConfigurationRetrieve ( ) ;
}
2007-12-27 21:41:48 +00:00
2007-10-31 01:21:04 +00:00
public RegionInfo ( uint regionLocX , uint regionLocY , IPEndPoint internalEndPoint , string externalUri ) :
base ( regionLocX , regionLocY , internalEndPoint , externalUri )
{
}
public RegionInfo ( )
{
}
2007-12-27 21:41:48 +00:00
2008-05-14 17:03:25 +00:00
public RegionInfo ( SerializableRegionInfo ConvertFrom )
2007-11-28 06:18:07 +00:00
{
m_regionLocX = ConvertFrom . RegionLocX ;
m_regionLocY = ConvertFrom . RegionLocY ;
m_internalEndPoint = ConvertFrom . InternalEndPoint ;
m_externalHostName = ConvertFrom . ExternalHostName ;
m_remotingPort = ConvertFrom . RemotingPort ;
2008-02-02 06:34:07 +00:00
m_allow_alternate_ports = ConvertFrom . m_allow_alternate_ports ;
2007-11-28 06:18:07 +00:00
RemotingAddress = ConvertFrom . RemotingAddress ;
2008-09-06 07:52:41 +00:00
RegionID = UUID . Zero ;
2008-03-04 05:31:54 +00:00
proxyUrl = ConvertFrom . ProxyUrl ;
originRegionID = ConvertFrom . OriginRegionID ;
RegionName = ConvertFrom . RegionName ;
ServerURI = ConvertFrom . ServerURI ;
2007-11-28 06:18:07 +00:00
}
2007-12-27 21:41:48 +00:00
2007-12-10 19:16:50 +00:00
public RegionInfo ( SimpleRegionInfo ConvertFrom )
{
m_regionLocX = ConvertFrom . RegionLocX ;
m_regionLocY = ConvertFrom . RegionLocY ;
m_internalEndPoint = ConvertFrom . InternalEndPoint ;
m_externalHostName = ConvertFrom . ExternalHostName ;
m_remotingPort = ConvertFrom . RemotingPort ;
2008-02-02 06:34:07 +00:00
m_allow_alternate_ports = ConvertFrom . m_allow_alternate_ports ;
2007-12-10 19:16:50 +00:00
RemotingAddress = ConvertFrom . RemotingAddress ;
2008-09-06 07:52:41 +00:00
RegionID = UUID . Zero ;
2008-04-29 14:04:55 +00:00
ServerURI = ConvertFrom . ServerURI ;
2007-12-10 19:16:50 +00:00
}
2008-04-29 14:04:55 +00:00
public EstateSettings EstateSettings
{
get
{
if ( m_estateSettings = = null )
{
m_estateSettings = new EstateSettings ( ) ;
}
return m_estateSettings ;
}
2008-07-18 02:40:47 +00:00
set { m_estateSettings = value ; }
2008-04-29 14:04:55 +00:00
}
2008-06-30 14:09:19 +00:00
public RegionSettings RegionSettings
{
get
{
2008-07-06 14:02:22 +00:00
if ( m_regionSettings = = null )
2008-06-30 14:09:19 +00:00
{
m_regionSettings = new RegionSettings ( ) ;
}
return m_regionSettings ;
}
set { m_regionSettings = value ; }
}
2009-01-02 17:41:12 +00:00
public int NonphysPrimMax
{
get { return m_nonphysPrimMax ; }
}
public int PhysPrimMax
{
get { return m_physPrimMax ; }
}
public bool ClampPrimSize
{
get { return m_clampPrimSize ; }
}
public int ObjectCapacity
{
get { return m_objectCapacity ; }
}
2009-05-12 03:30:37 +00:00
public byte AccessLevel
{
2009-05-13 22:16:14 +00:00
get { return ( byte ) Util . ConvertMaturityToAccessLevel ( ( uint ) RegionSettings . Maturity ) ; }
2009-05-12 03:30:37 +00:00
}
2009-10-17 13:33:46 +00:00
public string RegionType
2009-10-17 12:36:03 +00:00
{
2009-10-17 13:33:46 +00:00
get { return m_regionType ; }
2009-10-17 12:36:03 +00:00
}
2008-03-30 08:01:47 +00:00
public void SetEndPoint ( string ipaddr , int port )
{
IPAddress tmpIP = IPAddress . Parse ( ipaddr ) ;
2008-04-29 14:04:55 +00:00
IPEndPoint tmpEPE = new IPEndPoint ( tmpIP , port ) ;
2008-03-30 08:01:47 +00:00
m_internalEndPoint = tmpEPE ;
}
2007-12-27 21:41:48 +00:00
2009-06-25 15:48:54 +00:00
private void ReadNiniConfig ( IConfigSource source , string name )
2007-10-31 01:21:04 +00:00
{
2009-06-25 17:53:03 +00:00
bool creatingNew = false ;
if ( source . Configs . Count = = 0 )
{
2009-08-10 09:06:09 +00:00
MainConsole . Instance . Output ( "=====================================\n" ) ;
MainConsole . Instance . Output ( "We are now going to ask a couple of questions about your region.\n" ) ;
MainConsole . Instance . Output ( "You can press 'enter' without typing anything to use the default\n" ) ;
MainConsole . Instance . Output ( "the default is displayed between [ ] brackets.\n" ) ;
MainConsole . Instance . Output ( "=====================================\n" ) ;
2009-06-25 23:31:55 +00:00
if ( name = = String . Empty )
name = MainConsole . Instance . CmdPrompt ( "New region name" , name ) ;
2009-06-25 17:53:03 +00:00
if ( name = = String . Empty )
throw new Exception ( "Cannot interactively create region with no name" ) ;
2009-07-15 20:49:58 +00:00
source . AddConfig ( name ) ;
2009-06-25 17:53:03 +00:00
creatingNew = true ;
}
2009-06-25 15:48:54 +00:00
if ( name = = String . Empty )
name = source . Configs [ 0 ] . Name ;
2007-10-31 01:21:04 +00:00
2009-06-25 15:48:54 +00:00
if ( source . Configs [ name ] = = null )
2009-06-25 17:53:03 +00:00
{
2009-07-15 20:49:58 +00:00
source . AddConfig ( name ) ;
2009-06-25 17:53:03 +00:00
creatingNew = true ;
}
2007-10-31 01:21:04 +00:00
2009-06-25 15:48:54 +00:00
IConfig config = source . Configs [ name ] ;
2007-10-31 01:21:04 +00:00
2009-06-25 15:48:54 +00:00
// UUID
/ /
string regionUUID = config . GetString ( "RegionUUID" , string . Empty ) ;
if ( regionUUID = = String . Empty )
2009-06-25 17:53:03 +00:00
{
UUID newID = UUID . Random ( ) ;
regionUUID = MainConsole . Instance . CmdPrompt ( "Region UUID" , newID . ToString ( ) ) ;
config . Set ( "RegionUUID" , regionUUID ) ;
}
2009-06-25 15:48:54 +00:00
RegionID = new UUID ( regionUUID ) ;
originRegionID = RegionID ; // What IS this?!
// Region name
/ /
RegionName = name ;
// Region location
/ /
string location = config . GetString ( "Location" , String . Empty ) ;
if ( location = = String . Empty )
2009-06-25 17:53:03 +00:00
{
location = MainConsole . Instance . CmdPrompt ( "Region Location" , "1000,1000" ) ;
config . Set ( "Location" , location ) ;
}
2009-06-25 15:48:54 +00:00
string [ ] locationElements = location . Split ( new char [ ] { ',' } ) ;
m_regionLocX = Convert . ToUInt32 ( locationElements [ 0 ] ) ;
m_regionLocY = Convert . ToUInt32 ( locationElements [ 1 ] ) ;
2009-06-25 16:05:59 +00:00
// Datastore (is this implemented? Omitted from example!)
2009-06-25 15:48:54 +00:00
/ /
DataStore = config . GetString ( "Datastore" , String . Empty ) ;
// Internal IP
/ /
2009-06-25 17:53:03 +00:00
IPAddress address ;
if ( config . Contains ( "InternalAddress" ) )
{
address = IPAddress . Parse ( config . GetString ( "InternalAddress" , String . Empty ) ) ;
}
else
{
2009-08-08 00:42:50 +00:00
address = IPAddress . Parse ( MainConsole . Instance . CmdPrompt ( "Internal IP address" , "0.0.0.0" ) ) ;
2009-06-25 17:53:03 +00:00
config . Set ( "InternalAddress" , address . ToString ( ) ) ;
}
int port ;
if ( config . Contains ( "InternalPort" ) )
{
port = config . GetInt ( "InternalPort" , 9000 ) ;
}
else
{
port = Convert . ToInt32 ( MainConsole . Instance . CmdPrompt ( "Internal port" , "9000" ) ) ;
config . Set ( "InternalPort" , port ) ;
}
2009-06-25 15:48:54 +00:00
m_internalEndPoint = new IPEndPoint ( address , port ) ;
2009-06-25 17:53:03 +00:00
if ( config . Contains ( "AllowAlternatePorts" ) )
{
m_allow_alternate_ports = config . GetBoolean ( "AllowAlternatePorts" , true ) ;
}
else
{
m_allow_alternate_ports = Convert . ToBoolean ( MainConsole . Instance . CmdPrompt ( "Allow alternate ports" , "False" ) ) ;
config . Set ( "AllowAlternatePorts" , m_allow_alternate_ports . ToString ( ) ) ;
}
2009-06-25 15:48:54 +00:00
// External IP
/ /
2009-06-25 17:53:03 +00:00
string externalName ;
if ( config . Contains ( "ExternalHostName" ) )
{
externalName = config . GetString ( "ExternalHostName" , "SYSTEMIP" ) ;
}
else
{
externalName = MainConsole . Instance . CmdPrompt ( "External host name" , "SYSTEMIP" ) ;
config . Set ( "ExternalHostName" , externalName ) ;
}
2009-06-25 15:48:54 +00:00
if ( externalName = = "SYSTEMIP" )
2007-12-27 21:41:48 +00:00
m_externalHostName = Util . GetLocalHost ( ) . ToString ( ) ;
2009-06-25 15:48:54 +00:00
else
m_externalHostName = externalName ;
2007-10-31 01:21:04 +00:00
2009-06-25 15:48:54 +00:00
// Master avatar cruft
/ /
2009-06-25 17:53:03 +00:00
string masterAvatarUUID ;
if ( ! creatingNew )
{
masterAvatarUUID = config . GetString ( "MasterAvatarUUID" , UUID . Zero . ToString ( ) ) ;
MasterAvatarFirstName = config . GetString ( "MasterAvatarFirstName" , String . Empty ) ;
MasterAvatarLastName = config . GetString ( "MasterAvatarLastName" , String . Empty ) ;
MasterAvatarSandboxPassword = config . GetString ( "MasterAvatarSandboxPassword" , String . Empty ) ;
}
else
{
masterAvatarUUID = MainConsole . Instance . CmdPrompt ( "Master Avatar UUID" , UUID . Zero . ToString ( ) ) ;
if ( masterAvatarUUID ! = UUID . Zero . ToString ( ) )
{
config . Set ( "MasterAvatarUUID" , masterAvatarUUID ) ;
}
else
{
MasterAvatarFirstName = MainConsole . Instance . CmdPrompt ( "Master Avatar first name (enter for no master avatar)" , String . Empty ) ;
if ( MasterAvatarFirstName ! = String . Empty )
{
MasterAvatarLastName = MainConsole . Instance . CmdPrompt ( "Master Avatar last name" , String . Empty ) ;
MasterAvatarSandboxPassword = MainConsole . Instance . CmdPrompt ( "Master Avatar sandbox password" , String . Empty ) ;
config . Set ( "MasterAvatarFirstName" , MasterAvatarFirstName ) ;
config . Set ( "MasterAvatarLastName" , MasterAvatarLastName ) ;
config . Set ( "MasterAvatarSandboxPassword" , MasterAvatarSandboxPassword ) ;
}
}
}
2009-06-25 15:48:54 +00:00
MasterAvatarAssignedUUID = new UUID ( masterAvatarUUID ) ;
2009-10-17 13:33:46 +00:00
m_regionType = config . GetString ( "RegionType" , String . Empty ) ;
2009-06-25 15:48:54 +00:00
// Prim stuff
/ /
m_nonphysPrimMax = config . GetInt ( "NonphysicalPrimMax" , 256 ) ;
m_physPrimMax = config . GetInt ( "PhysicalPrimMax" , 10 ) ;
m_clampPrimSize = config . GetBoolean ( "ClampPrimSize" , false ) ;
m_objectCapacity = config . GetInt ( "MaxPrims" , 15000 ) ;
// Multi-tenancy
/ /
ScopeID = new UUID ( config . GetString ( "ScopeID" , UUID . Zero . ToString ( ) ) ) ;
2007-10-31 01:21:04 +00:00
}
2009-06-26 11:32:36 +00:00
private void WriteNiniConfig ( IConfigSource source )
{
IConfig config = source . Configs [ RegionName ] ;
if ( config ! = null )
source . Configs . Remove ( RegionName ) ;
config = source . AddConfig ( RegionName ) ;
config . Set ( "RegionUUID" , RegionID . ToString ( ) ) ;
string location = String . Format ( "{0},{1}" , m_regionLocX , m_regionLocY ) ;
config . Set ( "Location" , location ) ;
if ( DataStore ! = String . Empty )
config . Set ( "Datastore" , DataStore ) ;
config . Set ( "InternalAddress" , m_internalEndPoint . Address . ToString ( ) ) ;
config . Set ( "InternalPort" , m_internalEndPoint . Port ) ;
config . Set ( "AllowAlternatePorts" , m_allow_alternate_ports . ToString ( ) ) ;
config . Set ( "ExternalHostName" , m_externalHostName ) ;
if ( MasterAvatarAssignedUUID ! = UUID . Zero )
{
config . Set ( "MasterAvatarUUID" , MasterAvatarAssignedUUID . ToString ( ) ) ;
}
else if ( MasterAvatarFirstName ! = String . Empty & & MasterAvatarLastName ! = String . Empty )
{
config . Set ( "MasterAvatarFirstName" , MasterAvatarFirstName ) ;
config . Set ( "MasterAvatarLastName" , MasterAvatarLastName ) ;
}
if ( MasterAvatarSandboxPassword ! = String . Empty )
{
config . Set ( "MasterAvatarSandboxPassword" , MasterAvatarSandboxPassword ) ;
}
if ( m_nonphysPrimMax ! = 0 )
config . Set ( "NonphysicalPrimMax" , m_nonphysPrimMax ) ;
if ( m_physPrimMax ! = 0 )
config . Set ( "PhysicalPrimMax" , m_physPrimMax ) ;
config . Set ( "ClampPrimSize" , m_clampPrimSize . ToString ( ) ) ;
if ( m_objectCapacity ! = 0 )
config . Set ( "MaxPrims" , m_objectCapacity ) ;
if ( ScopeID ! = UUID . Zero )
config . Set ( "ScopeID" , ScopeID . ToString ( ) ) ;
2009-10-17 12:36:03 +00:00
2009-10-17 13:33:46 +00:00
if ( RegionType ! = String . Empty )
config . Set ( "RegionType" , RegionType ) ;
2009-06-26 11:32:36 +00:00
}
2008-04-11 15:00:41 +00:00
public bool ignoreIncomingConfiguration ( string configuration_key , object configuration_result )
{
return true ;
}
2008-04-29 14:04:55 +00:00
public void SaveRegionToFile ( string description , string filename )
{
2009-06-26 11:32:36 +00:00
if ( filename . ToLower ( ) . EndsWith ( ".ini" ) )
{
IniConfigSource source = new IniConfigSource ( ) ;
try
{
source = new IniConfigSource ( filename ) ; // Load if it exists
}
catch ( Exception )
{
}
WriteNiniConfig ( source ) ;
source . Save ( filename ) ;
return ;
}
2008-04-29 14:04:55 +00:00
configMember = new ConfigurationMember ( filename , description , loadConfigurationOptionsFromMe ,
2008-04-11 15:00:41 +00:00
ignoreIncomingConfiguration , false ) ;
configMember . performConfigurationRetrieve ( ) ;
2008-09-18 15:44:05 +00:00
RegionFile = filename ;
2008-04-11 15:00:41 +00:00
}
public void loadConfigurationOptionsFromMe ( )
{
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "sim_UUID" , ConfigurationOption . ConfigurationTypes . TYPE_UUID_NULL_FREE ,
2008-04-11 15:00:41 +00:00
"UUID of Region (Default is recommended, random UUID)" ,
RegionID . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "sim_name" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Region Name" , RegionName , true ) ;
configMember . addConfigurationOption ( "sim_location_x" , ConfigurationOption . ConfigurationTypes . TYPE_UINT32 ,
"Grid Location (X Axis)" , m_regionLocX . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "sim_location_y" , ConfigurationOption . ConfigurationTypes . TYPE_UINT32 ,
"Grid Location (Y Axis)" , m_regionLocY . ToString ( ) , true ) ;
2009-04-17 05:52:46 +00:00
//m_configMember.addConfigurationOption("datastore", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Filename for local storage", "OpenSim.db", false);
2008-04-11 15:00:41 +00:00
configMember . addConfigurationOption ( "internal_ip_address" ,
ConfigurationOption . ConfigurationTypes . TYPE_IP_ADDRESS ,
2008-04-29 14:04:55 +00:00
"Internal IP Address for incoming UDP client connections" ,
2008-04-11 15:00:41 +00:00
m_internalEndPoint . Address . ToString ( ) ,
true ) ;
configMember . addConfigurationOption ( "internal_ip_port" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Internal IP Port for incoming UDP client connections" ,
m_internalEndPoint . Port . ToString ( ) , true ) ;
2008-04-29 14:04:55 +00:00
configMember . addConfigurationOption ( "allow_alternate_ports" ,
2008-04-11 15:00:41 +00:00
ConfigurationOption . ConfigurationTypes . TYPE_BOOLEAN ,
"Allow sim to find alternate UDP ports when ports are in use?" ,
m_allow_alternate_ports . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "external_host_name" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"External Host Name" , m_externalHostName , true ) ;
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "master_avatar_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
2008-04-11 15:00:41 +00:00
"Master Avatar UUID" , MasterAvatarAssignedUUID . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "master_avatar_first" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"First Name of Master Avatar" , MasterAvatarFirstName , true ) ;
configMember . addConfigurationOption ( "master_avatar_last" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Last Name of Master Avatar" , MasterAvatarLastName , true ) ;
configMember . addConfigurationOption ( "master_avatar_pass" , ConfigurationOption . ConfigurationTypes . TYPE_STRING ,
2008-04-29 14:04:55 +00:00
"(Sandbox Mode Only)Password for Master Avatar account" ,
2008-04-11 15:00:41 +00:00
MasterAvatarSandboxPassword , true ) ;
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "lastmap_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
2008-06-14 02:39:27 +00:00
"Last Map UUID" , lastMapUUID . ToString ( ) , true ) ;
2008-08-18 00:39:10 +00:00
configMember . addConfigurationOption ( "lastmap_refresh" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
2008-06-14 02:39:27 +00:00
"Last Map Refresh" , Util . UnixTimeSinceEpoch ( ) . ToString ( ) , true ) ;
2008-08-18 00:39:10 +00:00
2009-01-02 17:41:12 +00:00
configMember . addConfigurationOption ( "nonphysical_prim_max" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Maximum size for nonphysical prims" , m_nonphysPrimMax . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "physical_prim_max" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Maximum size for physical prims" , m_physPrimMax . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "clamp_prim_size" , ConfigurationOption . ConfigurationTypes . TYPE_BOOLEAN ,
"Clamp prims to max size" , m_clampPrimSize . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "object_capacity" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Max objects this sim will hold" , m_objectCapacity . ToString ( ) , true ) ;
2009-06-22 12:18:04 +00:00
configMember . addConfigurationOption ( "scope_id" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
"Scope ID for this region" , ScopeID . ToString ( ) , true ) ;
2009-10-17 12:36:03 +00:00
2009-10-17 13:33:46 +00:00
configMember . addConfigurationOption ( "region_type" , ConfigurationOption . ConfigurationTypes . TYPE_STRING ,
2009-10-17 22:55:30 +00:00
"Free form string describing the type of region" , String . Empty , true ) ;
2008-04-11 15:00:41 +00:00
}
2007-10-31 01:21:04 +00:00
public void loadConfigurationOptions ( )
{
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "sim_UUID" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
2007-12-27 21:41:48 +00:00
"UUID of Region (Default is recommended, random UUID)" ,
2008-09-06 07:52:41 +00:00
UUID . Random ( ) . ToString ( ) , true ) ;
2007-12-27 21:41:48 +00:00
configMember . addConfigurationOption ( "sim_name" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Region Name" , "OpenSim Test" , false ) ;
configMember . addConfigurationOption ( "sim_location_x" , ConfigurationOption . ConfigurationTypes . TYPE_UINT32 ,
"Grid Location (X Axis)" , "1000" , false ) ;
configMember . addConfigurationOption ( "sim_location_y" , ConfigurationOption . ConfigurationTypes . TYPE_UINT32 ,
"Grid Location (Y Axis)" , "1000" , false ) ;
2009-04-17 05:52:46 +00:00
//m_configMember.addConfigurationOption("datastore", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Filename for local storage", "OpenSim.db", false);
2007-12-27 21:41:48 +00:00
configMember . addConfigurationOption ( "internal_ip_address" ,
ConfigurationOption . ConfigurationTypes . TYPE_IP_ADDRESS ,
"Internal IP Address for incoming UDP client connections" , "0.0.0.0" ,
false ) ;
configMember . addConfigurationOption ( "internal_ip_port" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Internal IP Port for incoming UDP client connections" ,
2009-04-17 15:09:37 +00:00
ConfigSettings . DefaultRegionHttpPort . ToString ( ) , false ) ;
2008-02-02 06:34:07 +00:00
configMember . addConfigurationOption ( "allow_alternate_ports" , ConfigurationOption . ConfigurationTypes . TYPE_BOOLEAN ,
"Allow sim to find alternate UDP ports when ports are in use?" ,
2008-02-02 07:35:51 +00:00
"false" , true ) ;
2007-12-27 21:41:48 +00:00
configMember . addConfigurationOption ( "external_host_name" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"External Host Name" , "127.0.0.1" , false ) ;
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "master_avatar_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
"Master Avatar UUID" , UUID . Zero . ToString ( ) , true ) ;
2007-12-27 21:41:48 +00:00
configMember . addConfigurationOption ( "master_avatar_first" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"First Name of Master Avatar" , "Test" , false ,
( ConfigurationOption . ConfigurationOptionShouldBeAsked )
shouldMasterAvatarDetailsBeAsked ) ;
configMember . addConfigurationOption ( "master_avatar_last" ,
ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Last Name of Master Avatar" , "User" , false ,
( ConfigurationOption . ConfigurationOptionShouldBeAsked )
shouldMasterAvatarDetailsBeAsked ) ;
configMember . addConfigurationOption ( "master_avatar_pass" , ConfigurationOption . ConfigurationTypes . TYPE_STRING ,
"(Sandbox Mode Only)Password for Master Avatar account" , "test" , false ,
( ConfigurationOption . ConfigurationOptionShouldBeAsked )
shouldMasterAvatarDetailsBeAsked ) ;
2008-09-06 07:52:41 +00:00
configMember . addConfigurationOption ( "lastmap_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
2008-06-14 02:39:27 +00:00
"Last Map UUID" , lastMapUUID . ToString ( ) , true ) ;
2008-08-18 00:39:10 +00:00
configMember . addConfigurationOption ( "lastmap_refresh" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
2008-06-14 02:39:27 +00:00
"Last Map Refresh" , Util . UnixTimeSinceEpoch ( ) . ToString ( ) , true ) ;
2009-01-02 17:41:12 +00:00
configMember . addConfigurationOption ( "nonphysical_prim_max" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Maximum size for nonphysical prims" , "0" , true ) ;
configMember . addConfigurationOption ( "physical_prim_max" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Maximum size for physical prims" , "0" , true ) ;
configMember . addConfigurationOption ( "clamp_prim_size" , ConfigurationOption . ConfigurationTypes . TYPE_BOOLEAN ,
"Clamp prims to max size" , "false" , true ) ;
configMember . addConfigurationOption ( "object_capacity" , ConfigurationOption . ConfigurationTypes . TYPE_INT32 ,
"Max objects this sim will hold" , "0" , true ) ;
2009-06-22 12:18:04 +00:00
configMember . addConfigurationOption ( "scope_id" , ConfigurationOption . ConfigurationTypes . TYPE_UUID ,
"Scope ID for this region" , UUID . Zero . ToString ( ) , true ) ;
2009-10-17 12:36:03 +00:00
2009-10-17 13:33:46 +00:00
configMember . addConfigurationOption ( "region_type" , ConfigurationOption . ConfigurationTypes . TYPE_STRING ,
"Region Type" , String . Empty , true ) ;
2007-11-03 17:49:45 +00:00
}
public bool shouldMasterAvatarDetailsBeAsked ( string configuration_key )
{
2008-09-06 07:52:41 +00:00
return MasterAvatarAssignedUUID = = UUID . Zero ;
2007-10-31 01:21:04 +00:00
}
public bool handleIncomingConfiguration ( string configuration_key , object configuration_result )
{
switch ( configuration_key )
{
case "sim_UUID" :
2008-09-06 07:52:41 +00:00
RegionID = ( UUID ) configuration_result ;
originRegionID = ( UUID ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "sim_name" :
2007-12-27 21:41:48 +00:00
RegionName = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "sim_location_x" :
2007-12-27 21:41:48 +00:00
m_regionLocX = ( uint ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "sim_location_y" :
2007-12-27 21:41:48 +00:00
m_regionLocY = ( uint ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "datastore" :
2007-12-27 21:41:48 +00:00
DataStore = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "internal_ip_address" :
2007-12-27 21:41:48 +00:00
IPAddress address = ( IPAddress ) configuration_result ;
m_internalEndPoint = new IPEndPoint ( address , 0 ) ;
2007-10-31 01:21:04 +00:00
break ;
case "internal_ip_port" :
2008-04-29 14:04:55 +00:00
m_internalEndPoint . Port = ( int ) configuration_result ;
2008-02-02 06:34:07 +00:00
break ;
case "allow_alternate_ports" :
2008-04-29 14:04:55 +00:00
m_allow_alternate_ports = ( bool ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "external_host_name" :
2007-12-27 21:41:48 +00:00
if ( ( string ) configuration_result ! = "SYSTEMIP" )
2007-10-31 01:21:04 +00:00
{
2007-12-27 21:41:48 +00:00
m_externalHostName = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
}
else
{
2007-12-27 21:41:48 +00:00
m_externalHostName = Util . GetLocalHost ( ) . ToString ( ) ;
2007-10-31 01:21:04 +00:00
}
break ;
2007-11-03 17:49:45 +00:00
case "master_avatar_uuid" :
2008-09-06 07:52:41 +00:00
MasterAvatarAssignedUUID = ( UUID ) configuration_result ;
2007-11-03 17:49:45 +00:00
break ;
2007-10-31 01:21:04 +00:00
case "master_avatar_first" :
2007-12-27 21:41:48 +00:00
MasterAvatarFirstName = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "master_avatar_last" :
2007-12-27 21:41:48 +00:00
MasterAvatarLastName = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
case "master_avatar_pass" :
2008-12-18 15:59:48 +00:00
MasterAvatarSandboxPassword = ( string ) configuration_result ;
2007-10-31 01:21:04 +00:00
break ;
2008-06-14 02:39:27 +00:00
case "lastmap_uuid" :
2008-09-06 07:52:41 +00:00
lastMapUUID = ( UUID ) configuration_result ;
2008-06-14 02:39:27 +00:00
break ;
case "lastmap_refresh" :
lastMapRefresh = ( string ) configuration_result ;
break ;
2009-01-02 17:41:12 +00:00
case "nonphysical_prim_max" :
m_nonphysPrimMax = ( int ) configuration_result ;
break ;
case "physical_prim_max" :
m_physPrimMax = ( int ) configuration_result ;
break ;
case "clamp_prim_size" :
m_clampPrimSize = ( bool ) configuration_result ;
break ;
case "object_capacity" :
m_objectCapacity = ( int ) configuration_result ;
break ;
2009-06-22 12:18:04 +00:00
case "scope_id" :
ScopeID = ( UUID ) configuration_result ;
break ;
2009-10-17 13:33:46 +00:00
case "region_type" :
m_regionType = ( string ) configuration_result ;
2009-10-17 12:36:03 +00:00
break ;
2007-10-31 01:21:04 +00:00
}
return true ;
}
2008-03-18 05:16:43 +00:00
2008-09-06 07:52:41 +00:00
public void SaveLastMapUUID ( UUID mapUUID )
2008-06-14 02:39:27 +00:00
{
lastMapUUID = mapUUID ;
lastMapRefresh = Util . UnixTimeSinceEpoch ( ) . ToString ( ) ;
2009-10-21 02:44:40 +00:00
if ( configMember = = null )
return ;
2008-06-14 02:39:27 +00:00
configMember . forceSetConfigurationOption ( "lastmap_uuid" , mapUUID . ToString ( ) ) ;
configMember . forceSetConfigurationOption ( "lastmap_refresh" , lastMapRefresh ) ;
}
2009-02-14 16:37:55 +00:00
public OSDMap PackRegionInfoData ( )
{
OSDMap args = new OSDMap ( ) ;
args [ "region_id" ] = OSD . FromUUID ( RegionID ) ;
if ( ( RegionName ! = null ) & & ! RegionName . Equals ( "" ) )
args [ "region_name" ] = OSD . FromString ( RegionName ) ;
args [ "external_host_name" ] = OSD . FromString ( ExternalHostName ) ;
args [ "http_port" ] = OSD . FromString ( HttpPort . ToString ( ) ) ;
args [ "server_uri" ] = OSD . FromString ( ServerURI ) ;
args [ "region_xloc" ] = OSD . FromString ( RegionLocX . ToString ( ) ) ;
args [ "region_yloc" ] = OSD . FromString ( RegionLocY . ToString ( ) ) ;
args [ "internal_ep_address" ] = OSD . FromString ( InternalEndPoint . Address . ToString ( ) ) ;
args [ "internal_ep_port" ] = OSD . FromString ( InternalEndPoint . Port . ToString ( ) ) ;
if ( ( RemotingAddress ! = null ) & & ! RemotingAddress . Equals ( "" ) )
args [ "remoting_address" ] = OSD . FromString ( RemotingAddress ) ;
args [ "remoting_port" ] = OSD . FromString ( RemotingPort . ToString ( ) ) ;
args [ "allow_alt_ports" ] = OSD . FromBoolean ( m_allow_alternate_ports ) ;
if ( ( proxyUrl ! = null ) & & ! proxyUrl . Equals ( "" ) )
args [ "proxy_url" ] = OSD . FromString ( proxyUrl ) ;
2009-10-17 13:33:46 +00:00
if ( RegionType ! = String . Empty )
args [ "region_type" ] = OSD . FromString ( RegionType ) ;
2009-02-14 16:37:55 +00:00
return args ;
}
public void UnpackRegionInfoData ( OSDMap args )
{
if ( args [ "region_id" ] ! = null )
RegionID = args [ "region_id" ] . AsUUID ( ) ;
if ( args [ "region_name" ] ! = null )
RegionName = args [ "region_name" ] . AsString ( ) ;
if ( args [ "external_host_name" ] ! = null )
ExternalHostName = args [ "external_host_name" ] . AsString ( ) ;
if ( args [ "http_port" ] ! = null )
UInt32 . TryParse ( args [ "http_port" ] . AsString ( ) , out m_httpPort ) ;
if ( args [ "server_uri" ] ! = null )
ServerURI = args [ "server_uri" ] . AsString ( ) ;
if ( args [ "region_xloc" ] ! = null )
{
uint locx ;
UInt32 . TryParse ( args [ "region_xloc" ] . AsString ( ) , out locx ) ;
RegionLocX = locx ;
}
if ( args [ "region_yloc" ] ! = null )
{
uint locy ;
UInt32 . TryParse ( args [ "region_yloc" ] . AsString ( ) , out locy ) ;
RegionLocY = locy ;
}
IPAddress ip_addr = null ;
if ( args [ "internal_ep_address" ] ! = null )
{
IPAddress . TryParse ( args [ "internal_ep_address" ] . AsString ( ) , out ip_addr ) ;
}
int port = 0 ;
if ( args [ "internal_ep_port" ] ! = null )
{
Int32 . TryParse ( args [ "internal_ep_port" ] . AsString ( ) , out port ) ;
}
InternalEndPoint = new IPEndPoint ( ip_addr , port ) ;
if ( args [ "remoting_address" ] ! = null )
RemotingAddress = args [ "remoting_address" ] . AsString ( ) ;
if ( args [ "remoting_port" ] ! = null )
UInt32 . TryParse ( args [ "remoting_port" ] . AsString ( ) , out m_remotingPort ) ;
if ( args [ "allow_alt_ports" ] ! = null )
m_allow_alternate_ports = args [ "allow_alt_ports" ] . AsBoolean ( ) ;
if ( args [ "proxy_url" ] ! = null )
proxyUrl = args [ "proxy_url" ] . AsString ( ) ;
2009-10-17 13:33:46 +00:00
if ( args [ "region_type" ] ! = null )
m_regionType = args [ "region_type" ] . AsString ( ) ;
2009-02-14 16:37:55 +00:00
}
2009-03-10 09:05:06 +00:00
2009-03-12 10:50:59 +00:00
public static RegionInfo Create ( UUID regionID , string regionName , uint regX , uint regY , string externalHostName , uint httpPort , uint simPort , uint remotingPort , string serverURI )
2009-03-10 09:05:06 +00:00
{
RegionInfo regionInfo ;
2009-09-30 16:00:09 +00:00
IPEndPoint neighbourInternalEndPoint = new IPEndPoint ( Util . GetHostFromDNS ( externalHostName ) , ( int ) simPort ) ;
2009-03-10 09:05:06 +00:00
regionInfo = new RegionInfo ( regX , regY , neighbourInternalEndPoint , externalHostName ) ;
regionInfo . RemotingPort = remotingPort ;
regionInfo . RemotingAddress = externalHostName ;
regionInfo . HttpPort = httpPort ;
regionInfo . RegionID = regionID ;
regionInfo . RegionName = regionName ;
2009-03-12 10:50:59 +00:00
regionInfo . ServerURI = serverURI ;
2009-03-10 09:05:06 +00:00
return regionInfo ;
}
2009-05-12 03:30:37 +00:00
2007-10-31 01:21:04 +00:00
}
2008-06-30 14:09:19 +00:00
}