From 70a0d7aa4677c240ad12527adde6725df946e572 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 8 Feb 2010 15:21:35 +0000
Subject: Adding the Careminster "Configger" tool to OpenSim. The tool will,
when launched in place of OpenSim, dump the config to stdout. Use -f xml, -f
ini or -f mysql to get a condensed ini file, an xml file suitable for
webloading, or a set of mysql insert statements.
---
OpenSim/Tools/Configger/ConfigurationLoader.cs | 251 +++++++++++++++++++++++++
1 file changed, 251 insertions(+)
create mode 100644 OpenSim/Tools/Configger/ConfigurationLoader.cs
(limited to 'OpenSim/Tools/Configger/ConfigurationLoader.cs')
diff --git a/OpenSim/Tools/Configger/ConfigurationLoader.cs b/OpenSim/Tools/Configger/ConfigurationLoader.cs
new file mode 100644
index 0000000..49af417
--- /dev/null
+++ b/OpenSim/Tools/Configger/ConfigurationLoader.cs
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Threading;
+using System.Xml;
+using log4net;
+using Nini.Config;
+
+namespace Careminster
+{
+ ///
+ /// Loads the Configuration files into nIni
+ ///
+ public class ConfigurationLoader
+ {
+ ///
+ /// A source of Configuration data
+ ///
+ protected IConfigSource m_config;
+
+ ///
+ /// Console logger
+ ///
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ public ConfigurationLoader()
+ {
+ }
+
+ ///
+ /// Loads the region configuration
+ ///
+ /// Parameters passed into the process when started
+ ///
+ ///
+ /// A configuration that gets passed to modules
+ public IConfigSource LoadConfigSettings()
+ {
+ bool iniFileExists = false;
+
+ List sources = new List();
+
+ string iniFileName = "OpenSim.ini";
+ string iniFilePath = Path.Combine(".", iniFileName);
+
+ if (IsUri(iniFileName))
+ {
+ if (!sources.Contains(iniFileName))
+ sources.Add(iniFileName);
+ }
+ else
+ {
+ if (File.Exists(iniFilePath))
+ {
+ if (!sources.Contains(iniFilePath))
+ sources.Add(iniFilePath);
+ }
+ }
+
+ m_config = new IniConfigSource();
+ m_config.Merge(DefaultConfig());
+
+ m_log.Info("[CONFIG] Reading configuration settings");
+
+ if (sources.Count == 0)
+ {
+ m_log.FatalFormat("[CONFIG] Could not load any configuration");
+ m_log.FatalFormat("[CONFIG] Did you copy the OpenSim.ini.example file to OpenSim.ini?");
+ Environment.Exit(1);
+ }
+
+ for (int i = 0 ; i < sources.Count ; i++)
+ {
+ if (ReadConfig(sources[i]))
+ iniFileExists = true;
+ AddIncludes(sources);
+ }
+
+ if (!iniFileExists)
+ {
+ m_log.FatalFormat("[CONFIG] Could not load any configuration");
+ m_log.FatalFormat("[CONFIG] Configuration exists, but there was an error loading it!");
+ Environment.Exit(1);
+ }
+
+ return m_config;
+ }
+
+ ///
+ /// Adds the included files as ini configuration files
+ ///
+ /// List of URL strings or filename strings
+ private void AddIncludes(List sources)
+ {
+ //loop over config sources
+ foreach (IConfig config in m_config.Configs)
+ {
+ // Look for Include-* in the key name
+ string[] keys = config.GetKeys();
+ foreach (string k in keys)
+ {
+ if (k.StartsWith("Include-"))
+ {
+ // read the config file to be included.
+ string file = config.GetString(k);
+ if (IsUri(file))
+ {
+ if (!sources.Contains(file))
+ sources.Add(file);
+ }
+ else
+ {
+ string basepath = Path.GetFullPath(".");
+ string path = Path.Combine(basepath, file);
+ string[] paths = Util.Glob(path);
+ foreach (string p in paths)
+ {
+ if (!sources.Contains(p))
+ sources.Add(p);
+ }
+ }
+ }
+ }
+ }
+ }
+ ///
+ /// Check if we can convert the string to a URI
+ ///
+ /// String uri to the remote resource
+ /// true if we can convert the string to a Uri object
+ bool IsUri(string file)
+ {
+ Uri configUri;
+
+ return Uri.TryCreate(file, UriKind.Absolute,
+ out configUri) && configUri.Scheme == Uri.UriSchemeHttp;
+ }
+
+ ///
+ /// Provide same ini loader functionality for standard ini and master ini - file system or XML over http
+ ///
+ /// Full path to the ini
+ ///
+ private bool ReadConfig(string iniPath)
+ {
+ bool success = false;
+
+ if (!IsUri(iniPath))
+ {
+ m_log.InfoFormat("[CONFIG] Reading configuration file {0}",
+ Path.GetFullPath(iniPath));
+
+ m_config.Merge(new IniConfigSource(iniPath));
+ success = true;
+ }
+ else
+ {
+ m_log.InfoFormat("[CONFIG] {0} is a http:// URI, fetching ...",
+ iniPath);
+
+ // The ini file path is a http URI
+ // Try to read it
+ //
+ try
+ {
+ XmlReader r = XmlReader.Create(iniPath);
+ XmlConfigSource cs = new XmlConfigSource(r);
+ m_config.Merge(cs);
+
+ success = true;
+ }
+ catch (Exception e)
+ {
+ m_log.FatalFormat("[CONFIG] Exception reading config from URI {0}\n" + e.ToString(), iniPath);
+ Environment.Exit(1);
+ }
+ }
+ return success;
+ }
+
+ ///
+ /// Setup a default config values in case they aren't present in the ini file
+ ///
+ /// A Configuration source containing the default configuration
+ private static IConfigSource DefaultConfig()
+ {
+ IConfigSource defaultConfig = new IniConfigSource();
+
+ {
+ IConfig config = defaultConfig.Configs["Startup"];
+
+ if (null == config)
+ config = defaultConfig.AddConfig("Startup");
+
+ config.Set("region_info_source", "filesystem");
+
+ config.Set("gridmode", false);
+ config.Set("physics", "OpenDynamicsEngine");
+ config.Set("meshing", "Meshmerizer");
+ config.Set("physical_prim", true);
+ config.Set("see_into_this_sim_from_neighbor", true);
+ config.Set("serverside_object_permissions", false);
+ config.Set("storage_plugin", "OpenSim.Data.SQLite.dll");
+ config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3");
+ config.Set("storage_prim_inventories", true);
+ config.Set("startup_console_commands_file", String.Empty);
+ config.Set("shutdown_console_commands_file", String.Empty);
+ config.Set("DefaultScriptEngine", "XEngine");
+ config.Set("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll");
+ // life doesn't really work without this
+ config.Set("EventQueue", true);
+ }
+
+ {
+ IConfig config = defaultConfig.Configs["StandAlone"];
+
+ if (null == config)
+ config = defaultConfig.AddConfig("StandAlone");
+
+ config.Set("accounts_authenticate", true);
+ config.Set("welcome_message", "Welcome to OpenSimulator");
+ config.Set("inventory_plugin", "OpenSim.Data.SQLite.dll");
+ config.Set("inventory_source", "");
+ config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll");
+ config.Set("user_source", "");
+ config.Set("LibrariesXMLFile", string.Format(".{0}inventory{0}Libraries.xml", Path.DirectorySeparatorChar));
+ }
+
+ {
+ IConfig config = defaultConfig.Configs["Network"];
+
+ if (null == config)
+ config = defaultConfig.AddConfig("Network");
+
+ config.Set("default_location_x", 1000);
+ config.Set("default_location_y", 1000);
+ config.Set("grid_send_key", "null");
+ config.Set("grid_recv_key", "null");
+ config.Set("user_send_key", "null");
+ config.Set("user_recv_key", "null");
+ config.Set("secure_inventory_server", "true");
+ }
+
+ return defaultConfig;
+ }
+
+ }
+}
--
cgit v1.1