Merge branch 'master' into careminster-presence-refactor
commit
757929012e
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using log4net;
|
||||||
|
using OpenSim.Framework.Configuration.XML;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Configuration.HTTP
|
||||||
|
{
|
||||||
|
public class HTTPConfiguration : IGenericConfig
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private RemoteConfigSettings remoteConfigSettings;
|
||||||
|
|
||||||
|
private XmlConfiguration xmlConfig;
|
||||||
|
|
||||||
|
private string configFileName = String.Empty;
|
||||||
|
|
||||||
|
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(remoteConfigSettings.baseConfigURL + 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 = Util.UTF8.GetString(buf, 0, count);
|
||||||
|
sb.Append(tempString);
|
||||||
|
}
|
||||||
|
} while (count > 0);
|
||||||
|
LoadDataFromString(sb.ToString());
|
||||||
|
}
|
||||||
|
catch (WebException)
|
||||||
|
{
|
||||||
|
m_log.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,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Configuration.HTTP
|
||||||
|
{
|
||||||
|
public class RemoteConfigSettings
|
||||||
|
{
|
||||||
|
private ConfigurationMember configMember;
|
||||||
|
|
||||||
|
public string baseConfigURL = String.Empty;
|
||||||
|
|
||||||
|
public RemoteConfigSettings(string filename)
|
||||||
|
{
|
||||||
|
configMember =
|
||||||
|
new ConfigurationMember(filename, "REMOTE CONFIG SETTINGS", loadConfigurationOptions,
|
||||||
|
handleIncomingConfiguration,true);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Configuration.XML
|
||||||
|
{
|
||||||
|
public class XmlConfiguration : IGenericConfig
|
||||||
|
{
|
||||||
|
private XmlDocument doc;
|
||||||
|
private XmlNode rootNode;
|
||||||
|
private XmlNode configNode;
|
||||||
|
private string fileName;
|
||||||
|
private bool createdFile = false;
|
||||||
|
|
||||||
|
public void SetFileName(string file)
|
||||||
|
{
|
||||||
|
fileName = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadDataToClass()
|
||||||
|
{
|
||||||
|
rootNode = doc.SelectSingleNode("Root");
|
||||||
|
if (null == rootNode)
|
||||||
|
throw new Exception("Error: Invalid .xml File. Missing <Root>");
|
||||||
|
|
||||||
|
configNode = rootNode.SelectSingleNode("Config");
|
||||||
|
if (null == configNode)
|
||||||
|
throw new Exception("Error: Invalid .xml File. <Root> should contain a <Config>");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadData()
|
||||||
|
{
|
||||||
|
lock (this)
|
||||||
|
{
|
||||||
|
doc = new XmlDocument();
|
||||||
|
if (File.Exists(fileName))
|
||||||
|
{
|
||||||
|
XmlTextReader reader = new XmlTextReader(fileName);
|
||||||
|
reader.WhitespaceHandling = WhitespaceHandling.None;
|
||||||
|
doc.Load(reader);
|
||||||
|
reader.Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
createdFile = true;
|
||||||
|
rootNode = doc.CreateNode(XmlNodeType.Element, "Root", String.Empty);
|
||||||
|
doc.AppendChild(rootNode);
|
||||||
|
configNode = doc.CreateNode(XmlNodeType.Element, "Config", String.Empty);
|
||||||
|
rootNode.AppendChild(configNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadDataToClass();
|
||||||
|
|
||||||
|
if (createdFile)
|
||||||
|
{
|
||||||
|
Commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadDataFromString(string data)
|
||||||
|
{
|
||||||
|
doc = new XmlDocument();
|
||||||
|
doc.LoadXml(data);
|
||||||
|
|
||||||
|
LoadDataToClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetAttribute(string attributeName)
|
||||||
|
{
|
||||||
|
string result = null;
|
||||||
|
if (configNode.Attributes[attributeName] != null)
|
||||||
|
{
|
||||||
|
result = ((XmlAttribute) configNode.Attributes.GetNamedItem(attributeName)).Value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SetAttribute(string attributeName, string attributeValue)
|
||||||
|
{
|
||||||
|
if (configNode.Attributes[attributeName] != null)
|
||||||
|
{
|
||||||
|
((XmlAttribute) configNode.Attributes.GetNamedItem(attributeName)).Value = attributeValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XmlAttribute attri;
|
||||||
|
attri = doc.CreateAttribute(attributeName);
|
||||||
|
attri.Value = attributeValue;
|
||||||
|
configNode.Attributes.Append(attri);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Commit()
|
||||||
|
{
|
||||||
|
if (fileName == null || fileName == String.Empty)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!Directory.Exists(Util.configDir()))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(Util.configDir());
|
||||||
|
}
|
||||||
|
doc.Save(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
configNode = null;
|
||||||
|
rootNode = null;
|
||||||
|
doc = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
52
prebuild.xml
52
prebuild.xml
|
@ -255,6 +255,58 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<Project frameworkVersion="v3_5" name="OpenSim.Framework.Configuration.XML" path="OpenSim/Framework/Configuration/XML" 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="OpenMetaverseTypes.dll"/>
|
||||||
|
<Reference name="XMLRPC.dll"/>
|
||||||
|
<Reference name="OpenSim.Framework"/>
|
||||||
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Data"/>
|
||||||
|
<Files>
|
||||||
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
|
</Files>
|
||||||
|
</Project>
|
||||||
|
|
||||||
|
<Project frameworkVersion="v3_5" 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="OpenMetaverseTypes.dll"/>
|
||||||
|
<Reference name="XMLRPC.dll"/>
|
||||||
|
<Reference name="OpenSim.Framework"/>
|
||||||
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Framework.Configuration.XML"/>
|
||||||
|
<Reference name="OpenSim.Data"/>
|
||||||
|
<Reference name="log4net.dll"/>
|
||||||
|
<Files>
|
||||||
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
|
</Files>
|
||||||
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Framework.AssetLoader.Filesystem" path="OpenSim/Framework/AssetLoader/Filesystem" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Framework.AssetLoader.Filesystem" path="OpenSim/Framework/AssetLoader/Filesystem" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
|
Loading…
Reference in New Issue