*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 anywaysafrisby
parent
f8c1366cbf
commit
87bddd32df
|
@ -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()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
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()
|
public void LoadData()
|
||||||
{
|
{
|
||||||
doc = new XmlDocument();
|
doc = new XmlDocument();
|
||||||
|
|
||||||
if (File.Exists(fileName))
|
if (File.Exists(fileName))
|
||||||
{
|
{
|
||||||
XmlTextReader reader = new XmlTextReader(fileName);
|
XmlTextReader reader = new XmlTextReader(fileName);
|
||||||
|
@ -67,14 +76,7 @@ namespace OpenSim.Framework.Configuration
|
||||||
rootNode.AppendChild(configNode);
|
rootNode.AppendChild(configNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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>");
|
|
||||||
|
|
||||||
if (createdFile)
|
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)
|
public string GetAttribute(string attributeName)
|
||||||
{
|
{
|
||||||
string result = null;
|
string result = null;
|
||||||
|
|
|
@ -25,13 +25,16 @@ namespace OpenSim.Framework.Configuration
|
||||||
private ConfigurationOptionResult resultFunction;
|
private ConfigurationOptionResult resultFunction;
|
||||||
|
|
||||||
private IGenericConfig configurationPlugin = null;
|
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)
|
public ConfigurationMember(string configuration_filename, string configuration_description, ConfigurationOptionsLoad load_function, ConfigurationOptionResult result_function)
|
||||||
{
|
{
|
||||||
this.configurationFilename = configuration_filename;
|
this.configurationFilename = configuration_filename;
|
||||||
this.configurationDescription = configuration_description;
|
this.configurationDescription = configuration_description;
|
||||||
this.loadFunction = load_function;
|
this.loadFunction = load_function;
|
||||||
this.resultFunction = result_function;
|
this.resultFunction = result_function;
|
||||||
this.configurationPlugin = this.LoadConfigDll("OpenSim.Framework.Configuration.XML.dll");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConfigurationFilename(string filename)
|
public void setConfigurationFilename(string filename)
|
||||||
|
@ -50,7 +53,7 @@ namespace OpenSim.Framework.Configuration
|
||||||
|
|
||||||
public void forceConfigurationPluginLibrary(string dll_filename)
|
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)
|
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()
|
public void performConfigurationRetrieve()
|
||||||
{
|
{
|
||||||
|
configurationPlugin = this.LoadConfigDll(configurationPluginFilename);
|
||||||
configurationOptions.Clear();
|
configurationOptions.Clear();
|
||||||
if(loadFunction == null)
|
if(loadFunction == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@ namespace OpenSim.Framework.Configuration.Interfaces
|
||||||
{
|
{
|
||||||
void SetFileName(string fileName);
|
void SetFileName(string fileName);
|
||||||
void LoadData();
|
void LoadData();
|
||||||
|
void LoadDataFromString(string data);
|
||||||
string GetAttribute(string attributeName);
|
string GetAttribute(string attributeName);
|
||||||
bool SetAttribute(string attributeName, string attributeValue);
|
bool SetAttribute(string attributeName, string attributeValue);
|
||||||
void Commit();
|
void Commit();
|
||||||
|
|
27
prebuild.xml
27
prebuild.xml
|
@ -124,13 +124,38 @@
|
||||||
<Reference name="XMLRPC.dll"/>
|
<Reference name="XMLRPC.dll"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
<Reference name="OpenSim.Framework.Configuration"/>
|
|
||||||
<Reference name="OpenSim.Framework.Data"/>
|
<Reference name="OpenSim.Framework.Data"/>
|
||||||
<Files>
|
<Files>
|
||||||
<Match pattern="*.cs" recurse="true"/>
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<Project name="OpenSim.Framework.Configuration.HTTP" path="OpenSim/Framework/Configuration/HTTP" type="Library">
|
||||||
|
<Configuration name="Debug">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration name="Release">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
|
||||||
|
<ReferencePath>../../../../bin/</ReferencePath>
|
||||||
|
<Reference name="System"/>
|
||||||
|
<Reference name="System.Xml"/>
|
||||||
|
<Reference name="libsecondlife.dll"/>
|
||||||
|
<Reference name="Db4objects.Db4o.dll"/>
|
||||||
|
<Reference name="XMLRPC.dll"/>
|
||||||
|
<Reference name="OpenSim.Framework"/>
|
||||||
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Framework.Configuration.XML"/>
|
||||||
|
<Reference name="OpenSim.Framework.Data"/>
|
||||||
|
<Files>
|
||||||
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
|
</Files>
|
||||||
|
</Project>
|
||||||
|
|
||||||
<Project name="OpenSim.Framework.Servers" path="OpenSim/Framework/Servers" type="Library">
|
<Project name="OpenSim.Framework.Servers" path="OpenSim/Framework/Servers" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
|
|
Loading…
Reference in New Issue