From 87bddd32dfdb6ab43ef21703053935d3cda69c51 Mon Sep 17 00:00:00 2001 From: mingchen Date: Mon, 23 Jul 2007 19:30:33 +0000 Subject: *Added configuration plugin (OpenSim.Framework.Configuration.HTTP.dll) that fetches a file from a remote server *Right now, values are not saved back to the remote server, but that will be changed *Removed some warnings from invalid references that were not used anyways --- .../Configuration/HTTP/HTTPConfiguration.cs | 89 ++++++++++++++++++++++ .../Configuration/HTTP/RemoteConfigSettings.cs | 34 +++++++++ .../Configuration/XML/XmlConfiguration.cs | 27 ++++--- 3 files changed, 141 insertions(+), 9 deletions(-) create mode 100644 OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs create mode 100644 OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs (limited to 'OpenSim/Framework/Configuration') diff --git a/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs b/OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs new file mode 100644 index 0000000..c7d2c9c --- /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 0000000..e3cfac7 --- /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 e56c657..5b66035 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; -- cgit v1.1