mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
*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
This commit is contained in:
89
OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs
Normal file
89
OpenSim/Framework/Configuration/HTTP/HTTPConfiguration.cs
Normal file
@@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
34
OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs
Normal file
34
OpenSim/Framework/Configuration/HTTP/RemoteConfigSettings.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 <Root>");
|
||||
|
||||
configNode = rootNode.FirstChild;
|
||||
if (configNode.Name != "Config")
|
||||
throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>");
|
||||
}
|
||||
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 <Root>");
|
||||
|
||||
configNode = rootNode.FirstChild;
|
||||
if (configNode.Name != "Config")
|
||||
throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>");
|
||||
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;
|
||||
|
||||
@@ -25,13 +25,16 @@ namespace OpenSim.Framework.Configuration
|
||||
private ConfigurationOptionResult resultFunction;
|
||||
|
||||
private IGenericConfig configurationPlugin = null;
|
||||
/// <summary>
|
||||
/// This is the default configuration DLL loaded
|
||||
/// </summary>
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user