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 ;
2008-06-21 03:29:08 +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 ;
2007-11-03 15:09:21 +00:00
using libsecondlife ;
2007-12-27 21:41:48 +00:00
using Nini.Config ;
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);
protected bool Allow_Alternate_Ports ;
public bool m_allow_alternate_ports ;
protected string m_externalHostName ;
/// <value>
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
/// </value>
protected uint m_httpPort ;
protected IPEndPoint m_internalEndPoint ;
protected uint? m_regionLocX ;
protected uint? m_regionLocY ;
protected uint m_remotingPort ;
protected string m_serverURI ;
public LLUUID RegionID = LLUUID . Zero ;
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 ;
RegionID = LLUUID . 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-23 21:21:39 +00:00
public uint HttpPort
{
get { return m_httpPort ; }
set { m_httpPort = value ; }
}
2008-03-30 08:01:47 +00:00
2008-03-04 05:31:54 +00:00
public string ServerURI
{
2008-04-29 14:04:55 +00:00
get { return m_serverURI ; }
set { m_serverURI = value ; }
2008-03-04 05:31:54 +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 ;
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 ;
2007-10-31 01:21:04 +00:00
2008-02-02 16:03:10 +00:00
// public bool m_allow_alternate_ports;
2008-02-02 06:34:07 +00:00
2007-11-24 10:36:54 +00:00
public LLUUID MasterAvatarAssignedUUID = LLUUID . 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-03-04 05:31:54 +00:00
public LLUUID originRegionID = LLUUID . Zero ;
2008-04-29 14:04:55 +00:00
public string proxyUrl = "" ;
public string RegionName = String . Empty ;
public string regionSecret = LLUUID . Random ( ) . ToString ( ) ;
2007-10-31 01:21:04 +00:00
2008-06-14 02:39:27 +00:00
public LLUUID lastMapUUID = LLUUID . Zero ;
public string lastMapRefresh = "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-01-04 14:14:15 +00:00
public RegionInfo ( string description , string filename , bool skipConsoleConfig )
2007-10-31 01:21:04 +00:00
{
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 ( ) ;
}
2007-12-27 21:41:48 +00:00
2008-01-04 14:14:15 +00:00
public RegionInfo ( string description , XmlNode xmlNode , bool skipConsoleConfig )
2007-11-03 15:09:21 +00:00
{
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 ;
2007-12-07 23:21:32 +00:00
RegionID = LLUUID . 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 ;
RegionID = LLUUID . 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 ; }
}
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 ;
2007-12-27 21:41:48 +00:00
RegionID = new LLUUID ( source . Configs [ sectionName ] . GetString ( "Region_ID" , LLUUID . Random ( ) . ToString ( ) ) ) ;
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 =
source . Configs [ sectionName ] . GetInt ( "internal_ip_port" , ( int ) NetworkServersInfo . DefaultHttpListenerPort ) ;
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 ( ) ;
}
public void loadConfigurationOptionsFromMe ( )
{
2008-05-26 22:11:56 +00:00
configMember . addConfigurationOption ( "sim_UUID" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID_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 ) ;
//configMember.addConfigurationOption("datastore", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Filename for local storage", "OpenSim.db", false);
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 ) ;
configMember . addConfigurationOption ( "master_avatar_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID ,
"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-06-14 02:39:27 +00:00
configMember . addConfigurationOption ( "lastmap_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID ,
"Last Map UUID" , lastMapUUID . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "lastmap_refresh" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Last Map Refresh" , Util . UnixTimeSinceEpoch ( ) . ToString ( ) , true ) ;
2008-04-11 15:00:41 +00:00
}
2007-10-31 01:21:04 +00:00
public void loadConfigurationOptions ( )
{
2007-12-27 21:41:48 +00:00
configMember . addConfigurationOption ( "sim_UUID" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID ,
"UUID of Region (Default is recommended, random UUID)" ,
LLUUID . Random ( ) . ToString ( ) , true ) ;
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 ) ;
2007-11-15 19:53:10 +00:00
//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" ,
NetworkServersInfo . DefaultHttpListenerPort . 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 ) ;
configMember . addConfigurationOption ( "master_avatar_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID ,
"Master Avatar UUID" , LLUUID . Zero . ToString ( ) , true ) ;
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-06-14 02:39:27 +00:00
configMember . addConfigurationOption ( "lastmap_uuid" , ConfigurationOption . ConfigurationTypes . TYPE_LLUUID ,
"Last Map UUID" , lastMapUUID . ToString ( ) , true ) ;
configMember . addConfigurationOption ( "lastmap_refresh" , ConfigurationOption . ConfigurationTypes . TYPE_STRING_NOT_EMPTY ,
"Last Map Refresh" , Util . UnixTimeSinceEpoch ( ) . ToString ( ) , true ) ;
2007-11-03 17:49:45 +00:00
}
public bool shouldMasterAvatarDetailsBeAsked ( string configuration_key )
{
2008-03-19 09:36:13 +00:00
if ( MasterAvatarAssignedUUID = = LLUUID . Zero )
2007-11-03 17:49:45 +00:00
{
return true ;
}
return false ;
2007-10-31 01:21:04 +00:00
}
public bool handleIncomingConfiguration ( string configuration_key , object configuration_result )
{
switch ( configuration_key )
{
case "sim_UUID" :
2007-12-27 21:41:48 +00:00
RegionID = ( LLUUID ) configuration_result ;
2008-04-29 14:04:55 +00:00
originRegionID = ( LLUUID ) 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" :
2007-12-27 21:41:48 +00:00
MasterAvatarAssignedUUID = ( LLUUID ) 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" :
2007-12-27 21:41:48 +00:00
string tempMD5Passwd = ( string ) configuration_result ;
2008-01-15 02:09:55 +00:00
MasterAvatarSandboxPassword = Util . Md5Hash ( Util . Md5Hash ( tempMD5Passwd ) + ":" + String . Empty ) ;
2007-10-31 01:21:04 +00:00
break ;
2008-06-14 02:39:27 +00:00
case "lastmap_uuid" :
lastMapUUID = ( LLUUID ) configuration_result ;
break ;
case "lastmap_refresh" :
lastMapRefresh = ( string ) configuration_result ;
break ;
2007-10-31 01:21:04 +00:00
}
return true ;
}
2008-03-18 05:16:43 +00:00
2008-06-14 02:39:27 +00:00
public void SaveLastMapUUID ( LLUUID mapUUID )
{
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 ) ;
}
2007-10-31 01:21:04 +00:00
}
2008-06-30 14:09:19 +00:00
}