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 .
* * Neither the name of the OpenSim Project nor the
* 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 ;
using System.Net ;
using System.Net.Sockets ;
2007-12-27 21:41:48 +00:00
using System.Xml ;
using Nini.Config ;
2008-11-08 17:20:54 +00:00
using OpenMetaverse ;
2009-02-14 16:37:55 +00:00
using OpenMetaverse.StructuredData ;
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
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 ;
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 )
{
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 ;
2008-04-29 14:04:55 +00:00
2007-10-31 01:21:04 +00:00
foreach ( IPAddress Adr in Dns . GetHostAddresses ( m_externalHostName ) )
{
if ( ia = = null )
ia = Adr ;
if ( Adr . AddressFamily = = AddressFamily . InterNetwork )
{
ia = Adr ;
break ;
}
}
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
}
}
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 ;
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-01-13 18:35:20 +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-04-29 14:04:55 +00:00
public string RegionName = String . Empty ;
2008-09-06 07:52:41 +00:00
public string regionSecret = UUID . Random ( ) . ToString ( ) ;
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 ;
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-01-02 17:41:12 +00:00
public RegionInfo ( string description , string filename , bool skipConsoleConfig , IConfigSource configSource )
2007-10-31 01:21:04 +00:00
{
2009-01-13 18:35:20 +00:00
//m_configSource = configSource;
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-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-01-13 18:35:20 +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 ; }
}
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
2007-10-31 01:21:04 +00:00
//not in use, should swap to nini though.
public void LoadFromNiniSource ( IConfigSource source )
{
2007-12-27 21:41:48 +00:00
LoadFromNiniSource ( source , "RegionInfo" ) ;
2007-10-31 01:21:04 +00:00
}
//not in use, should swap to nini though.
public void LoadFromNiniSource ( IConfigSource source , string sectionName )
{
2008-01-15 02:09:55 +00:00
string errorMessage = String . Empty ;
2008-09-06 07:52:41 +00:00
RegionID = new UUID ( source . Configs [ sectionName ] . GetString ( "Region_ID" , UUID . Random ( ) . ToString ( ) ) ) ;
2007-12-27 21:41:48 +00:00
RegionName = source . Configs [ sectionName ] . GetString ( "sim_name" , "OpenSim Test" ) ;
m_regionLocX = Convert . ToUInt32 ( source . Configs [ sectionName ] . GetString ( "sim_location_x" , "1000" ) ) ;
m_regionLocY = Convert . ToUInt32 ( source . Configs [ sectionName ] . GetString ( "sim_location_y" , "1000" ) ) ;
2007-11-15 19:53:10 +00:00
// this.DataStore = source.Configs[sectionName].GetString("datastore", "OpenSim.db");
2007-10-31 01:21:04 +00:00
string ipAddress = source . Configs [ sectionName ] . GetString ( "internal_ip_address" , "0.0.0.0" ) ;
IPAddress ipAddressResult ;
if ( IPAddress . TryParse ( ipAddress , out ipAddressResult ) )
{
2007-12-27 21:41:48 +00:00
m_internalEndPoint = new IPEndPoint ( ipAddressResult , 0 ) ;
2007-10-31 01:21:04 +00:00
}
else
{
errorMessage = "needs an IP Address (IPAddress)" ;
}
2007-12-27 21:41:48 +00:00
m_internalEndPoint . Port =
2009-04-17 05:52:46 +00:00
source . Configs [ sectionName ] . GetInt ( "internal_ip_port" , ( int ) DefaultSettings . DefaultRegionHttpPort ) ;
2007-10-31 01:21:04 +00:00
string externalHost = source . Configs [ sectionName ] . GetString ( "external_host_name" , "127.0.0.1" ) ;
if ( externalHost ! = "SYSTEMIP" )
{
2007-12-27 21:41:48 +00:00
m_externalHostName = externalHost ;
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
}
2007-12-27 21:41:48 +00:00
MasterAvatarFirstName = source . Configs [ sectionName ] . GetString ( "master_avatar_first" , "Test" ) ;
MasterAvatarLastName = source . Configs [ sectionName ] . GetString ( "master_avatar_last" , "User" ) ;
MasterAvatarSandboxPassword = source . Configs [ sectionName ] . GetString ( "master_avatar_pass" , "test" ) ;
2007-10-31 01:21:04 +00:00
2008-01-15 02:09:55 +00:00
if ( errorMessage ! = String . Empty )
2007-10-31 01:21:04 +00:00
{
2008-05-16 01:22:11 +00:00
// a error
2007-10-31 01:21:04 +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 )
{
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 ) ;
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 05:52:46 +00:00
DefaultSettings . 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 ) ;
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 ;
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
{
2008-07-08 11:13:26 +00:00
if ( null = = configMember ) return ;
2008-06-14 02:39:27 +00:00
lastMapUUID = mapUUID ;
lastMapRefresh = Util . UnixTimeSinceEpoch ( ) . ToString ( ) ;
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 ) ;
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-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 ;
IPEndPoint neighbourInternalEndPoint = new IPEndPoint ( Util . GetHostFromDNS ( externalHostName ) , ( int ) simPort ) ;
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 ;
}
2007-10-31 01:21:04 +00:00
}
2008-06-30 14:09:19 +00:00
}