diff options
Diffstat (limited to 'OpenSim/Framework/Configuration')
3 files changed, 141 insertions, 9 deletions
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 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Net; | ||
4 | using System.IO; | ||
5 | using System.Text; | ||
6 | |||
7 | using OpenSim.Framework.Configuration.Interfaces; | ||
8 | |||
9 | namespace OpenSim.Framework.Configuration.HTTP | ||
10 | { | ||
11 | public class HTTPConfiguration : IGenericConfig | ||
12 | { | ||
13 | RemoteConfigSettings remoteConfigSettings; | ||
14 | |||
15 | XmlConfiguration xmlConfig; | ||
16 | |||
17 | private string configFileName = ""; | ||
18 | |||
19 | public HTTPConfiguration() | ||
20 | { | ||
21 | remoteConfigSettings = new RemoteConfigSettings("remoteconfig.xml"); | ||
22 | xmlConfig = new XmlConfiguration(); | ||
23 | } | ||
24 | |||
25 | public void SetFileName(string fileName) | ||
26 | { | ||
27 | configFileName = fileName; | ||
28 | } | ||
29 | |||
30 | public void LoadData() | ||
31 | { | ||
32 | try | ||
33 | { | ||
34 | StringBuilder sb = new StringBuilder(); | ||
35 | |||
36 | byte[] buf = new byte[8192]; | ||
37 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.remoteConfigSettings.baseConfigURL + this.configFileName); | ||
38 | HttpWebResponse response = (HttpWebResponse)request.GetResponse(); | ||
39 | |||
40 | Stream resStream = response.GetResponseStream(); | ||
41 | |||
42 | string tempString = null; | ||
43 | int count = 0; | ||
44 | |||
45 | do | ||
46 | { | ||
47 | count = resStream.Read(buf, 0, buf.Length); | ||
48 | if (count != 0) | ||
49 | { | ||
50 | tempString = Encoding.ASCII.GetString(buf, 0, count); | ||
51 | sb.Append(tempString); | ||
52 | } | ||
53 | } | ||
54 | while (count > 0); | ||
55 | LoadDataFromString(sb.ToString()); | ||
56 | } | ||
57 | catch (Exception e) | ||
58 | { | ||
59 | Console.MainLog.Instance.Warn("Unable to connect to remote configuration file (" + remoteConfigSettings.baseConfigURL + configFileName + "). Creating local file instead."); | ||
60 | xmlConfig.SetFileName(configFileName); | ||
61 | xmlConfig.LoadData(); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | public void LoadDataFromString(string data) | ||
66 | { | ||
67 | xmlConfig.LoadDataFromString(data); | ||
68 | |||
69 | } | ||
70 | |||
71 | public string GetAttribute(string attributeName) | ||
72 | { | ||
73 | return xmlConfig.GetAttribute(attributeName); | ||
74 | } | ||
75 | |||
76 | public bool SetAttribute(string attributeName, string attributeValue) | ||
77 | { | ||
78 | return true; | ||
79 | } | ||
80 | |||
81 | public void Commit() | ||
82 | { | ||
83 | } | ||
84 | |||
85 | public void Close() | ||
86 | { | ||
87 | } | ||
88 | } | ||
89 | } | ||
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 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | using OpenSim.Framework.Configuration; | ||
6 | |||
7 | namespace OpenSim.Framework.Configuration.HTTP | ||
8 | { | ||
9 | public class RemoteConfigSettings | ||
10 | { | ||
11 | private ConfigurationMember configMember; | ||
12 | |||
13 | public string baseConfigURL = ""; | ||
14 | public RemoteConfigSettings(string filename) | ||
15 | { | ||
16 | configMember = new ConfigurationMember(filename, "REMOTE CONFIG SETTINGS", loadConfigurationOptions, handleIncomingConfiguration); | ||
17 | configMember.forceConfigurationPluginLibrary("OpenSim.Framework.Configuration.XML.dll"); | ||
18 | configMember.performConfigurationRetrieve(); | ||
19 | } | ||
20 | |||
21 | public void loadConfigurationOptions() | ||
22 | { | ||
23 | configMember.addConfigurationOption("base_config_url", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "URL Containing Configuration Files", "http://localhost/", false); | ||
24 | } | ||
25 | public bool handleIncomingConfiguration(string configuration_key, object configuration_result) | ||
26 | { | ||
27 | if (configuration_key == "base_config_url") | ||
28 | { | ||
29 | baseConfigURL = (string)configuration_result; | ||
30 | } | ||
31 | return true; | ||
32 | } | ||
33 | } | ||
34 | } | ||
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 | |||
47 | fileName = file; | 47 | fileName = file; |
48 | } | 48 | } |
49 | 49 | ||
50 | private void LoadDataToClass() | ||
51 | { | ||
52 | rootNode = doc.FirstChild; | ||
53 | if (rootNode.Name != "Root") | ||
54 | throw new Exception("Error: Invalid .xml File. Missing <Root>"); | ||
55 | |||
56 | configNode = rootNode.FirstChild; | ||
57 | if (configNode.Name != "Config") | ||
58 | throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>"); | ||
59 | } | ||
50 | public void LoadData() | 60 | public void LoadData() |
51 | { | 61 | { |
52 | doc = new XmlDocument(); | 62 | doc = new XmlDocument(); |
53 | |||
54 | if (File.Exists(fileName)) | 63 | if (File.Exists(fileName)) |
55 | { | 64 | { |
56 | XmlTextReader reader = new XmlTextReader(fileName); | 65 | XmlTextReader reader = new XmlTextReader(fileName); |
@@ -67,14 +76,7 @@ namespace OpenSim.Framework.Configuration | |||
67 | rootNode.AppendChild(configNode); | 76 | rootNode.AppendChild(configNode); |
68 | } | 77 | } |
69 | 78 | ||
70 | 79 | LoadDataToClass(); | |
71 | rootNode = doc.FirstChild; | ||
72 | if (rootNode.Name != "Root") | ||
73 | throw new Exception("Error: Invalid .xml File. Missing <Root>"); | ||
74 | |||
75 | configNode = rootNode.FirstChild; | ||
76 | if (configNode.Name != "Config") | ||
77 | throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>"); | ||
78 | 80 | ||
79 | if (createdFile) | 81 | if (createdFile) |
80 | { | 82 | { |
@@ -82,6 +84,13 @@ namespace OpenSim.Framework.Configuration | |||
82 | } | 84 | } |
83 | } | 85 | } |
84 | 86 | ||
87 | public void LoadDataFromString(string data) | ||
88 | { | ||
89 | doc = new XmlDocument(); | ||
90 | doc.LoadXml(data); | ||
91 | |||
92 | LoadDataToClass(); | ||
93 | } | ||
85 | public string GetAttribute(string attributeName) | 94 | public string GetAttribute(string attributeName) |
86 | { | 95 | { |
87 | string result = null; | 96 | string result = null; |