diff --git a/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs b/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs new file mode 100644 index 0000000000..c7d2c9c64b --- /dev/null +++ b/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.IO; +using System.Text; + +using OpenSim.Framework.Configuration.Interfaces; + +namespace OpenSim.Framework.Configuration.HTTP +{ + public class HTTPConfiguration : IGenericConfig + { + RemoteConfigSettings remoteConfigSettings; + + XmlConfiguration xmlConfig; + + private string configFileName = ""; + + public HTTPConfiguration() + { + remoteConfigSettings = new RemoteConfigSettings("remoteconfig.xml"); + xmlConfig = new XmlConfiguration(); + } + + public void SetFileName(string fileName) + { + configFileName = fileName; + } + + public void LoadData() + { + try + { + StringBuilder sb = new StringBuilder(); + + byte[] buf = new byte[8192]; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.remoteConfigSettings.baseConfigURL + this.configFileName); + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + Stream resStream = response.GetResponseStream(); + + string tempString = null; + int count = 0; + + do + { + count = resStream.Read(buf, 0, buf.Length); + if (count != 0) + { + tempString = Encoding.ASCII.GetString(buf, 0, count); + sb.Append(tempString); + } + } + while (count > 0); + LoadDataFromString(sb.ToString()); + } + catch (Exception e) + { + Console.MainLog.Instance.Warn("Unable to connect to remote configuration file (" + remoteConfigSettings.baseConfigURL + configFileName + "). Creating local file instead."); + xmlConfig.SetFileName(configFileName); + xmlConfig.LoadData(); + } + } + + public void LoadDataFromString(string data) + { + xmlConfig.LoadDataFromString(data); + + } + + public string GetAttribute(string attributeName) + { + return xmlConfig.GetAttribute(attributeName); + } + + public bool SetAttribute(string attributeName, string attributeValue) + { + return true; + } + + public void Commit() + { + } + + public void Close() + { + } + } +} diff --git a/OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs b/OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs new file mode 100644 index 0000000000..e3cfac75e1 --- /dev/null +++ b/OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using OpenSim.Framework.Configuration; + +namespace OpenSim.Framework.Configuration.HTTP +{ + public class RemoteConfigSettings + { + private ConfigurationMember configMember; + + public string baseConfigURL = ""; + public RemoteConfigSettings(string filename) + { + configMember = new ConfigurationMember(filename, "REMOTE CONFIG SETTINGS", loadConfigurationOptions, handleIncomingConfiguration); + configMember.forceConfigurationPluginLibrary("OpenSim.Framework.Configuration.XML.dll"); + configMember.performConfigurationRetrieve(); + } + + public void loadConfigurationOptions() + { + configMember.addConfigurationOption("base_config_url", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "URL Containing Configuration Files", "http://localhost/", false); + } + public bool handleIncomingConfiguration(string configuration_key, object configuration_result) + { + if (configuration_key == "base_config_url") + { + baseConfigURL = (string)configuration_result; + } + return true; + } + } +} diff --git a/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs b/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs index e56c657d98..5b66035715 100644 --- a/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs +++ b/OpenSim/Framework/Configuration/XML/XmlConfiguration.cs @@ -47,10 +47,19 @@ namespace OpenSim.Framework.Configuration fileName = file; } + private void LoadDataToClass() + { + rootNode = doc.FirstChild; + if (rootNode.Name != "Root") + throw new Exception("Error: Invalid .xml File. Missing "); + + configNode = rootNode.FirstChild; + if (configNode.Name != "Config") + throw new Exception("Error: Invalid .xml File. first child should be "); + } public void LoadData() { doc = new XmlDocument(); - if (File.Exists(fileName)) { XmlTextReader reader = new XmlTextReader(fileName); @@ -67,14 +76,7 @@ namespace OpenSim.Framework.Configuration rootNode.AppendChild(configNode); } - - rootNode = doc.FirstChild; - if (rootNode.Name != "Root") - throw new Exception("Error: Invalid .xml File. Missing "); - - configNode = rootNode.FirstChild; - if (configNode.Name != "Config") - throw new Exception("Error: Invalid .xml File. first child should be "); + LoadDataToClass(); if (createdFile) { @@ -82,6 +84,13 @@ namespace OpenSim.Framework.Configuration } } + public void LoadDataFromString(string data) + { + doc = new XmlDocument(); + doc.LoadXml(data); + + LoadDataToClass(); + } public string GetAttribute(string attributeName) { string result = null; diff --git a/OpenSim/Framework/General/Configuration/ConfigurationMember.cs b/OpenSim/Framework/General/Configuration/ConfigurationMember.cs index 4a6e0ccfdb..b8dfc0cb40 100644 --- a/OpenSim/Framework/General/Configuration/ConfigurationMember.cs +++ b/OpenSim/Framework/General/Configuration/ConfigurationMember.cs @@ -25,13 +25,16 @@ namespace OpenSim.Framework.Configuration private ConfigurationOptionResult resultFunction; private IGenericConfig configurationPlugin = null; + /// + /// This is the default configuration DLL loaded + /// + private string configurationPluginFilename = "OpenSim.Framework.Configuration.XML.dll"; public ConfigurationMember(string configuration_filename, string configuration_description, ConfigurationOptionsLoad load_function, ConfigurationOptionResult result_function) { this.configurationFilename = configuration_filename; this.configurationDescription = configuration_description; this.loadFunction = load_function; this.resultFunction = result_function; - this.configurationPlugin = this.LoadConfigDll("OpenSim.Framework.Configuration.XML.dll"); } public void setConfigurationFilename(string filename) @@ -50,7 +53,7 @@ namespace OpenSim.Framework.Configuration public void forceConfigurationPluginLibrary(string dll_filename) { - configurationPlugin = this.LoadConfigDll(dll_filename); + configurationPluginFilename = dll_filename; } public void addConfigurationOption(string configuration_key, ConfigurationOption.ConfigurationTypes configuration_type, string configuration_question, string configuration_default, bool use_default_no_prompt) { @@ -76,6 +79,7 @@ namespace OpenSim.Framework.Configuration public void performConfigurationRetrieve() { + configurationPlugin = this.LoadConfigDll(configurationPluginFilename); configurationOptions.Clear(); if(loadFunction == null) { diff --git a/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs b/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs index 5a5a20edef..ceccd04fab 100644 --- a/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs +++ b/OpenSim/Framework/General/Configuration/Interfaces/IGenericConfig.cs @@ -31,6 +31,7 @@ namespace OpenSim.Framework.Configuration.Interfaces { void SetFileName(string fileName); void LoadData(); + void LoadDataFromString(string data); string GetAttribute(string attributeName); bool SetAttribute(string attributeName, string attributeValue); void Commit(); diff --git a/prebuild.xml b/prebuild.xml index 83c5142380..d57eaf885d 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -124,13 +124,38 @@ - + + + + ../../../../bin/ + + + + + ../../../../bin/ + + + + ../../../../bin/ + + + + + + + + + + + + +