From 682ec53420ffac9918febc12b7140363602812e5 Mon Sep 17 00:00:00 2001 From: MW Date: Thu, 26 Jun 2008 17:20:08 +0000 Subject: [PATCH] As per the suggestion on the mailing list, added support for a OpenSim.xml config file, instead of a ini file. INI files still work the same as they did before, just now if a ini file isn't found, it looks for a OpenSim.xml file (of course in xml format) and if found uses that. Includes a OpenSim.Example.xml for reference (the default settings saved as a xml file). --- .../LoadRegions/LoadRegionsPlugin.cs | 8 +- .../RemoteController/RemoteAdminPlugin.cs | 6 +- OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | 4 +- OpenSim/Framework/IRegionLoader.cs | 2 +- .../Filesystem/RegionLoaderFileSystem.cs | 6 +- .../RegionLoader/Web/RegionLoaderWebServer.cs | 6 +- OpenSim/Region/Application/OpenSim.cs | 4 +- OpenSim/Region/Application/OpenSimBase.cs | 74 ++++++++++++++----- .../3Di/LoadBalancer/LoadBalancerPlugin.cs | 6 +- .../3Di/RegionProxy/RegionProxyPlugin.cs | 2 +- bin/OpenSim.Example.xml | 48 ++++++++++++ 11 files changed, 125 insertions(+), 41 deletions(-) create mode 100644 bin/OpenSim.Example.xml diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs index 8dde28ca09..01ea3ebb6a 100644 --- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs +++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs @@ -51,7 +51,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions m_log.Info("[LOADREGIONS]: Load Regions addin being initialised"); IRegionLoader regionLoader; - if (openSim.ConfigSource.Configs["Startup"].GetString("region_info_source", "filesystem") == "filesystem") + if (openSim.ConfigSource.ConfigSource.Configs["Startup"].GetString("region_info_source", "filesystem") == "filesystem") { m_log.Info("[LOADREGIONS]: Loading Region Info from filesystem"); regionLoader = new RegionLoaderFileSystem(); @@ -62,7 +62,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions regionLoader = new RegionLoaderWebServer(); } - regionLoader.SetIniConfigSource(openSim.ConfigSource); + regionLoader.SetIniConfigSource(openSim.ConfigSource.ConfigSource); RegionInfo[] regionsToLoad = regionLoader.LoadRegions(); openSim.ModuleLoader.LoadDefaultSharedModules(); @@ -89,7 +89,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions m_log.Info("[LOADREGIONS]: Load Regions addin being initialised"); IRegionLoader regionLoader; - if (openSim.ConfigSource.Configs["Startup"].GetString("region_info_source", "filesystem") == "filesystem") + if (openSim.ConfigSource.ConfigSource.Configs["Startup"].GetString("region_info_source", "filesystem") == "filesystem") { m_log.Info("[LOADREGIONS]: Loading Region Info from filesystem"); regionLoader = new RegionLoaderFileSystem(); @@ -100,7 +100,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions regionLoader = new RegionLoaderWebServer(); } - regionLoader.SetIniConfigSource(openSim.ConfigSource); + regionLoader.SetIniConfigSource(openSim.ConfigSource.ConfigSource); RegionInfo[] regionsToLoad = regionLoader.LoadRegions(); for (int i = 0; i < regionsToLoad.Length; i++) { diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 232fd09f20..947f833ac7 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -58,11 +58,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController { try { - if (openSim.ConfigSource.Configs["RemoteAdmin"] != null && - openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) + if (openSim.ConfigSource.ConfigSource.Configs["RemoteAdmin"] != null && + openSim.ConfigSource.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) { m_log.Info("[RADMIN]: Remote Admin Plugin Enabled"); - requiredPassword = openSim.ConfigSource.Configs["RemoteAdmin"].GetString("access_password", String.Empty); + requiredPassword = openSim.ConfigSource.ConfigSource.Configs["RemoteAdmin"].GetString("access_password", String.Empty); m_app = openSim; m_httpd = openSim.HttpServer; diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs index e4bd54466e..60a7d2790c 100644 --- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs @@ -203,7 +203,7 @@ namespace OpenSim.ApplicationPlugins.Rest try { - if ((_config = openSim.ConfigSource.Configs["RestPlugins"]) == null) + if ((_config = openSim.ConfigSource.ConfigSource.Configs["RestPlugins"]) == null) { m_log.WarnFormat("{0} Rest Plugins not configured", MsgID); return; @@ -225,7 +225,7 @@ namespace OpenSim.ApplicationPlugins.Rest _prefix = _config.GetString("prefix", "/admin"); // Get plugin specific config - _pluginConfig = openSim.ConfigSource.Configs[ConfigName]; + _pluginConfig = openSim.ConfigSource.ConfigSource.Configs[ConfigName]; m_log.InfoFormat("{0} Rest Plugins Enabled", MsgID); diff --git a/OpenSim/Framework/IRegionLoader.cs b/OpenSim/Framework/IRegionLoader.cs index 87638a9824..0a952b7a20 100644 --- a/OpenSim/Framework/IRegionLoader.cs +++ b/OpenSim/Framework/IRegionLoader.cs @@ -31,7 +31,7 @@ namespace OpenSim.Framework { public interface IRegionLoader { - void SetIniConfigSource(IniConfigSource configSource); + void SetIniConfigSource(IConfigSource configSource); RegionInfo[] LoadRegions(); } } \ No newline at end of file diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index 0c01c5afdc..c345fce484 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -33,9 +33,9 @@ namespace OpenSim.Framework.RegionLoader.Filesystem { public class RegionLoaderFileSystem : IRegionLoader { - private IniConfigSource m_configSouce; + private IConfigSource m_configSouce; - public void SetIniConfigSource(IniConfigSource configSource) + public void SetIniConfigSource(IConfigSource configSource) { m_configSouce = configSource; } @@ -46,7 +46,7 @@ namespace OpenSim.Framework.RegionLoader.Filesystem try { - IniConfig startupConfig = (IniConfig)m_configSouce.Configs["Startup"]; + IConfig startupConfig = (IConfig)m_configSouce.Configs["Startup"]; regionConfigPath = startupConfig.GetString("regionload_regionsdir", regionConfigPath).Trim(); } catch (Exception) diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs index 17077e7643..029d3961bd 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -39,9 +39,9 @@ namespace OpenSim.Framework.RegionLoader.Web { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private IniConfigSource m_configSouce; + private IConfigSource m_configSouce; - public void SetIniConfigSource(IniConfigSource configSource) + public void SetIniConfigSource(IConfigSource configSource) { m_configSouce = configSource; } @@ -55,7 +55,7 @@ namespace OpenSim.Framework.RegionLoader.Web } else { - IniConfig startupConfig = (IniConfig) m_configSouce.Configs["Startup"]; + IConfig startupConfig = (IConfig) m_configSouce.Configs["Startup"]; string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim(); if (url == String.Empty) { diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 6f1a3cb4e7..4738dfca11 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -69,7 +69,7 @@ namespace OpenSim protected override void ReadConfigSettings() { - IConfig startupConfig = m_config.Configs["Startup"]; + IConfig startupConfig = m_config.ConfigSource.Configs["Startup"]; if (startupConfig != null) { @@ -528,7 +528,7 @@ namespace OpenSim c = DefaultConfig().AddConfig(cmdparams[1]); string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); c.Set(cmdparams[2], _value); - m_config.Merge(c.ConfigSource); + m_config.ConfigSource.Merge(c.ConfigSource); m_console.Error(n, n + " " + n + " " + cmdparams[1] + " " + cmdparams[2] + " " + _value); diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index f2056862b2..255a1251a2 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -107,9 +107,10 @@ namespace OpenSim protected IConfigSource m_finalConfig = null; - protected IniConfigSource m_config; + //protected IniConfigSource m_config; + protected OpenSimConfigSource m_config; - public IniConfigSource ConfigSource + public OpenSimConfigSource ConfigSource { get { return m_config; } set { m_config = value; } @@ -168,27 +169,43 @@ namespace OpenSim Application.iniFilePath = startupConfig.GetString("inifile", "OpenSim.ini"); - m_config = new IniConfigSource(); + m_config = new OpenSimConfigSource(); + m_config.ConfigSource = new IniConfigSource(); + IConfigSource icong; + //check for .INI file (either default or name passed in command line) if (File.Exists(Application.iniFilePath)) { - m_config.Merge(new IniConfigSource(Application.iniFilePath)); - m_config.Merge(configSource); + m_config.ConfigSource.Merge(new IniConfigSource(Application.iniFilePath)); + m_config.ConfigSource.Merge(configSource); } else { Application.iniFilePath = Path.Combine(Util.configDir(), Application.iniFilePath); if (File.Exists(Application.iniFilePath)) { - m_config.Merge(new IniConfigSource(Application.iniFilePath)); - m_config.Merge(configSource); + m_config.ConfigSource.Merge(new IniConfigSource(Application.iniFilePath)); + m_config.ConfigSource.Merge(configSource); } else { - // no default config files, so set default values, and save it - m_config.Merge(DefaultConfig()); - m_config.Merge(configSource); - m_config.Save(Application.iniFilePath); + if (File.Exists("OpenSim.xml")) + { + //chech for a xml config file + Application.iniFilePath = "OpenSim.xml"; + m_config.ConfigSource = new XmlConfigSource(); + m_config.ConfigSource.Merge(new XmlConfigSource(Application.iniFilePath)); + m_config.ConfigSource.Merge(configSource); + } + else + { + //Application.iniFilePath = "OpenSim.xml"; + // m_config.ConfigSource = new XmlConfigSource(); + // no default config files, so set default values, and save it + m_config.ConfigSource.Merge(DefaultConfig()); + m_config.ConfigSource.Merge(configSource); + m_config.Save(Application.iniFilePath); + } } } @@ -277,7 +294,7 @@ namespace OpenSim { m_networkServersInfo = new NetworkServersInfo(); - IConfig startupConfig = m_config.Configs["Startup"]; + IConfig startupConfig = m_config.ConfigSource.Configs["Startup"]; if (startupConfig != null) { @@ -306,7 +323,7 @@ namespace OpenSim m_clientstackDll = startupConfig.GetString("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll"); } - IConfig standaloneConfig = m_config.Configs["StandAlone"]; + IConfig standaloneConfig = m_config.ConfigSource.Configs["StandAlone"]; if (standaloneConfig != null) { m_standaloneAuthenticate = standaloneConfig.GetBoolean("accounts_authenticate", false); @@ -327,7 +344,7 @@ namespace OpenSim m_dumpAssetsToFile = standaloneConfig.GetBoolean("dump_assets_to_file", false); } - m_networkServersInfo.loadFromConfiguration(m_config); + m_networkServersInfo.loadFromConfiguration(m_config.ConfigSource); } /// @@ -380,11 +397,11 @@ namespace OpenSim m_httpServer.AddStreamHandler(new SimStatusHandler()); } - proxyUrl = ConfigSource.Configs["Network"].GetString("proxy_url", ""); - proxyOffset = Int32.Parse(ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); + proxyUrl = ConfigSource.ConfigSource.Configs["Network"].GetString("proxy_url", ""); + proxyOffset = Int32.Parse(ConfigSource.ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); // Create a ModuleLoader instance - m_moduleLoader = new ModuleLoader(m_config); + m_moduleLoader = new ModuleLoader(m_config.ConfigSource); ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/Startup"); foreach (TypeExtensionNode node in nodes) @@ -569,7 +586,7 @@ namespace OpenSim return new Scene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, - m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim, m_see_into_region_from_neighbor, m_config, + m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim, m_see_into_region_from_neighbor, m_config.ConfigSource, m_version); } @@ -618,7 +635,7 @@ namespace OpenSim protected override PhysicsScene GetPhysicsScene() { - return GetPhysicsScene(m_physicsEngine, m_meshEngineName, m_config); + return GetPhysicsScene(m_physicsEngine, m_meshEngineName, m_config.ConfigSource); } /// @@ -702,5 +719,24 @@ namespace OpenSim regionnum = m_sceneManager.Scenes.Count; } } + + public class OpenSimConfigSource + { + public IConfigSource ConfigSource; + + public void Save(string path) + { + if (ConfigSource is IniConfigSource) + { + IniConfigSource iniCon = (IniConfigSource)ConfigSource; + iniCon.Save(path); + } + else if (ConfigSource is XmlConfigSource) + { + XmlConfigSource xmlCon = (XmlConfigSource)ConfigSource; + xmlCon.Save(path); + } + } + } } diff --git a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs index 69b8feaede..e22231c05b 100644 --- a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs +++ b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs @@ -79,7 +79,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { m_log.Info("[BALANCER] " + "Entering Initialize()"); - proxyURL = openSim.ConfigSource.Configs["Network"].GetString("proxy_url", ""); + proxyURL = openSim.ConfigSource.ConfigSource.Configs["Network"].GetString("proxy_url", ""); if (proxyURL.Length == 0) return; StartTcpServer(); @@ -93,8 +93,8 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer simMain = openSim; commandServer = openSim.HttpServer; - proxyOffset = Int32.Parse(openSim.ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); - serializeDir = openSim.ConfigSource.Configs["Network"].GetString("serialize_dir", "/tmp/"); + proxyOffset = Int32.Parse(openSim.ConfigSource.ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); + serializeDir = openSim.ConfigSource.ConfigSource.Configs["Network"].GetString("serialize_dir", "/tmp/"); commandServer.AddXmlRPCHandler("SerializeRegion", SerializeRegion); commandServer.AddXmlRPCHandler("DeserializeRegion_Move", DeserializeRegion_Move); diff --git a/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs b/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs index c9711c3dc8..d8376b4628 100644 --- a/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs +++ b/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs @@ -72,7 +72,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy public void Initialise(OpenSimBase openSim) { m_log.Info("Starting proxy"); - string proxyURL = openSim.ConfigSource.Configs["Network"].GetString("proxy_url", ""); + string proxyURL = openSim.ConfigSource.ConfigSource.Configs["Network"].GetString("proxy_url", ""); if (proxyURL.Length == 0) return; uint port = (uint) Int32.Parse(proxyURL.Split(new char[] {':'})[2]); diff --git a/bin/OpenSim.Example.xml b/bin/OpenSim.Example.xml new file mode 100644 index 0000000000..97abde947d --- /dev/null +++ b/bin/OpenSim.Example.xml @@ -0,0 +1,48 @@ + +
+ + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + +
+
+ +
+
+ +
+
\ No newline at end of file