diff options
Diffstat (limited to '')
55 files changed, 2229 insertions, 417 deletions
diff --git a/OpenSim/Server/Base/CommandManager.cs b/OpenSim/Server/Base/CommandManager.cs index bd18485..b6e2903 100644 --- a/OpenSim/Server/Base/CommandManager.cs +++ b/OpenSim/Server/Base/CommandManager.cs | |||
@@ -41,117 +41,117 @@ namespace OpenSim.Server.Base | |||
41 | { | 41 | { |
42 | /// <summary> | 42 | /// <summary> |
43 | /// Command manager - | 43 | /// Command manager - |
44 | /// Wrapper for OpenSim.Framework.PluginManager to allow | 44 | /// Wrapper for OpenSim.Framework.PluginManager to allow |
45 | /// us to add commands to the console to perform operations | 45 | /// us to add commands to the console to perform operations |
46 | /// on our repos and plugins | 46 | /// on our repos and plugins |
47 | /// </summary> | 47 | /// </summary> |
48 | public class CommandManager | 48 | public class CommandManager |
49 | { | 49 | { |
50 | public AddinRegistry PluginRegistry; | 50 | public AddinRegistry PluginRegistry; |
51 | protected PluginManager PluginManager; | 51 | protected PluginManager PluginManager; |
52 | 52 | ||
53 | public CommandManager(AddinRegistry registry) | 53 | public CommandManager(AddinRegistry registry) |
54 | { | 54 | { |
55 | PluginRegistry = registry; | 55 | PluginRegistry = registry; |
56 | PluginManager = new PluginManager(PluginRegistry); | 56 | PluginManager = new PluginManager(PluginRegistry); |
57 | AddManagementCommands(); | 57 | AddManagementCommands(); |
58 | } | 58 | } |
59 | 59 | ||
60 | private void AddManagementCommands() | 60 | private void AddManagementCommands() |
61 | { | 61 | { |
62 | // add plugin | 62 | // add plugin |
63 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 63 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
64 | "plugin add", "plugin add \"plugin index\"", | 64 | "plugin add", "plugin add \"plugin index\"", |
65 | "Install plugin from repository.", | 65 | "Install plugin from repository.", |
66 | HandleConsoleInstallPlugin); | 66 | HandleConsoleInstallPlugin); |
67 | 67 | ||
68 | // remove plugin | 68 | // remove plugin |
69 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 69 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
70 | "plugin remove", "plugin remove \"plugin index\"", | 70 | "plugin remove", "plugin remove \"plugin index\"", |
71 | "Remove plugin from repository", | 71 | "Remove plugin from repository", |
72 | HandleConsoleUnInstallPlugin); | 72 | HandleConsoleUnInstallPlugin); |
73 | 73 | ||
74 | // list installed plugins | 74 | // list installed plugins |
75 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 75 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
76 | "plugin list installed", | 76 | "plugin list installed", |
77 | "plugin list installed","List install plugins", | 77 | "plugin list installed","List install plugins", |
78 | HandleConsoleListInstalledPlugin); | 78 | HandleConsoleListInstalledPlugin); |
79 | 79 | ||
80 | // list plugins available from registered repositories | 80 | // list plugins available from registered repositories |
81 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 81 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
82 | "plugin list available", | 82 | "plugin list available", |
83 | "plugin list available","List available plugins", | 83 | "plugin list available","List available plugins", |
84 | HandleConsoleListAvailablePlugin); | 84 | HandleConsoleListAvailablePlugin); |
85 | // List available updates | 85 | // List available updates |
86 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 86 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
87 | "plugin updates", "plugin updates","List availble updates", | 87 | "plugin updates", "plugin updates","List availble updates", |
88 | HandleConsoleListUpdates); | 88 | HandleConsoleListUpdates); |
89 | 89 | ||
90 | // Update plugin | 90 | // Update plugin |
91 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 91 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
92 | "plugin update", "plugin update \"plugin index\"","Update the plugin", | 92 | "plugin update", "plugin update \"plugin index\"","Update the plugin", |
93 | HandleConsoleUpdatePlugin); | 93 | HandleConsoleUpdatePlugin); |
94 | 94 | ||
95 | // Add repository | 95 | // Add repository |
96 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 96 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
97 | "repo add", "repo add \"url\"","Add repository", | 97 | "repo add", "repo add \"url\"","Add repository", |
98 | HandleConsoleAddRepo); | 98 | HandleConsoleAddRepo); |
99 | 99 | ||
100 | // Refresh repo | 100 | // Refresh repo |
101 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 101 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
102 | "repo refresh", "repo refresh \"url\"", "Sync with a registered repository", | 102 | "repo refresh", "repo refresh \"url\"", "Sync with a registered repository", |
103 | HandleConsoleGetRepo); | 103 | HandleConsoleGetRepo); |
104 | 104 | ||
105 | // Remove repository from registry | 105 | // Remove repository from registry |
106 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 106 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
107 | "repo remove", | 107 | "repo remove", |
108 | "repo remove \"[url | index]\"", | 108 | "repo remove \"[url | index]\"", |
109 | "Remove repository from registry", | 109 | "Remove repository from registry", |
110 | HandleConsoleRemoveRepo); | 110 | HandleConsoleRemoveRepo); |
111 | 111 | ||
112 | // Enable repo | 112 | // Enable repo |
113 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 113 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
114 | "repo enable", "repo enable \"[url | index]\"", | 114 | "repo enable", "repo enable \"[url | index]\"", |
115 | "Enable registered repository", | 115 | "Enable registered repository", |
116 | HandleConsoleEnableRepo); | 116 | HandleConsoleEnableRepo); |
117 | 117 | ||
118 | // Disable repo | 118 | // Disable repo |
119 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 119 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
120 | "repo disable", "repo disable\"[url | index]\"", | 120 | "repo disable", "repo disable\"[url | index]\"", |
121 | "Disable registered repository", | 121 | "Disable registered repository", |
122 | HandleConsoleDisableRepo); | 122 | HandleConsoleDisableRepo); |
123 | 123 | ||
124 | // List registered repositories | 124 | // List registered repositories |
125 | MainConsole.Instance.Commands.AddCommand("Repository", true, | 125 | MainConsole.Instance.Commands.AddCommand("Repository", true, |
126 | "repo list", "repo list", | 126 | "repo list", "repo list", |
127 | "List registered repositories", | 127 | "List registered repositories", |
128 | HandleConsoleListRepos); | 128 | HandleConsoleListRepos); |
129 | 129 | ||
130 | // * | 130 | // * |
131 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 131 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
132 | "plugin info", "plugin info \"plugin index\"","Show detailed information for plugin", | 132 | "plugin info", "plugin info \"plugin index\"","Show detailed information for plugin", |
133 | HandleConsoleShowAddinInfo); | 133 | HandleConsoleShowAddinInfo); |
134 | 134 | ||
135 | // Plugin disable | 135 | // Plugin disable |
136 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 136 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
137 | "plugin disable", "plugin disable \"plugin index\"", | 137 | "plugin disable", "plugin disable \"plugin index\"", |
138 | "Disable a plugin", | 138 | "Disable a plugin", |
139 | HandleConsoleDisablePlugin); | 139 | HandleConsoleDisablePlugin); |
140 | 140 | ||
141 | // Enable plugin | 141 | // Enable plugin |
142 | MainConsole.Instance.Commands.AddCommand("Plugin", true, | 142 | MainConsole.Instance.Commands.AddCommand("Plugin", true, |
143 | "plugin enable", "plugin enable \"plugin index\"", | 143 | "plugin enable", "plugin enable \"plugin index\"", |
144 | "Enable the selected plugin plugin", | 144 | "Enable the selected plugin plugin", |
145 | HandleConsoleEnablePlugin); | 145 | HandleConsoleEnablePlugin); |
146 | } | 146 | } |
147 | 147 | ||
148 | #region console handlers | 148 | #region console handlers |
149 | // Handle our console commands | 149 | // Handle our console commands |
150 | // | 150 | // |
151 | // Install plugin from registered repository | 151 | // Install plugin from registered repository |
152 | /// <summary> | 152 | /// <summary> |
153 | /// Handles the console install plugin command. Attempts to install the selected plugin | 153 | /// Handles the console install plugin command. Attempts to install the selected plugin |
154 | /// and | 154 | /// and |
155 | /// </summary> | 155 | /// </summary> |
156 | /// <param name='module'> | 156 | /// <param name='module'> |
157 | /// Module. | 157 | /// Module. |
@@ -323,7 +323,7 @@ namespace OpenSim.Server.Base | |||
323 | { | 323 | { |
324 | if (cmd.Length >= 3) | 324 | if (cmd.Length >= 3) |
325 | { | 325 | { |
326 | 326 | ||
327 | Dictionary<string, object> result = new Dictionary<string, object>(); | 327 | Dictionary<string, object> result = new Dictionary<string, object>(); |
328 | 328 | ||
329 | int ndx = Convert.ToInt16(cmd[2]); | 329 | int ndx = Convert.ToInt16(cmd[2]); |
@@ -355,5 +355,5 @@ namespace OpenSim.Server.Base | |||
355 | return; | 355 | return; |
356 | } | 356 | } |
357 | #endregion | 357 | #endregion |
358 | } | 358 | } |
359 | } \ No newline at end of file | 359 | } \ No newline at end of file |
diff --git a/OpenSim/Server/Base/HttpServerBase.cs b/OpenSim/Server/Base/HttpServerBase.cs index 44ef124..3357250 100644 --- a/OpenSim/Server/Base/HttpServerBase.cs +++ b/OpenSim/Server/Base/HttpServerBase.cs | |||
@@ -40,7 +40,7 @@ namespace OpenSim.Server.Base | |||
40 | { | 40 | { |
41 | public class HttpServerBase : ServicesServerBase | 41 | public class HttpServerBase : ServicesServerBase |
42 | { | 42 | { |
43 | // private static readonly ILog m_Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
44 | 44 | ||
45 | private uint m_consolePort; | 45 | private uint m_consolePort; |
46 | 46 | ||
@@ -70,6 +70,7 @@ namespace OpenSim.Server.Base | |||
70 | 70 | ||
71 | bool ssl_main = networkConfig.GetBoolean("https_main",false); | 71 | bool ssl_main = networkConfig.GetBoolean("https_main",false); |
72 | bool ssl_listener = networkConfig.GetBoolean("https_listener",false); | 72 | bool ssl_listener = networkConfig.GetBoolean("https_listener",false); |
73 | bool ssl_external = networkConfig.GetBoolean("https_external",false); | ||
73 | 74 | ||
74 | m_consolePort = (uint)networkConfig.GetInt("ConsolePort", 0); | 75 | m_consolePort = (uint)networkConfig.GetInt("ConsolePort", 0); |
75 | 76 | ||
@@ -111,25 +112,33 @@ namespace OpenSim.Server.Base | |||
111 | MainServer.Instance = httpServer; | 112 | MainServer.Instance = httpServer; |
112 | 113 | ||
113 | // If https_listener = true, then add an ssl listener on the https_port... | 114 | // If https_listener = true, then add an ssl listener on the https_port... |
114 | if (ssl_listener == true) | 115 | if (ssl_listener == true) |
115 | { | 116 | { |
116 | uint https_port = (uint)networkConfig.GetInt("https_port", 0); | 117 | uint https_port = (uint)networkConfig.GetInt("https_port", 0); |
117 | 118 | ||
118 | string cert_path = networkConfig.GetString("cert_path",String.Empty); | 119 | m_log.WarnFormat("[SSL]: External flag is {0}", ssl_external); |
119 | if (cert_path == String.Empty) | 120 | if (!ssl_external) |
120 | { | 121 | { |
121 | System.Console.WriteLine("ERROR: Path to X509 certificate is missing, server can't start."); | 122 | string cert_path = networkConfig.GetString("cert_path",String.Empty); |
122 | Environment.Exit(1); | 123 | if ( cert_path == String.Empty ) |
124 | { | ||
125 | System.Console.WriteLine("Path to X509 certificate is missing, server can't start."); | ||
126 | Thread.CurrentThread.Abort(); | ||
127 | } | ||
128 | string cert_pass = networkConfig.GetString("cert_pass",String.Empty); | ||
129 | if ( cert_pass == String.Empty ) | ||
130 | { | ||
131 | System.Console.WriteLine("Password for X509 certificate is missing, server can't start."); | ||
132 | Thread.CurrentThread.Abort(); | ||
133 | } | ||
134 | |||
135 | MainServer.AddHttpServer(new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass)); | ||
123 | } | 136 | } |
124 | 137 | else | |
125 | string cert_pass = networkConfig.GetString("cert_pass",String.Empty); | ||
126 | if (cert_pass == String.Empty) | ||
127 | { | 138 | { |
128 | System.Console.WriteLine("ERROR: Password for X509 certificate is missing, server can't start."); | 139 | m_log.WarnFormat("[SSL]: SSL port is active but no SSL is used because external SSL was requested."); |
129 | Environment.Exit(1); | 140 | MainServer.AddHttpServer(new BaseHttpServer(https_port)); |
130 | } | 141 | } |
131 | |||
132 | MainServer.AddHttpServer(new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass)); | ||
133 | } | 142 | } |
134 | } | 143 | } |
135 | 144 | ||
diff --git a/OpenSim/Server/Base/Properties/AssemblyInfo.cs b/OpenSim/Server/Base/Properties/AssemblyInfo.cs index 3c634a7..4be0f25 100644 --- a/OpenSim/Server/Base/Properties/AssemblyInfo.cs +++ b/OpenSim/Server/Base/Properties/AssemblyInfo.cs | |||
@@ -2,7 +2,7 @@ | |||
2 | using System.Runtime.CompilerServices; | 2 | using System.Runtime.CompilerServices; |
3 | using System.Runtime.InteropServices; | 3 | using System.Runtime.InteropServices; |
4 | 4 | ||
5 | // General Information about an assembly is controlled through the following | 5 | // General Information about an assembly is controlled through the following |
6 | // set of attributes. Change these attribute values to modify the information | 6 | // set of attributes. Change these attribute values to modify the information |
7 | // associated with an assembly. | 7 | // associated with an assembly. |
8 | [assembly: AssemblyTitle("OpenSim.Server.Base")] | 8 | [assembly: AssemblyTitle("OpenSim.Server.Base")] |
@@ -14,8 +14,8 @@ using System.Runtime.InteropServices; | |||
14 | [assembly: AssemblyTrademark("")] | 14 | [assembly: AssemblyTrademark("")] |
15 | [assembly: AssemblyCulture("")] | 15 | [assembly: AssemblyCulture("")] |
16 | 16 | ||
17 | // Setting ComVisible to false makes the types in this assembly not visible | 17 | // Setting ComVisible to false makes the types in this assembly not visible |
18 | // to COM components. If you need to access a type in this assembly from | 18 | // to COM components. If you need to access a type in this assembly from |
19 | // COM, set the ComVisible attribute to true on that type. | 19 | // COM, set the ComVisible attribute to true on that type. |
20 | [assembly: ComVisible(false)] | 20 | [assembly: ComVisible(false)] |
21 | 21 | ||
@@ -25,9 +25,9 @@ using System.Runtime.InteropServices; | |||
25 | // Version information for an assembly consists of the following four values: | 25 | // Version information for an assembly consists of the following four values: |
26 | // | 26 | // |
27 | // Major Version | 27 | // Major Version |
28 | // Minor Version | 28 | // Minor Version |
29 | // Build Number | 29 | // Build Number |
30 | // Revision | 30 | // Revision |
31 | // | 31 | // |
32 | [assembly: AssemblyVersion("0.8.3.*")] | 32 | [assembly: AssemblyVersion(OpenSim.VersionInfo.AssemblyVersionNumber)] |
33 | 33 | ||
diff --git a/OpenSim/Server/Base/ProtocolVersions.cs b/OpenSim/Server/Base/ProtocolVersions.cs index 5c2278c..27eed4c 100644 --- a/OpenSim/Server/Base/ProtocolVersions.cs +++ b/OpenSim/Server/Base/ProtocolVersions.cs | |||
@@ -31,20 +31,20 @@ namespace OpenSim.Server.Base | |||
31 | { | 31 | { |
32 | /// <value> | 32 | /// <value> |
33 | /// This is the external protocol versions. It is separate from the OpenSimulator project version. | 33 | /// This is the external protocol versions. It is separate from the OpenSimulator project version. |
34 | /// | 34 | /// |
35 | /// These version numbers should be increased by 1 every time a code | 35 | /// These version numbers should be increased by 1 every time a code |
36 | /// change in the Service.Connectors and Server.Handlers, espectively, | 36 | /// change in the Service.Connectors and Server.Handlers, espectively, |
37 | /// makes the previous OpenSimulator revision incompatible | 37 | /// makes the previous OpenSimulator revision incompatible |
38 | /// with the new revision. | 38 | /// with the new revision. |
39 | /// | 39 | /// |
40 | /// Changes which are compatible with an older revision (e.g. older revisions experience degraded functionality | 40 | /// Changes which are compatible with an older revision (e.g. older revisions experience degraded functionality |
41 | /// but not outright failure) do not need a version number increment. | 41 | /// but not outright failure) do not need a version number increment. |
42 | /// | 42 | /// |
43 | /// Having this version number allows the grid service to reject connections from regions running a version | 43 | /// Having this version number allows the grid service to reject connections from regions running a version |
44 | /// of the code that is too old. | 44 | /// of the code that is too old. |
45 | /// | 45 | /// |
46 | /// </value> | 46 | /// </value> |
47 | 47 | ||
48 | // The range of acceptable servers for client-side connectors | 48 | // The range of acceptable servers for client-side connectors |
49 | public readonly static int ClientProtocolVersionMin = 1; | 49 | public readonly static int ClientProtocolVersionMin = 1; |
50 | public readonly static int ClientProtocolVersionMax = 1; | 50 | public readonly static int ClientProtocolVersionMax = 1; |
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs index 18a4266..cc506bc 100644 --- a/OpenSim/Server/Base/ServerUtils.cs +++ b/OpenSim/Server/Base/ServerUtils.cs | |||
@@ -39,7 +39,7 @@ using OpenMetaverse; | |||
39 | using Mono.Addins; | 39 | using Mono.Addins; |
40 | using OpenSim.Framework.Servers.HttpServer; | 40 | using OpenSim.Framework.Servers.HttpServer; |
41 | using OpenSim.Framework.Servers; | 41 | using OpenSim.Framework.Servers; |
42 | 42 | using OpenMetaverse.StructuredData; // LitJson is hidden on this | |
43 | 43 | ||
44 | [assembly:AddinRoot("Robust", OpenSim.VersionInfo.VersionNumber)] | 44 | [assembly:AddinRoot("Robust", OpenSim.VersionInfo.VersionNumber)] |
45 | namespace OpenSim.Server.Base | 45 | namespace OpenSim.Server.Base |
@@ -104,7 +104,7 @@ namespace OpenSim.Server.Base | |||
104 | // libomv, which has a hard-coded path to "." for pinvoke | 104 | // libomv, which has a hard-coded path to "." for pinvoke |
105 | // to load the openjpeg dll | 105 | // to load the openjpeg dll |
106 | // | 106 | // |
107 | // Will look for a way to fix, but for now this keeps the | 107 | // Will look for a way to fix, but for now this keeps the |
108 | // confusion to a minimum. this was copied from our region | 108 | // confusion to a minimum. this was copied from our region |
109 | // plugin loader, we have been doing this in there for a long time. | 109 | // plugin loader, we have been doing this in there for a long time. |
110 | // | 110 | // |
@@ -183,7 +183,7 @@ namespace OpenSim.Server.Base | |||
183 | 183 | ||
184 | if(port != 0) | 184 | if(port != 0) |
185 | server = MainServer.GetHttpServer(port); | 185 | server = MainServer.GetHttpServer(port); |
186 | else | 186 | else |
187 | server = MainServer.Instance; | 187 | server = MainServer.Instance; |
188 | 188 | ||
189 | return server; | 189 | return server; |
@@ -222,19 +222,19 @@ namespace OpenSim.Server.Base | |||
222 | // This is good to debug configuration problems | 222 | // This is good to debug configuration problems |
223 | //if (dllName == string.Empty) | 223 | //if (dllName == string.Empty) |
224 | // Util.PrintCallStack(); | 224 | // Util.PrintCallStack(); |
225 | 225 | ||
226 | string className = String.Empty; | 226 | string className = String.Empty; |
227 | 227 | ||
228 | // The path for a dynamic plugin will contain ":" on Windows | 228 | // The path for a dynamic plugin will contain ":" on Windows |
229 | string[] parts = dllName.Split (new char[] {':'}); | 229 | string[] parts = dllName.Split (new char[] {':'}); |
230 | 230 | ||
231 | if (parts [0].Length > 1) | 231 | if (parts [0].Length > 1) |
232 | { | 232 | { |
233 | dllName = parts [0]; | 233 | dllName = parts [0]; |
234 | if (parts.Length > 1) | 234 | if (parts.Length > 1) |
235 | className = parts[1]; | 235 | className = parts[1]; |
236 | } | 236 | } |
237 | else | 237 | else |
238 | { | 238 | { |
239 | // This is Windows - we must replace the ":" in the path | 239 | // This is Windows - we must replace the ":" in the path |
240 | dllName = String.Format ("{0}:{1}", parts [0], parts [1]); | 240 | dllName = String.Format ("{0}:{1}", parts [0], parts [1]); |
@@ -242,6 +242,18 @@ namespace OpenSim.Server.Base | |||
242 | className = parts[2]; | 242 | className = parts[2]; |
243 | } | 243 | } |
244 | 244 | ||
245 | // Handle extra string arguments in a more generic way | ||
246 | if (dllName.Contains("@")) | ||
247 | { | ||
248 | string[] dllNameParts = dllName.Split(new char[] {'@'}); | ||
249 | dllName = dllNameParts[dllNameParts.Length - 1]; | ||
250 | List<Object> argList = new List<Object>(args); | ||
251 | for (int i = 0 ; i < dllNameParts.Length - 1 ; ++i) | ||
252 | argList.Add(dllNameParts[i]); | ||
253 | |||
254 | args = argList.ToArray(); | ||
255 | } | ||
256 | |||
245 | return LoadPlugin<T>(dllName, className, args); | 257 | return LoadPlugin<T>(dllName, className, args); |
246 | } | 258 | } |
247 | 259 | ||
@@ -264,10 +276,10 @@ namespace OpenSim.Server.Base | |||
264 | { | 276 | { |
265 | if (pluginType.IsPublic) | 277 | if (pluginType.IsPublic) |
266 | { | 278 | { |
267 | if (className != String.Empty | 279 | if (className != String.Empty |
268 | && pluginType.ToString() != pluginType.Namespace + "." + className) | 280 | && pluginType.ToString() != pluginType.Namespace + "." + className) |
269 | continue; | 281 | continue; |
270 | 282 | ||
271 | Type typeInterface = pluginType.GetInterface(interfaceName); | 283 | Type typeInterface = pluginType.GetInterface(interfaceName); |
272 | 284 | ||
273 | if (typeInterface != null) | 285 | if (typeInterface != null) |
@@ -283,8 +295,8 @@ namespace OpenSim.Server.Base | |||
283 | if (!(e is System.MissingMethodException)) | 295 | if (!(e is System.MissingMethodException)) |
284 | { | 296 | { |
285 | m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin {0} from {1}. Exception: {2}", | 297 | m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin {0} from {1}. Exception: {2}", |
286 | interfaceName, | 298 | interfaceName, |
287 | dllName, | 299 | dllName, |
288 | e.InnerException == null ? e.Message : e.InnerException.Message), | 300 | e.InnerException == null ? e.Message : e.InnerException.Message), |
289 | e); | 301 | e); |
290 | } | 302 | } |
@@ -315,49 +327,62 @@ namespace OpenSim.Server.Base | |||
315 | 327 | ||
316 | public static Dictionary<string, object> ParseQueryString(string query) | 328 | public static Dictionary<string, object> ParseQueryString(string query) |
317 | { | 329 | { |
318 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
319 | string[] terms = query.Split(new char[] {'&'}); | 330 | string[] terms = query.Split(new char[] {'&'}); |
320 | 331 | ||
321 | if (terms.Length == 0) | 332 | int nterms = terms.Length; |
322 | return result; | 333 | if (nterms == 0) |
334 | return new Dictionary<string, object>(); | ||
323 | 335 | ||
324 | foreach (string t in terms) | 336 | Dictionary<string, object> result = new Dictionary<string, object>(nterms); |
337 | string name; | ||
338 | |||
339 | for(int i = 0; i < nterms; ++i) | ||
325 | { | 340 | { |
326 | string[] elems = t.Split(new char[] {'='}); | 341 | string[] elems = terms[i].Split(new char[] {'='}); |
342 | |||
327 | if (elems.Length == 0) | 343 | if (elems.Length == 0) |
328 | continue; | 344 | continue; |
329 | 345 | ||
330 | string name = System.Web.HttpUtility.UrlDecode(elems[0]); | 346 | if(String.IsNullOrWhiteSpace(elems[0])) |
331 | string value = String.Empty; | 347 | continue; |
332 | 348 | ||
333 | if (elems.Length > 1) | 349 | name = System.Web.HttpUtility.UrlDecode(elems[0]); |
334 | value = System.Web.HttpUtility.UrlDecode(elems[1]); | ||
335 | 350 | ||
336 | if (name.EndsWith("[]")) | 351 | if (name.EndsWith("[]")) |
337 | { | 352 | { |
338 | string cleanName = name.Substring(0, name.Length - 2); | 353 | name = name.Substring(0, name.Length - 2); |
339 | if (result.ContainsKey(cleanName)) | 354 | if(String.IsNullOrWhiteSpace(name)) |
355 | continue; | ||
356 | if (result.ContainsKey(name)) | ||
340 | { | 357 | { |
341 | if (!(result[cleanName] is List<string>)) | 358 | if (!(result[name] is List<string>)) |
342 | continue; | 359 | continue; |
343 | 360 | ||
344 | List<string> l = (List<string>)result[cleanName]; | 361 | List<string> l = (List<string>)result[name]; |
345 | 362 | if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1])) | |
346 | l.Add(value); | 363 | l.Add(System.Web.HttpUtility.UrlDecode(elems[1])); |
364 | else | ||
365 | l.Add(String.Empty); | ||
347 | } | 366 | } |
348 | else | 367 | else |
349 | { | 368 | { |
350 | List<string> newList = new List<string>(); | 369 | List<string> newList = new List<string>(); |
351 | 370 | if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1])) | |
352 | newList.Add(value); | 371 | newList.Add(System.Web.HttpUtility.UrlDecode(elems[1])); |
353 | 372 | else | |
354 | result[cleanName] = newList; | 373 | newList.Add(String.Empty); |
374 | result[name] = newList; | ||
355 | } | 375 | } |
356 | } | 376 | } |
357 | else | 377 | else |
358 | { | 378 | { |
359 | if (!result.ContainsKey(name)) | 379 | if (!result.ContainsKey(name)) |
360 | result[name] = value; | 380 | { |
381 | if (elems.Length > 1 && !String.IsNullOrWhiteSpace(elems[1])) | ||
382 | result[name] = System.Web.HttpUtility.UrlDecode(elems[1]); | ||
383 | else | ||
384 | result[name] = String.Empty; | ||
385 | } | ||
361 | } | 386 | } |
362 | } | 387 | } |
363 | 388 | ||
@@ -366,47 +391,70 @@ namespace OpenSim.Server.Base | |||
366 | 391 | ||
367 | public static string BuildQueryString(Dictionary<string, object> data) | 392 | public static string BuildQueryString(Dictionary<string, object> data) |
368 | { | 393 | { |
369 | string qstring = String.Empty; | 394 | // this is not conform to html url encoding |
395 | // can only be used on Body of POST or PUT | ||
396 | StringBuilder sb = new StringBuilder(4096); | ||
370 | 397 | ||
371 | string part; | 398 | string pvalue; |
372 | 399 | ||
373 | foreach (KeyValuePair<string, object> kvp in data) | 400 | foreach (KeyValuePair<string, object> kvp in data) |
374 | { | 401 | { |
375 | if (kvp.Value is List<string>) | 402 | if (kvp.Value is List<string>) |
376 | { | 403 | { |
377 | List<string> l = (List<String>)kvp.Value; | 404 | List<string> l = (List<String>)kvp.Value; |
378 | 405 | int llen = l.Count; | |
379 | foreach (string s in l) | 406 | string nkey = System.Web.HttpUtility.UrlEncode(kvp.Key); |
407 | for(int i = 0; i < llen; ++i) | ||
380 | { | 408 | { |
381 | part = System.Web.HttpUtility.UrlEncode(kvp.Key) + | 409 | if (sb.Length != 0) |
382 | "[]=" + System.Web.HttpUtility.UrlEncode(s); | 410 | sb.Append("&"); |
383 | 411 | sb.Append(nkey); | |
384 | if (qstring != String.Empty) | 412 | sb.Append("[]="); |
385 | qstring += "&"; | 413 | sb.Append(System.Web.HttpUtility.UrlEncode(l[i])); |
386 | |||
387 | qstring += part; | ||
388 | } | 414 | } |
389 | } | 415 | } |
390 | else | 416 | else if(kvp.Value is Dictionary<string, object>) |
391 | { | 417 | { |
392 | if (kvp.Value.ToString() != String.Empty) | 418 | // encode complex structures as JSON |
419 | // needed for estate bans with the encoding used on xml | ||
420 | // encode can be here because object does contain the structure information | ||
421 | // but decode needs to be on estateSettings (or other user) | ||
422 | string js; | ||
423 | try | ||
393 | { | 424 | { |
394 | part = System.Web.HttpUtility.UrlEncode(kvp.Key) + | 425 | // bypass libovm, we dont need even more useless high level maps |
395 | "=" + System.Web.HttpUtility.UrlEncode(kvp.Value.ToString()); | 426 | // this should only be called once.. but no problem, i hope |
427 | // (other uses may need more..) | ||
428 | LitJson.JsonMapper.RegisterExporter<UUID>((uuid, writer) => writer.Write(uuid.ToString()) ); | ||
429 | js = LitJson.JsonMapper.ToJson(kvp.Value); | ||
396 | } | 430 | } |
397 | else | 431 | // catch(Exception e) |
432 | catch | ||
398 | { | 433 | { |
399 | part = System.Web.HttpUtility.UrlEncode(kvp.Key); | 434 | continue; |
435 | } | ||
436 | if (sb.Length != 0) | ||
437 | sb.Append("&"); | ||
438 | sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Key)); | ||
439 | sb.Append("="); | ||
440 | sb.Append(System.Web.HttpUtility.UrlEncode(js)); | ||
441 | } | ||
442 | else | ||
443 | { | ||
444 | if (sb.Length != 0) | ||
445 | sb.Append("&"); | ||
446 | sb.Append(System.Web.HttpUtility.UrlEncode(kvp.Key)); | ||
447 | |||
448 | pvalue = kvp.Value.ToString(); | ||
449 | if (!String.IsNullOrEmpty(pvalue)) | ||
450 | { | ||
451 | sb.Append("="); | ||
452 | sb.Append(System.Web.HttpUtility.UrlEncode(pvalue)); | ||
400 | } | 453 | } |
401 | |||
402 | if (qstring != String.Empty) | ||
403 | qstring += "&"; | ||
404 | |||
405 | qstring += part; | ||
406 | } | 454 | } |
407 | } | 455 | } |
408 | 456 | ||
409 | return qstring; | 457 | return sb.ToString(); |
410 | } | 458 | } |
411 | 459 | ||
412 | public static string BuildXmlResponse(Dictionary<string, object> data) | 460 | public static string BuildXmlResponse(Dictionary<string, object> data) |
@@ -465,18 +513,23 @@ namespace OpenSim.Server.Base | |||
465 | Dictionary<string, object> ret = new Dictionary<string, object>(); | 513 | Dictionary<string, object> ret = new Dictionary<string, object>(); |
466 | 514 | ||
467 | XmlDocument doc = new XmlDocument(); | 515 | XmlDocument doc = new XmlDocument(); |
516 | doc.XmlResolver = null; | ||
517 | try | ||
518 | { | ||
519 | doc.LoadXml(data); | ||
520 | XmlNodeList rootL = doc.GetElementsByTagName("ServerResponse"); | ||
468 | 521 | ||
469 | doc.LoadXml(data); | 522 | if (rootL.Count != 1) |
470 | 523 | return ret; | |
471 | XmlNodeList rootL = doc.GetElementsByTagName("ServerResponse"); | ||
472 | |||
473 | if (rootL.Count != 1) | ||
474 | return ret; | ||
475 | |||
476 | XmlNode rootNode = rootL[0]; | ||
477 | 524 | ||
478 | ret = ParseElement(rootNode); | 525 | XmlNode rootNode = rootL[0]; |
479 | 526 | ||
527 | ret = ParseElement(rootNode); | ||
528 | } | ||
529 | catch (Exception e) | ||
530 | { | ||
531 | m_log.DebugFormat("[serverUtils.ParseXmlResponse]: failed error: {0} \n --- string: {1} - ",e.Message, data); | ||
532 | } | ||
480 | return ret; | 533 | return ret; |
481 | } | 534 | } |
482 | 535 | ||
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs index 076868d..472998a 100644 --- a/OpenSim/Server/Base/ServicesServerBase.cs +++ b/OpenSim/Server/Base/ServicesServerBase.cs | |||
@@ -55,16 +55,16 @@ namespace OpenSim.Server.Base | |||
55 | // | 55 | // |
56 | protected string[] m_Arguments; | 56 | protected string[] m_Arguments; |
57 | 57 | ||
58 | public string ConfigDirectory | 58 | protected string m_configDirectory = "."; |
59 | { | ||
60 | get; | ||
61 | private set; | ||
62 | } | ||
63 | 59 | ||
64 | // Run flag | 60 | // Run flag |
65 | // | 61 | // |
66 | private bool m_Running = true; | 62 | private bool m_Running = true; |
67 | 63 | ||
64 | #if (_MONO) | ||
65 | private static Mono.Unix.UnixSignal[] signals; | ||
66 | #endif | ||
67 | |||
68 | // Handle all the automagical stuff | 68 | // Handle all the automagical stuff |
69 | // | 69 | // |
70 | public ServicesServerBase(string prompt, string[] args) : base() | 70 | public ServicesServerBase(string prompt, string[] args) : base() |
@@ -85,7 +85,7 @@ namespace OpenSim.Server.Base | |||
85 | string fileName = ""; | 85 | string fileName = ""; |
86 | if (Assembly.GetEntryAssembly() != null) | 86 | if (Assembly.GetEntryAssembly() != null) |
87 | fileName = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location); | 87 | fileName = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location); |
88 | string iniFile = "../config/" + fileName + ".ini"; | 88 | string iniFile = Path.Combine(Util.configDir(), fileName + ".ini"); |
89 | string logConfig = null; | 89 | string logConfig = null; |
90 | 90 | ||
91 | IConfig startupConfig = argvConfig.Configs["Startup"]; | 91 | IConfig startupConfig = argvConfig.Configs["Startup"]; |
@@ -96,39 +96,31 @@ namespace OpenSim.Server.Base | |||
96 | 96 | ||
97 | // Check if a prompt was given on the command line | 97 | // Check if a prompt was given on the command line |
98 | prompt = startupConfig.GetString("prompt", prompt); | 98 | prompt = startupConfig.GetString("prompt", prompt); |
99 | 99 | ||
100 | // Check for a Log4Net config file on the command line | 100 | // Check for a Log4Net config file on the command line |
101 | logConfig =startupConfig.GetString("logconfig", logConfig); | 101 | logConfig =startupConfig.GetString("logconfig", logConfig); |
102 | } | 102 | } |
103 | 103 | ||
104 | // Find out of the file name is a URI and remote load it if possible. | 104 | Config = ReadConfigSource(iniFile); |
105 | // Load it as a local file otherwise. | ||
106 | Uri configUri; | ||
107 | 105 | ||
108 | try | 106 | List<string> sources = new List<string>(); |
107 | sources.Add(iniFile); | ||
108 | |||
109 | int sourceIndex = 1; | ||
110 | |||
111 | while (AddIncludes(Config, sources)) | ||
109 | { | 112 | { |
110 | if (Uri.TryCreate(iniFile, UriKind.Absolute, out configUri) && | 113 | for ( ; sourceIndex < sources.Count ; ++sourceIndex) |
111 | configUri.Scheme == Uri.UriSchemeHttp) | ||
112 | { | 114 | { |
113 | XmlReader r = XmlReader.Create(iniFile); | 115 | IConfigSource s = ReadConfigSource(sources[sourceIndex]); |
114 | Config = new XmlConfigSource(r); | 116 | Config.Merge(s); |
115 | } | 117 | } |
116 | else | ||
117 | { | ||
118 | Config = new IniConfigSource(iniFile); | ||
119 | } | ||
120 | } | ||
121 | catch (Exception e) | ||
122 | { | ||
123 | System.Console.WriteLine("Error reading from config source. {0}", e.Message); | ||
124 | System.Diagnostics.Process.GetCurrentProcess().Kill(); | ||
125 | ///// Environment.Exit(1); | ||
126 | } | 118 | } |
127 | 119 | ||
128 | // Merge OpSys env vars | 120 | // Merge OpSys env vars |
129 | m_log.Info("[CONFIG]: Loading environment variables for Config"); | 121 | Console.WriteLine("[CONFIG]: Loading environment variables for Config"); |
130 | Util.MergeEnvironmentToConfig(Config); | 122 | Util.MergeEnvironmentToConfig(Config); |
131 | 123 | ||
132 | // Merge the configuration from the command line into the loaded file | 124 | // Merge the configuration from the command line into the loaded file |
133 | Config.Merge(argvConfig); | 125 | Config.Merge(argvConfig); |
134 | 126 | ||
@@ -140,10 +132,12 @@ namespace OpenSim.Server.Base | |||
140 | startupConfig = Config.Configs["Startup"]; | 132 | startupConfig = Config.Configs["Startup"]; |
141 | } | 133 | } |
142 | 134 | ||
143 | ConfigDirectory = startupConfig.GetString("ConfigDirectory", "."); | 135 | if (startupConfig != null) |
144 | 136 | { | |
145 | prompt = startupConfig.GetString("Prompt", prompt); | 137 | m_configDirectory = startupConfig.GetString("ConfigDirectory", m_configDirectory); |
146 | 138 | ||
139 | prompt = startupConfig.GetString("Prompt", prompt); | ||
140 | } | ||
147 | // Allow derived classes to load config before the console is opened. | 141 | // Allow derived classes to load config before the console is opened. |
148 | ReadConfig(); | 142 | ReadConfig(); |
149 | 143 | ||
@@ -193,6 +187,42 @@ namespace OpenSim.Server.Base | |||
193 | RegisterCommonCommands(); | 187 | RegisterCommonCommands(); |
194 | RegisterCommonComponents(Config); | 188 | RegisterCommonComponents(Config); |
195 | 189 | ||
190 | #if (_MONO) | ||
191 | Thread signal_thread = new Thread (delegate () | ||
192 | { | ||
193 | while (true) | ||
194 | { | ||
195 | // Wait for a signal to be delivered | ||
196 | int index = Mono.Unix.UnixSignal.WaitAny (signals, -1); | ||
197 | |||
198 | //Mono.Unix.Native.Signum signal = signals [index].Signum; | ||
199 | ShutdownSpecific(); | ||
200 | m_Running = false; | ||
201 | Environment.Exit(0); | ||
202 | } | ||
203 | }); | ||
204 | |||
205 | if(!Util.IsWindows()) | ||
206 | { | ||
207 | try | ||
208 | { | ||
209 | // linux mac os specifics | ||
210 | signals = new Mono.Unix.UnixSignal[] | ||
211 | { | ||
212 | new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) | ||
213 | }; | ||
214 | ignal_thread.IsBackground = true; | ||
215 | signal_thread.Start(); | ||
216 | } | ||
217 | catch (Exception e) | ||
218 | { | ||
219 | m_log.Info("Could not set up UNIX signal handlers. SIGTERM will not"); | ||
220 | m_log.InfoFormat("shut down gracefully: {0}", e.Message); | ||
221 | m_log.Debug("Exception was: ", e); | ||
222 | } | ||
223 | } | ||
224 | #endif | ||
225 | |||
196 | // Allow derived classes to perform initialization that | 226 | // Allow derived classes to perform initialization that |
197 | // needs to be done after the console has opened | 227 | // needs to be done after the console has opened |
198 | Initialise(); | 228 | Initialise(); |
@@ -220,6 +250,9 @@ namespace OpenSim.Server.Base | |||
220 | } | 250 | } |
221 | } | 251 | } |
222 | 252 | ||
253 | MemoryWatchdog.Enabled = false; | ||
254 | Watchdog.Enabled = false; | ||
255 | WorkManager.Stop(); | ||
223 | RemovePIDFile(); | 256 | RemovePIDFile(); |
224 | 257 | ||
225 | return 0; | 258 | return 0; |
@@ -240,5 +273,114 @@ namespace OpenSim.Server.Base | |||
240 | protected virtual void Initialise() | 273 | protected virtual void Initialise() |
241 | { | 274 | { |
242 | } | 275 | } |
276 | |||
277 | /// <summary> | ||
278 | /// Adds the included files as ini configuration files | ||
279 | /// </summary> | ||
280 | /// <param name="sources">List of URL strings or filename strings</param> | ||
281 | private bool AddIncludes(IConfigSource configSource, List<string> sources) | ||
282 | { | ||
283 | bool sourcesAdded = false; | ||
284 | |||
285 | //loop over config sources | ||
286 | foreach (IConfig config in configSource.Configs) | ||
287 | { | ||
288 | // Look for Include-* in the key name | ||
289 | string[] keys = config.GetKeys(); | ||
290 | foreach (string k in keys) | ||
291 | { | ||
292 | if (k.StartsWith("Include-")) | ||
293 | { | ||
294 | // read the config file to be included. | ||
295 | string file = config.GetString(k); | ||
296 | if (IsUri(file)) | ||
297 | { | ||
298 | if (!sources.Contains(file)) | ||
299 | { | ||
300 | sourcesAdded = true; | ||
301 | sources.Add(file); | ||
302 | } | ||
303 | } | ||
304 | else | ||
305 | { | ||
306 | string basepath = Path.GetFullPath(m_configDirectory); | ||
307 | // Resolve relative paths with wildcards | ||
308 | string chunkWithoutWildcards = file; | ||
309 | string chunkWithWildcards = string.Empty; | ||
310 | int wildcardIndex = file.IndexOfAny(new char[] { '*', '?' }); | ||
311 | if (wildcardIndex != -1) | ||
312 | { | ||
313 | chunkWithoutWildcards = file.Substring(0, wildcardIndex); | ||
314 | chunkWithWildcards = file.Substring(wildcardIndex); | ||
315 | } | ||
316 | string path = Path.Combine(basepath, chunkWithoutWildcards); | ||
317 | path = Path.GetFullPath(path) + chunkWithWildcards; | ||
318 | string[] paths = Util.Glob(path); | ||
319 | |||
320 | // If the include path contains no wildcards, then warn the user that it wasn't found. | ||
321 | if (wildcardIndex == -1 && paths.Length == 0) | ||
322 | { | ||
323 | Console.WriteLine("[CONFIG]: Could not find include file {0}", path); | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | foreach (string p in paths) | ||
328 | { | ||
329 | if (!sources.Contains(p)) | ||
330 | { | ||
331 | sourcesAdded = true; | ||
332 | sources.Add(p); | ||
333 | } | ||
334 | } | ||
335 | } | ||
336 | } | ||
337 | } | ||
338 | } | ||
339 | } | ||
340 | |||
341 | return sourcesAdded; | ||
342 | } | ||
343 | |||
344 | /// <summary> | ||
345 | /// Check if we can convert the string to a URI | ||
346 | /// </summary> | ||
347 | /// <param name="file">String uri to the remote resource</param> | ||
348 | /// <returns>true if we can convert the string to a Uri object</returns> | ||
349 | bool IsUri(string file) | ||
350 | { | ||
351 | Uri configUri; | ||
352 | |||
353 | return Uri.TryCreate(file, UriKind.Absolute, | ||
354 | out configUri) && configUri.Scheme == Uri.UriSchemeHttp; | ||
355 | } | ||
356 | |||
357 | IConfigSource ReadConfigSource(string iniFile) | ||
358 | { | ||
359 | // Find out of the file name is a URI and remote load it if possible. | ||
360 | // Load it as a local file otherwise. | ||
361 | Uri configUri; | ||
362 | IConfigSource s = null; | ||
363 | |||
364 | try | ||
365 | { | ||
366 | if (Uri.TryCreate(iniFile, UriKind.Absolute, out configUri) && | ||
367 | configUri.Scheme == Uri.UriSchemeHttp) | ||
368 | { | ||
369 | XmlReader r = XmlReader.Create(iniFile); | ||
370 | s = new XmlConfigSource(r); | ||
371 | } | ||
372 | else | ||
373 | { | ||
374 | s = new IniConfigSource(iniFile); | ||
375 | } | ||
376 | } | ||
377 | catch (Exception e) | ||
378 | { | ||
379 | System.Console.WriteLine("Error reading from config source. {0}", e.Message); | ||
380 | Environment.Exit(1); | ||
381 | } | ||
382 | |||
383 | return s; | ||
384 | } | ||
243 | } | 385 | } |
244 | } | 386 | } |
diff --git a/OpenSim/Server/Handlers/AgentPreferences/AgentPreferencesServerPostHandler.cs b/OpenSim/Server/Handlers/AgentPreferences/AgentPreferencesServerPostHandler.cs index 713b755..b1b3c6f 100644 --- a/OpenSim/Server/Handlers/AgentPreferences/AgentPreferencesServerPostHandler.cs +++ b/OpenSim/Server/Handlers/AgentPreferences/AgentPreferencesServerPostHandler.cs | |||
@@ -106,7 +106,8 @@ namespace OpenSim.Server.Handlers.AgentPreferences | |||
106 | return FailureResult(); | 106 | return FailureResult(); |
107 | AgentPrefs prefs = m_AgentPreferencesService.GetAgentPreferences(userID); | 107 | AgentPrefs prefs = m_AgentPreferencesService.GetAgentPreferences(userID); |
108 | Dictionary<string, object> result = new Dictionary<string, object>(); | 108 | Dictionary<string, object> result = new Dictionary<string, object>(); |
109 | result = prefs.ToKeyValuePairs(); | 109 | if (prefs != null) |
110 | result = prefs.ToKeyValuePairs(); | ||
110 | 111 | ||
111 | string xmlString = ServerUtils.BuildXmlResponse(result); | 112 | string xmlString = ServerUtils.BuildXmlResponse(result); |
112 | 113 | ||
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs index ab81dd6..bad3ea2 100644 --- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs +++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs | |||
@@ -151,27 +151,27 @@ namespace OpenSim.Server.Handlers.Asset | |||
151 | MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId); | 151 | MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId); |
152 | return; | 152 | return; |
153 | } | 153 | } |
154 | 154 | ||
155 | AssetBase asset = m_AssetService.Get(assetId.ToString()); | 155 | AssetBase asset = m_AssetService.Get(assetId.ToString()); |
156 | if (asset == null) | 156 | if (asset == null) |
157 | { | 157 | { |
158 | MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId); | 158 | MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId); |
159 | return; | 159 | return; |
160 | } | 160 | } |
161 | 161 | ||
162 | string fileName = rawAssetId; | 162 | string fileName = rawAssetId; |
163 | 163 | ||
164 | if (!ConsoleUtil.CheckFileDoesNotExist(MainConsole.Instance, fileName)) | 164 | if (!ConsoleUtil.CheckFileDoesNotExist(MainConsole.Instance, fileName)) |
165 | return; | 165 | return; |
166 | 166 | ||
167 | using (FileStream fs = new FileStream(fileName, FileMode.CreateNew)) | 167 | using (FileStream fs = new FileStream(fileName, FileMode.CreateNew)) |
168 | { | 168 | { |
169 | using (BinaryWriter bw = new BinaryWriter(fs)) | 169 | using (BinaryWriter bw = new BinaryWriter(fs)) |
170 | { | 170 | { |
171 | bw.Write(asset.Data); | 171 | bw.Write(asset.Data); |
172 | } | 172 | } |
173 | } | 173 | } |
174 | 174 | ||
175 | MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName); | 175 | MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName); |
176 | } | 176 | } |
177 | 177 | ||
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs b/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs index 91c5c54..8bfc690 100644 --- a/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs +++ b/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs | |||
@@ -53,7 +53,7 @@ namespace OpenSim.Server.Handlers.Asset | |||
53 | public AssetServerGetHandler(IAssetService service) : | 53 | public AssetServerGetHandler(IAssetService service) : |
54 | base("GET", "/assets") | 54 | base("GET", "/assets") |
55 | { | 55 | { |
56 | m_AssetService = service; | 56 | m_AssetService = service; |
57 | } | 57 | } |
58 | 58 | ||
59 | public AssetServerGetHandler(IAssetService service, IServiceAuth auth, string redirectURL) : | 59 | public AssetServerGetHandler(IAssetService service, IServiceAuth auth, string redirectURL) : |
@@ -155,7 +155,7 @@ namespace OpenSim.Server.Handlers.Asset | |||
155 | httpResponse.ContentType = "text/plain"; | 155 | httpResponse.ContentType = "text/plain"; |
156 | result = new byte[0]; | 156 | result = new byte[0]; |
157 | } | 157 | } |
158 | 158 | ||
159 | if (httpResponse.StatusCode == (int)HttpStatusCode.NotFound && !string.IsNullOrEmpty(m_RedirectURL) && !string.IsNullOrEmpty(id)) | 159 | if (httpResponse.StatusCode == (int)HttpStatusCode.NotFound && !string.IsNullOrEmpty(m_RedirectURL) && !string.IsNullOrEmpty(id)) |
160 | { | 160 | { |
161 | httpResponse.StatusCode = (int)HttpStatusCode.Redirect; | 161 | httpResponse.StatusCode = (int)HttpStatusCode.Redirect; |
diff --git a/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs index faa6fb7..4d2228a 100644 --- a/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs +++ b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs | |||
@@ -52,8 +52,8 @@ namespace OpenSim.Server.Handlers.Asset.Test | |||
52 | 52 | ||
53 | UUID assetId = TestHelpers.ParseTail(0x1); | 53 | UUID assetId = TestHelpers.ParseTail(0x1); |
54 | 54 | ||
55 | IConfigSource config = new IniConfigSource(); | 55 | IConfigSource config = new IniConfigSource(); |
56 | config.AddConfig("AssetService"); | 56 | config.AddConfig("AssetService"); |
57 | config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); | 57 | config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); |
58 | 58 | ||
59 | AssetService assetService = new AssetService(config); | 59 | AssetService assetService = new AssetService(config); |
@@ -72,7 +72,7 @@ namespace OpenSim.Server.Handlers.Asset.Test | |||
72 | XmlSerializer serializer = new XmlSerializer(typeof(AssetBase)); | 72 | XmlSerializer serializer = new XmlSerializer(typeof(AssetBase)); |
73 | serializer.Serialize(writer, asset); | 73 | serializer.Serialize(writer, asset); |
74 | writer.Flush(); | 74 | writer.Flush(); |
75 | } | 75 | } |
76 | 76 | ||
77 | buffer.Position = 0; | 77 | buffer.Position = 0; |
78 | asph.Handle(null, buffer, null, null); | 78 | asph.Handle(null, buffer, null, null); |
@@ -87,13 +87,13 @@ namespace OpenSim.Server.Handlers.Asset.Test | |||
87 | { | 87 | { |
88 | TestHelpers.InMethod(); | 88 | TestHelpers.InMethod(); |
89 | 89 | ||
90 | IConfigSource config = new IniConfigSource(); | 90 | IConfigSource config = new IniConfigSource(); |
91 | config.AddConfig("AssetService"); | 91 | config.AddConfig("AssetService"); |
92 | config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); | 92 | config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); |
93 | 93 | ||
94 | AssetService assetService = new AssetService(config); | 94 | AssetService assetService = new AssetService(config); |
95 | 95 | ||
96 | AssetServerPostHandler asph = new AssetServerPostHandler(assetService); | 96 | AssetServerPostHandler asph = new AssetServerPostHandler(assetService); |
97 | 97 | ||
98 | MemoryStream buffer = new MemoryStream(); | 98 | MemoryStream buffer = new MemoryStream(); |
99 | byte[] badData = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f }; | 99 | byte[] badData = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f }; |
diff --git a/OpenSim/Server/Handlers/Authentication/AuthenticationServerPostHandler.cs b/OpenSim/Server/Handlers/Authentication/AuthenticationServerPostHandler.cs index 6ee98b3..4f03cf4 100644 --- a/OpenSim/Server/Handlers/Authentication/AuthenticationServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Authentication/AuthenticationServerPostHandler.cs | |||
@@ -82,11 +82,11 @@ namespace OpenSim.Server.Handlers.Authentication | |||
82 | switch (p[0]) | 82 | switch (p[0]) |
83 | { | 83 | { |
84 | case "plain": | 84 | case "plain": |
85 | StreamReader sr = new StreamReader(request); | 85 | string body; |
86 | string body = sr.ReadToEnd(); | 86 | using(StreamReader sr = new StreamReader(request)) |
87 | sr.Close(); | 87 | body = sr.ReadToEnd(); |
88 | |||
89 | return DoPlainMethods(body); | 88 | return DoPlainMethods(body); |
89 | |||
90 | case "crypt": | 90 | case "crypt": |
91 | byte[] buffer = new byte[request.Length]; | 91 | byte[] buffer = new byte[request.Length]; |
92 | long length = request.Length; | 92 | long length = request.Length; |
@@ -132,41 +132,41 @@ namespace OpenSim.Server.Handlers.Authentication | |||
132 | case "authenticate": | 132 | case "authenticate": |
133 | if (!request.ContainsKey("PASSWORD")) | 133 | if (!request.ContainsKey("PASSWORD")) |
134 | return FailureResult(); | 134 | return FailureResult(); |
135 | 135 | ||
136 | token = m_AuthenticationService.Authenticate(principalID, request["PASSWORD"].ToString(), lifetime); | 136 | token = m_AuthenticationService.Authenticate(principalID, request["PASSWORD"].ToString(), lifetime); |
137 | 137 | ||
138 | if (token != String.Empty) | 138 | if (token != String.Empty) |
139 | return SuccessResult(token); | 139 | return SuccessResult(token); |
140 | return FailureResult(); | 140 | return FailureResult(); |
141 | 141 | ||
142 | case "setpassword": | 142 | case "setpassword": |
143 | if (!m_AllowSetPassword) | 143 | if (!m_AllowSetPassword) |
144 | return FailureResult(); | 144 | return FailureResult(); |
145 | 145 | ||
146 | if (!request.ContainsKey("PASSWORD")) | 146 | if (!request.ContainsKey("PASSWORD")) |
147 | return FailureResult(); | 147 | return FailureResult(); |
148 | 148 | ||
149 | if (m_AuthenticationService.SetPassword(principalID, request["PASSWORD"].ToString())) | 149 | if (m_AuthenticationService.SetPassword(principalID, request["PASSWORD"].ToString())) |
150 | return SuccessResult(); | 150 | return SuccessResult(); |
151 | else | 151 | else |
152 | return FailureResult(); | 152 | return FailureResult(); |
153 | 153 | ||
154 | case "verify": | 154 | case "verify": |
155 | if (!request.ContainsKey("TOKEN")) | 155 | if (!request.ContainsKey("TOKEN")) |
156 | return FailureResult(); | 156 | return FailureResult(); |
157 | 157 | ||
158 | if (m_AuthenticationService.Verify(principalID, request["TOKEN"].ToString(), lifetime)) | 158 | if (m_AuthenticationService.Verify(principalID, request["TOKEN"].ToString(), lifetime)) |
159 | return SuccessResult(); | 159 | return SuccessResult(); |
160 | 160 | ||
161 | return FailureResult(); | 161 | return FailureResult(); |
162 | 162 | ||
163 | case "release": | 163 | case "release": |
164 | if (!request.ContainsKey("TOKEN")) | 164 | if (!request.ContainsKey("TOKEN")) |
165 | return FailureResult(); | 165 | return FailureResult(); |
166 | 166 | ||
167 | if (m_AuthenticationService.Release(principalID, request["TOKEN"].ToString())) | 167 | if (m_AuthenticationService.Release(principalID, request["TOKEN"].ToString())) |
168 | return SuccessResult(); | 168 | return SuccessResult(); |
169 | 169 | ||
170 | return FailureResult(); | 170 | return FailureResult(); |
171 | 171 | ||
172 | case "getauthinfo": | 172 | case "getauthinfo": |
diff --git a/OpenSim/Server/Handlers/Authentication/OpenIdServerConnector.cs b/OpenSim/Server/Handlers/Authentication/OpenIdServerConnector.cs index 6464399..ac8ff52 100644 --- a/OpenSim/Server/Handlers/Authentication/OpenIdServerConnector.cs +++ b/OpenSim/Server/Handlers/Authentication/OpenIdServerConnector.cs | |||
@@ -41,7 +41,7 @@ namespace OpenSim.Server.Handlers.Authentication | |||
41 | private static readonly ILog m_log = | 41 | private static readonly ILog m_log = |
42 | LogManager.GetLogger( | 42 | LogManager.GetLogger( |
43 | MethodBase.GetCurrentMethod().DeclaringType); | 43 | MethodBase.GetCurrentMethod().DeclaringType); |
44 | 44 | ||
45 | private IAuthenticationService m_AuthenticationService; | 45 | private IAuthenticationService m_AuthenticationService; |
46 | private IUserAccountService m_UserAccountService; | 46 | private IUserAccountService m_UserAccountService; |
47 | private string m_ConfigName = "OpenIdService"; | 47 | private string m_ConfigName = "OpenIdService"; |
diff --git a/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs b/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs index b201dc7..254b82f 100644 --- a/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs +++ b/OpenSim/Server/Handlers/Authentication/OpenIdServerHandler.cs | |||
@@ -178,14 +178,14 @@ namespace OpenSim.Server.Handlers.Authentication | |||
178 | "; | 178 | "; |
179 | 179 | ||
180 | /// <summary>Page shown for an invalid OpenID identity</summary> | 180 | /// <summary>Page shown for an invalid OpenID identity</summary> |
181 | const string INVALID_OPENID_PAGE = | 181 | const string INVALID_OPENID_PAGE = |
182 | @"<html><head><title>Identity not found</title></head> | 182 | @"<html><head><title>Identity not found</title></head> |
183 | <body>Invalid OpenID identity</body></html>"; | 183 | <body>Invalid OpenID identity</body></html>"; |
184 | 184 | ||
185 | /// <summary>Page shown if the OpenID endpoint is requested directly</summary> | 185 | /// <summary>Page shown if the OpenID endpoint is requested directly</summary> |
186 | const string ENDPOINT_PAGE = | 186 | const string ENDPOINT_PAGE = |
187 | @"<html><head><title>OpenID Endpoint</title></head><body> | 187 | @"<html><head><title>OpenID Endpoint</title></head><body> |
188 | This is an OpenID server endpoint, not a human-readable resource. | 188 | This is an OpenID server endpoint, not a human-readable resource. |
189 | For more information, see <a href='http://openid.net/'>http://openid.net/</a>. | 189 | For more information, see <a href='http://openid.net/'>http://openid.net/</a>. |
190 | </body></html>"; | 190 | </body></html>"; |
191 | 191 | ||
@@ -222,7 +222,10 @@ For more information, see <a href='http://openid.net/'>http://openid.net/</a>. | |||
222 | 222 | ||
223 | try | 223 | try |
224 | { | 224 | { |
225 | NameValueCollection postQuery = HttpUtility.ParseQueryString(new StreamReader(httpRequest.InputStream).ReadToEnd()); | 225 | string forPost; |
226 | using(StreamReader sr = new StreamReader(httpRequest.InputStream)) | ||
227 | forPost = sr.ReadToEnd(); | ||
228 | NameValueCollection postQuery = HttpUtility.ParseQueryString(forPost); | ||
226 | NameValueCollection getQuery = HttpUtility.ParseQueryString(httpRequest.Url.Query); | 229 | NameValueCollection getQuery = HttpUtility.ParseQueryString(httpRequest.Url.Query); |
227 | NameValueCollection openIdQuery = (postQuery.GetValues("openid.mode") != null ? postQuery : getQuery); | 230 | NameValueCollection openIdQuery = (postQuery.GetValues("openid.mode") != null ? postQuery : getQuery); |
228 | 231 | ||
@@ -241,7 +244,7 @@ For more information, see <a href='http://openid.net/'>http://openid.net/</a>. | |||
241 | // Check for form POST data | 244 | // Check for form POST data |
242 | if (passwordValues != null && passwordValues.Length == 1) | 245 | if (passwordValues != null && passwordValues.Length == 1) |
243 | { | 246 | { |
244 | if (account != null && | 247 | if (account != null && |
245 | (m_authenticationService.Authenticate(account.PrincipalID,Util.Md5Hash(passwordValues[0]), 30) != string.Empty)) | 248 | (m_authenticationService.Authenticate(account.PrincipalID,Util.Md5Hash(passwordValues[0]), 30) != string.Empty)) |
246 | authRequest.IsAuthenticated = true; | 249 | authRequest.IsAuthenticated = true; |
247 | else | 250 | else |
diff --git a/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs index c9b4e9b..07e09bc 100644 --- a/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs | |||
@@ -61,13 +61,14 @@ namespace OpenSim.Server.Handlers.Authorization | |||
61 | AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request); | 61 | AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request); |
62 | 62 | ||
63 | string message = String.Empty; | 63 | string message = String.Empty; |
64 | bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.FirstName, Authorization.SurName, Authorization.RegionID, out message); | 64 | bool isLocal = false; |
65 | bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.FirstName, Authorization.SurName, Authorization.RegionID, out message, out isLocal); | ||
65 | 66 | ||
66 | AuthorizationResponse result = new AuthorizationResponse(authorized, Authorization.ID + " has been authorized"); | 67 | AuthorizationResponse result = new AuthorizationResponse(authorized, Authorization.ID + " has been authorized"); |
67 | 68 | ||
68 | xs = new XmlSerializer(typeof(AuthorizationResponse)); | 69 | xs = new XmlSerializer(typeof(AuthorizationResponse)); |
69 | return ServerUtils.SerializeResult(xs, result); | 70 | return ServerUtils.SerializeResult(xs, result); |
70 | 71 | ||
71 | } | 72 | } |
72 | } | 73 | } |
73 | } | 74 | } |
diff --git a/OpenSim/Server/Handlers/Avatar/AvatarServerPostHandler.cs b/OpenSim/Server/Handlers/Avatar/AvatarServerPostHandler.cs index ff8699f..b8fdacf 100644 --- a/OpenSim/Server/Handlers/Avatar/AvatarServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Avatar/AvatarServerPostHandler.cs | |||
@@ -60,9 +60,9 @@ namespace OpenSim.Server.Handlers.Avatar | |||
60 | protected override byte[] ProcessRequest(string path, Stream requestData, | 60 | protected override byte[] ProcessRequest(string path, Stream requestData, |
61 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 61 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
62 | { | 62 | { |
63 | StreamReader sr = new StreamReader(requestData); | 63 | string body; |
64 | string body = sr.ReadToEnd(); | 64 | using(StreamReader sr = new StreamReader(requestData)) |
65 | sr.Close(); | 65 | body = sr.ReadToEnd(); |
66 | body = body.Trim(); | 66 | body = body.Trim(); |
67 | 67 | ||
68 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 68 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
@@ -175,7 +175,7 @@ namespace OpenSim.Server.Handlers.Avatar | |||
175 | request.Remove("METHOD"); | 175 | request.Remove("METHOD"); |
176 | request.Remove("UserID"); | 176 | request.Remove("UserID"); |
177 | } | 177 | } |
178 | 178 | ||
179 | byte[] SetItems(Dictionary<string, object> request) | 179 | byte[] SetItems(Dictionary<string, object> request) |
180 | { | 180 | { |
181 | UUID user = UUID.Zero; | 181 | UUID user = UUID.Zero; |
@@ -196,7 +196,7 @@ namespace OpenSim.Server.Handlers.Avatar | |||
196 | names = _names.ToArray(); | 196 | names = _names.ToArray(); |
197 | List<string> _values = (List<string>)request["Values"]; | 197 | List<string> _values = (List<string>)request["Values"]; |
198 | values = _values.ToArray(); | 198 | values = _values.ToArray(); |
199 | 199 | ||
200 | if (m_AvatarService.SetItems(user, names, values)) | 200 | if (m_AvatarService.SetItems(user, names, values)) |
201 | return SuccessResult(); | 201 | return SuccessResult(); |
202 | 202 | ||
@@ -227,7 +227,7 @@ namespace OpenSim.Server.Handlers.Avatar | |||
227 | } | 227 | } |
228 | 228 | ||
229 | 229 | ||
230 | 230 | ||
231 | private byte[] SuccessResult() | 231 | private byte[] SuccessResult() |
232 | { | 232 | { |
233 | XmlDocument doc = new XmlDocument(); | 233 | XmlDocument doc = new XmlDocument(); |
diff --git a/OpenSim/Server/Handlers/BakedTextures/XBakes.cs b/OpenSim/Server/Handlers/BakedTextures/XBakes.cs index abcda62..0c74564 100644 --- a/OpenSim/Server/Handlers/BakedTextures/XBakes.cs +++ b/OpenSim/Server/Handlers/BakedTextures/XBakes.cs | |||
@@ -67,12 +67,7 @@ namespace OpenSim.Server.Handlers.BakedTextures | |||
67 | throw new Exception("No BakedTextureService configuration"); | 67 | throw new Exception("No BakedTextureService configuration"); |
68 | } | 68 | } |
69 | 69 | ||
70 | m_FSBase = assetConfig.GetString("BaseDirectory", String.Empty); | 70 | m_FSBase = assetConfig.GetString("BaseDirectory", Util.cacheDir() + "/bakes"); |
71 | if (m_FSBase == String.Empty) | ||
72 | { | ||
73 | m_FSBase = "bakes"; | ||
74 | } | ||
75 | m_FSBase = "../caches/" + m_FSBase; | ||
76 | 71 | ||
77 | m_log.Info("[BAKES]: XBakes service enabled"); | 72 | m_log.Info("[BAKES]: XBakes service enabled"); |
78 | } | 73 | } |
diff --git a/OpenSim/Server/Handlers/BakedTextures/XBakesHandler.cs b/OpenSim/Server/Handlers/BakedTextures/XBakesHandler.cs index 4c12967..4386a2d 100644 --- a/OpenSim/Server/Handlers/BakedTextures/XBakesHandler.cs +++ b/OpenSim/Server/Handlers/BakedTextures/XBakesHandler.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Server.Handlers.BakedTextures | |||
61 | ServerUtils.LoadPlugin<IBakedTextureService>(assetService, args); | 61 | ServerUtils.LoadPlugin<IBakedTextureService>(assetService, args); |
62 | 62 | ||
63 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); | 63 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); |
64 | 64 | ||
65 | server.AddStreamHandler(new BakesServerGetHandler(m_BakesService, auth)); | 65 | server.AddStreamHandler(new BakesServerGetHandler(m_BakesService, auth)); |
66 | server.AddStreamHandler(new BakesServerPostHandler(m_BakesService, auth)); | 66 | server.AddStreamHandler(new BakesServerPostHandler(m_BakesService, auth)); |
67 | } | 67 | } |
diff --git a/OpenSim/Server/Handlers/BakedTextures/XBakesPostHandler.cs b/OpenSim/Server/Handlers/BakedTextures/XBakesPostHandler.cs index e38543b..d16000d 100644 --- a/OpenSim/Server/Handlers/BakedTextures/XBakesPostHandler.cs +++ b/OpenSim/Server/Handlers/BakedTextures/XBakesPostHandler.cs | |||
@@ -65,12 +65,10 @@ namespace OpenSim.Server.Handlers.BakedTextures | |||
65 | return new byte[0]; | 65 | return new byte[0]; |
66 | } | 66 | } |
67 | 67 | ||
68 | StreamReader sr = new StreamReader(request); | 68 | using(StreamReader sr = new StreamReader(request)) |
69 | 69 | m_BakesService.Store(p[0],sr.ReadToEnd()); | |
70 | m_BakesService.Store(p[0], sr.ReadToEnd()); | ||
71 | sr.Close(); | ||
72 | 70 | ||
73 | return new byte[0]; | 71 | return new byte[0]; |
74 | } | 72 | } |
75 | } | 73 | } |
76 | } \ No newline at end of file | 74 | } |
diff --git a/OpenSim/Server/Handlers/Base/ServerConnector.cs b/OpenSim/Server/Handlers/Base/ServerConnector.cs index 72014db..0a4df54 100644 --- a/OpenSim/Server/Handlers/Base/ServerConnector.cs +++ b/OpenSim/Server/Handlers/Base/ServerConnector.cs | |||
@@ -72,7 +72,7 @@ namespace OpenSim.Server.Handlers.Base | |||
72 | 72 | ||
73 | // We call this from our plugin module to get our configuration | 73 | // We call this from our plugin module to get our configuration |
74 | public IConfig GetConfig() | 74 | public IConfig GetConfig() |
75 | { | 75 | { |
76 | IConfig config = null; | 76 | IConfig config = null; |
77 | config = ServerUtils.GetConfig(ConfigFile, ConfigName); | 77 | config = ServerUtils.GetConfig(ConfigFile, ConfigName); |
78 | 78 | ||
@@ -96,12 +96,12 @@ namespace OpenSim.Server.Handlers.Base | |||
96 | 96 | ||
97 | // We get our remote initial configuration for bootstrapping in case | 97 | // We get our remote initial configuration for bootstrapping in case |
98 | // we have no configuration in our main file or in an existing | 98 | // we have no configuration in our main file or in an existing |
99 | // modular config file. This is the last resort to bootstrap the | 99 | // modular config file. This is the last resort to bootstrap the |
100 | // configuration, likely a new plugin loading for the first time. | 100 | // configuration, likely a new plugin loading for the first time. |
101 | private IConfigSource GetConfigSource() | 101 | private IConfigSource GetConfigSource() |
102 | { | 102 | { |
103 | IConfigSource source = null; | 103 | IConfigSource source = null; |
104 | 104 | ||
105 | source = ServerUtils.LoadInitialConfig(ConfigURL); | 105 | source = ServerUtils.LoadInitialConfig(ConfigURL); |
106 | 106 | ||
107 | if (source == null) | 107 | if (source == null) |
diff --git a/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs b/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs index e0c2810..b7558ec 100644 --- a/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs +++ b/OpenSim/Server/Handlers/Estate/EstateDataRobustConnector.cs | |||
@@ -282,9 +282,10 @@ namespace OpenSim.Server.Handlers | |||
282 | // /estates/estate/?eid=int®ion=uuid | 282 | // /estates/estate/?eid=int®ion=uuid |
283 | if ("estate".Equals(resource)) | 283 | if ("estate".Equals(resource)) |
284 | { | 284 | { |
285 | StreamReader sr = new StreamReader(request); | 285 | string body; |
286 | string body = sr.ReadToEnd(); | 286 | using(StreamReader sr = new StreamReader(request)) |
287 | sr.Close(); | 287 | body = sr.ReadToEnd(); |
288 | |||
288 | body = body.Trim(); | 289 | body = body.Trim(); |
289 | 290 | ||
290 | Dictionary<string, object> requestData = ServerUtils.ParseQueryString(body); | 291 | Dictionary<string, object> requestData = ServerUtils.ParseQueryString(body); |
diff --git a/OpenSim/Server/Handlers/Friends/FriendsServerPostHandler.cs b/OpenSim/Server/Handlers/Friends/FriendsServerPostHandler.cs index 3aab30b..d6668ab 100644 --- a/OpenSim/Server/Handlers/Friends/FriendsServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Friends/FriendsServerPostHandler.cs | |||
@@ -61,9 +61,9 @@ namespace OpenSim.Server.Handlers.Friends | |||
61 | protected override byte[] ProcessRequest(string path, Stream requestData, | 61 | protected override byte[] ProcessRequest(string path, Stream requestData, |
62 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 62 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
63 | { | 63 | { |
64 | StreamReader sr = new StreamReader(requestData); | 64 | string body; |
65 | string body = sr.ReadToEnd(); | 65 | using(StreamReader sr = new StreamReader(requestData)) |
66 | sr.Close(); | 66 | body = sr.ReadToEnd(); |
67 | body = body.Trim(); | 67 | body = body.Trim(); |
68 | 68 | ||
69 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 69 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
diff --git a/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs b/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs index 346af32..2aec045 100644 --- a/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs +++ b/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs | |||
@@ -83,10 +83,10 @@ namespace OpenSim.Server.Handlers.Grid | |||
83 | { | 83 | { |
84 | _info["login"] | 84 | _info["login"] |
85 | = String.Format( | 85 | = String.Format( |
86 | "http://127.0.0.1:{0}/", | 86 | "http://127.0.0.1:{0}/", |
87 | netCfg.GetString( | 87 | netCfg.GetString( |
88 | "http_listener_port", ConfigSettings.DefaultRegionHttpPort.ToString())); | 88 | "http_listener_port", ConfigSettings.DefaultRegionHttpPort.ToString())); |
89 | 89 | ||
90 | IssueWarning(); | 90 | IssueWarning(); |
91 | } | 91 | } |
92 | else | 92 | else |
@@ -99,7 +99,7 @@ namespace OpenSim.Server.Handlers.Grid | |||
99 | { | 99 | { |
100 | _log.Warn("[GRID INFO SERVICE]: Cannot get grid info from config source, using minimal defaults"); | 100 | _log.Warn("[GRID INFO SERVICE]: Cannot get grid info from config source, using minimal defaults"); |
101 | } | 101 | } |
102 | 102 | ||
103 | _log.DebugFormat("[GRID INFO SERVICE]: Grid info service initialized with {0} keys", _info.Count); | 103 | _log.DebugFormat("[GRID INFO SERVICE]: Grid info service initialized with {0} keys", _info.Count); |
104 | } | 104 | } |
105 | 105 | ||
@@ -107,7 +107,7 @@ namespace OpenSim.Server.Handlers.Grid | |||
107 | { | 107 | { |
108 | _log.Warn("[GRID INFO SERVICE]: found no [GridInfo] section in your configuration files"); | 108 | _log.Warn("[GRID INFO SERVICE]: found no [GridInfo] section in your configuration files"); |
109 | _log.Warn("[GRID INFO SERVICE]: trying to guess sensible defaults, you might want to provide better ones:"); | 109 | _log.Warn("[GRID INFO SERVICE]: trying to guess sensible defaults, you might want to provide better ones:"); |
110 | 110 | ||
111 | foreach (string k in _info.Keys) | 111 | foreach (string k in _info.Keys) |
112 | { | 112 | { |
113 | _log.WarnFormat("[GRID INFO SERVICE]: {0}: {1}", k, _info[k]); | 113 | _log.WarnFormat("[GRID INFO SERVICE]: {0}: {1}", k, _info[k]); |
@@ -181,7 +181,7 @@ namespace OpenSim.Server.Handlers.Grid | |||
181 | new string[] { "Startup", "Hypergrid" }, String.Empty); | 181 | new string[] { "Startup", "Hypergrid" }, String.Empty); |
182 | 182 | ||
183 | if (!String.IsNullOrEmpty(HomeURI)) | 183 | if (!String.IsNullOrEmpty(HomeURI)) |
184 | map["home"] = OSD.FromString(HomeURI); | 184 | map["home"] = OSD.FromString(HomeURI); |
185 | else // Legacy. Remove soon! | 185 | else // Legacy. Remove soon! |
186 | { | 186 | { |
187 | IConfig cfg = m_Config.Configs["LoginService"]; | 187 | IConfig cfg = m_Config.Configs["LoginService"]; |
diff --git a/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs b/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs index 86fda36..44d4654 100644 --- a/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs | |||
@@ -65,9 +65,9 @@ namespace OpenSim.Server.Handlers.Grid | |||
65 | protected override byte[] ProcessRequest(string path, Stream requestData, | 65 | protected override byte[] ProcessRequest(string path, Stream requestData, |
66 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 66 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
67 | { | 67 | { |
68 | StreamReader sr = new StreamReader(requestData); | 68 | string body; |
69 | string body = sr.ReadToEnd(); | 69 | using(StreamReader sr = new StreamReader(requestData)) |
70 | sr.Close(); | 70 | body = sr.ReadToEnd(); |
71 | body = body.Trim(); | 71 | body = body.Trim(); |
72 | 72 | ||
73 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 73 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
@@ -126,7 +126,7 @@ namespace OpenSim.Server.Handlers.Grid | |||
126 | case "get_grid_extra_features": | 126 | case "get_grid_extra_features": |
127 | return GetGridExtraFeatures(request); | 127 | return GetGridExtraFeatures(request); |
128 | } | 128 | } |
129 | 129 | ||
130 | m_log.DebugFormat("[GRID HANDLER]: unknown method request {0}", method); | 130 | m_log.DebugFormat("[GRID HANDLER]: unknown method request {0}", method); |
131 | } | 131 | } |
132 | catch (Exception e) | 132 | catch (Exception e) |
@@ -579,33 +579,33 @@ namespace OpenSim.Server.Handlers.Grid | |||
579 | if (request.ContainsKey("SCOPEID")) | 579 | if (request.ContainsKey("SCOPEID")) |
580 | UUID.TryParse(request["SCOPEID"].ToString(), out scopeID); | 580 | UUID.TryParse(request["SCOPEID"].ToString(), out scopeID); |
581 | else | 581 | else |
582 | m_log.WarnFormat("[GRID HANDLER]: no scopeID in request to get neighbours"); | 582 | m_log.WarnFormat("[GRID HANDLER]: no scopeID in request to get RegionFlags"); |
583 | 583 | ||
584 | UUID regionID = UUID.Zero; | 584 | UUID regionID = UUID.Zero; |
585 | if (request.ContainsKey("REGIONID")) | 585 | if (request.ContainsKey("REGIONID")) |
586 | UUID.TryParse(request["REGIONID"].ToString(), out regionID); | 586 | UUID.TryParse(request["REGIONID"].ToString(), out regionID); |
587 | else | 587 | else |
588 | m_log.WarnFormat("[GRID HANDLER]: no regionID in request to get neighbours"); | 588 | m_log.WarnFormat("[GRID HANDLER]: no regionID in request to get RegionFlags"); |
589 | 589 | ||
590 | int flags = m_GridService.GetRegionFlags(scopeID, regionID); | 590 | int flags = m_GridService.GetRegionFlags(scopeID, regionID); |
591 | // m_log.DebugFormat("[GRID HANDLER]: flags for region {0}: {1}", regionID, flags); | 591 | // m_log.DebugFormat("[GRID HANDLER]: flags for region {0}: {1}", regionID, flags); |
592 | 592 | ||
593 | Dictionary<string, object> result = new Dictionary<string, object>(); | 593 | Dictionary<string, object> result = new Dictionary<string, object>(); |
594 | result["result"] = flags.ToString(); | 594 | result["result"] = flags.ToString(); |
595 | 595 | ||
596 | string xmlString = ServerUtils.BuildXmlResponse(result); | 596 | string xmlString = ServerUtils.BuildXmlResponse(result); |
597 | 597 | ||
598 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | 598 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); |
599 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 599 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
600 | } | 600 | } |
601 | 601 | ||
602 | byte[] GetGridExtraFeatures(Dictionary<string, object> request) | 602 | byte[] GetGridExtraFeatures(Dictionary<string, object> request) |
603 | { | 603 | { |
604 | 604 | ||
605 | Dictionary<string, object> result = new Dictionary<string, object> (); | 605 | Dictionary<string, object> result = new Dictionary<string, object> (); |
606 | Dictionary<string, object> extraFeatures = m_GridService.GetExtraFeatures (); | 606 | Dictionary<string, object> extraFeatures = m_GridService.GetExtraFeatures (); |
607 | 607 | ||
608 | foreach (string key in extraFeatures.Keys) | 608 | foreach (string key in extraFeatures.Keys) |
609 | { | 609 | { |
610 | result [key] = extraFeatures [key]; | 610 | result [key] = extraFeatures [key]; |
611 | } | 611 | } |
diff --git a/OpenSim/Server/Handlers/GridUser/GridUserServerConnector.cs b/OpenSim/Server/Handlers/GridUser/GridUserServerConnector.cs index 1e29378..755272b 100644 --- a/OpenSim/Server/Handlers/GridUser/GridUserServerConnector.cs +++ b/OpenSim/Server/Handlers/GridUser/GridUserServerConnector.cs | |||
@@ -56,7 +56,7 @@ namespace OpenSim.Server.Handlers.GridUser | |||
56 | Object[] args = new Object[] { config }; | 56 | Object[] args = new Object[] { config }; |
57 | m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(service, args); | 57 | m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(service, args); |
58 | 58 | ||
59 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); ; | 59 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); |
60 | 60 | ||
61 | server.AddStreamHandler(new GridUserServerPostHandler(m_GridUserService, auth)); | 61 | server.AddStreamHandler(new GridUserServerPostHandler(m_GridUserService, auth)); |
62 | } | 62 | } |
diff --git a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs index 9237c63..1f691d6 100644 --- a/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs +++ b/OpenSim/Server/Handlers/GridUser/GridUserServerPostHandler.cs | |||
@@ -60,9 +60,9 @@ namespace OpenSim.Server.Handlers.GridUser | |||
60 | protected override byte[] ProcessRequest(string path, Stream requestData, | 60 | protected override byte[] ProcessRequest(string path, Stream requestData, |
61 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 61 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
62 | { | 62 | { |
63 | StreamReader sr = new StreamReader(requestData); | 63 | string body; |
64 | string body = sr.ReadToEnd(); | 64 | using(StreamReader sr = new StreamReader(requestData)) |
65 | sr.Close(); | 65 | body = sr.ReadToEnd(); |
66 | body = body.Trim(); | 66 | body = body.Trim(); |
67 | 67 | ||
68 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 68 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
@@ -185,6 +185,9 @@ namespace OpenSim.Server.Handlers.GridUser | |||
185 | 185 | ||
186 | GridUserInfo guinfo = m_GridUserService.GetGridUserInfo(user); | 186 | GridUserInfo guinfo = m_GridUserService.GetGridUserInfo(user); |
187 | 187 | ||
188 | if (guinfo == null) | ||
189 | return FailureResult(); | ||
190 | |||
188 | Dictionary<string, object> result = new Dictionary<string, object>(); | 191 | Dictionary<string, object> result = new Dictionary<string, object>(); |
189 | if (guinfo != null) | 192 | if (guinfo != null) |
190 | result["result"] = guinfo.ToKeyValuePairs(); | 193 | result["result"] = guinfo.ToKeyValuePairs(); |
@@ -225,6 +228,8 @@ namespace OpenSim.Server.Handlers.GridUser | |||
225 | int i = 0; | 228 | int i = 0; |
226 | foreach (GridUserInfo pinfo in pinfos) | 229 | foreach (GridUserInfo pinfo in pinfos) |
227 | { | 230 | { |
231 | if(pinfo == null) | ||
232 | continue; | ||
228 | Dictionary<string, object> rinfoDict = pinfo.ToKeyValuePairs(); | 233 | Dictionary<string, object> rinfoDict = pinfo.ToKeyValuePairs(); |
229 | result["griduser" + i] = rinfoDict; | 234 | result["griduser" + i] = rinfoDict; |
230 | i++; | 235 | i++; |
diff --git a/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs index 95a0510..684d1a8 100644 --- a/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs | |||
@@ -52,7 +52,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
52 | public class GatekeeperAgentHandler : OpenSim.Server.Handlers.Simulation.AgentPostHandler | 52 | public class GatekeeperAgentHandler : OpenSim.Server.Handlers.Simulation.AgentPostHandler |
53 | { | 53 | { |
54 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 54 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | 55 | ||
56 | private IGatekeeperService m_GatekeeperService; | 56 | private IGatekeeperService m_GatekeeperService; |
57 | 57 | ||
58 | public GatekeeperAgentHandler(IGatekeeperService gatekeeper, bool proxy) : base("/foreignagent") | 58 | public GatekeeperAgentHandler(IGatekeeperService gatekeeper, bool proxy) : base("/foreignagent") |
@@ -62,7 +62,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
62 | } | 62 | } |
63 | 63 | ||
64 | protected override bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, | 64 | protected override bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, |
65 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason) | 65 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason) |
66 | { | 66 | { |
67 | return m_GatekeeperService.LoginAgent(source, aCircuit, destination, out reason); | 67 | return m_GatekeeperService.LoginAgent(source, aCircuit, destination, out reason); |
68 | } | 68 | } |
diff --git a/OpenSim/Server/Handlers/Hypergrid/HGFriendServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/HGFriendServerConnector.cs index 6c79c60..870a5ef 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HGFriendServerConnector.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HGFriendServerConnector.cs | |||
@@ -48,7 +48,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
48 | } | 48 | } |
49 | 49 | ||
50 | // Called from standalone configurations | 50 | // Called from standalone configurations |
51 | public HGFriendsServerConnector(IConfigSource config, IHttpServer server, string configName, IFriendsSimConnector localConn) | 51 | public HGFriendsServerConnector(IConfigSource config, IHttpServer server, string configName, IFriendsSimConnector localConn) |
52 | : base(config, server, configName) | 52 | : base(config, server, configName) |
53 | { | 53 | { |
54 | if (configName != string.Empty) | 54 | if (configName != string.Empty) |
diff --git a/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs b/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs index 37b47ed..fc1a77d 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
61 | m_UserAgentService = uas; | 61 | m_UserAgentService = uas; |
62 | m_FriendsLocalSimConnector = friendsConn; | 62 | m_FriendsLocalSimConnector = friendsConn; |
63 | 63 | ||
64 | m_log.DebugFormat("[HGFRIENDS HANDLER]: HGFriendsServerPostHandler is On ({0})", | 64 | m_log.DebugFormat("[HGFRIENDS HANDLER]: HGFriendsServerPostHandler is On ({0})", |
65 | (m_FriendsLocalSimConnector == null ? "robust" : "standalone")); | 65 | (m_FriendsLocalSimConnector == null ? "robust" : "standalone")); |
66 | 66 | ||
67 | if (m_TheService == null) | 67 | if (m_TheService == null) |
@@ -71,9 +71,9 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
71 | protected override byte[] ProcessRequest(string path, Stream requestData, | 71 | protected override byte[] ProcessRequest(string path, Stream requestData, |
72 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 72 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
73 | { | 73 | { |
74 | StreamReader sr = new StreamReader(requestData); | 74 | string body; |
75 | string body = sr.ReadToEnd(); | 75 | using(StreamReader sr = new StreamReader(requestData)) |
76 | sr.Close(); | 76 | body = sr.ReadToEnd(); |
77 | body = body.Trim(); | 77 | body = body.Trim(); |
78 | 78 | ||
79 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 79 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
@@ -105,24 +105,24 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
105 | 105 | ||
106 | case "validate_friendship_offered": | 106 | case "validate_friendship_offered": |
107 | return ValidateFriendshipOffered(request); | 107 | return ValidateFriendshipOffered(request); |
108 | 108 | ||
109 | case "statusnotification": | 109 | case "statusnotification": |
110 | return StatusNotification(request); | 110 | return StatusNotification(request); |
111 | /* | 111 | /* |
112 | case "friendship_approved": | 112 | case "friendship_approved": |
113 | return FriendshipApproved(request); | 113 | return FriendshipApproved(request); |
114 | 114 | ||
115 | case "friendship_denied": | 115 | case "friendship_denied": |
116 | return FriendshipDenied(request); | 116 | return FriendshipDenied(request); |
117 | 117 | ||
118 | case "friendship_terminated": | 118 | case "friendship_terminated": |
119 | return FriendshipTerminated(request); | 119 | return FriendshipTerminated(request); |
120 | 120 | ||
121 | case "grant_rights": | 121 | case "grant_rights": |
122 | return GrantRights(request); | 122 | return GrantRights(request); |
123 | */ | 123 | */ |
124 | } | 124 | } |
125 | 125 | ||
126 | m_log.DebugFormat("[HGFRIENDS HANDLER]: unknown method {0}", method); | 126 | m_log.DebugFormat("[HGFRIENDS HANDLER]: unknown method {0}", method); |
127 | } | 127 | } |
128 | catch (Exception e) | 128 | catch (Exception e) |
diff --git a/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs index e787f7c..367c481 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs | |||
@@ -118,7 +118,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
118 | 118 | ||
119 | 119 | ||
120 | protected override bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, | 120 | protected override bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, |
121 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason) | 121 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason) |
122 | { | 122 | { |
123 | return m_UserAgentService.LoginAgentToGrid(source, aCircuit, gatekeeper, destination, fromLogin, out reason); | 123 | return m_UserAgentService.LoginAgentToGrid(source, aCircuit, gatekeeper, destination, fromLogin, out reason); |
124 | } | 124 | } |
diff --git a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs index c7ac9be..6bd24db 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs | |||
@@ -70,13 +70,17 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
70 | string imageURL = string.Empty; | 70 | string imageURL = string.Empty; |
71 | ulong regionHandle = 0; | 71 | ulong regionHandle = 0; |
72 | string reason = string.Empty; | 72 | string reason = string.Empty; |
73 | int sizeX = 256; | ||
74 | int sizeY = 256; | ||
73 | 75 | ||
74 | bool success = m_GatekeeperService.LinkRegion(name, out regionID, out regionHandle, out externalName, out imageURL, out reason); | 76 | bool success = m_GatekeeperService.LinkRegion(name, out regionID, out regionHandle, out externalName, out imageURL, out reason, out sizeX, out sizeY); |
75 | 77 | ||
76 | Hashtable hash = new Hashtable(); | 78 | Hashtable hash = new Hashtable(); |
77 | hash["result"] = success.ToString(); | 79 | hash["result"] = success.ToString(); |
78 | hash["uuid"] = regionID.ToString(); | 80 | hash["uuid"] = regionID.ToString(); |
79 | hash["handle"] = regionHandle.ToString(); | 81 | hash["handle"] = regionHandle.ToString(); |
82 | hash["size_x"] = sizeX.ToString(); | ||
83 | hash["size_y"] = sizeY.ToString(); | ||
80 | hash["region_image"] = imageURL; | 84 | hash["region_image"] = imageURL; |
81 | hash["external_name"] = externalName; | 85 | hash["external_name"] = externalName; |
82 | 86 | ||
@@ -121,6 +125,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
121 | hash["hostname"] = regInfo.ExternalHostName; | 125 | hash["hostname"] = regInfo.ExternalHostName; |
122 | hash["http_port"] = regInfo.HttpPort.ToString(); | 126 | hash["http_port"] = regInfo.HttpPort.ToString(); |
123 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); | 127 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); |
128 | hash["server_uri"] = regInfo.ServerURI; | ||
124 | } | 129 | } |
125 | 130 | ||
126 | if (message != null) | 131 | if (message != null) |
diff --git a/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs index 8145a21..63f376d 100644 --- a/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs +++ b/OpenSim/Server/Handlers/Hypergrid/InstantMessageServerConnector.cs | |||
@@ -55,7 +55,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
55 | 55 | ||
56 | public InstantMessageServerConnector(IConfigSource config, IHttpServer server) : | 56 | public InstantMessageServerConnector(IConfigSource config, IHttpServer server) : |
57 | this(config, server, (IInstantMessageSimConnector)null) | 57 | this(config, server, (IInstantMessageSimConnector)null) |
58 | { | 58 | { |
59 | } | 59 | } |
60 | 60 | ||
61 | public InstantMessageServerConnector(IConfigSource config, IHttpServer server, string configName) : | 61 | public InstantMessageServerConnector(IConfigSource config, IHttpServer server, string configName) : |
diff --git a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs index e112e0e..394b133 100644 --- a/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs +++ b/OpenSim/Server/Handlers/Hypergrid/UserAgentServerConnector.cs | |||
@@ -63,14 +63,14 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
63 | 63 | ||
64 | public UserAgentServerConnector(IConfigSource config, IHttpServer server) : | 64 | public UserAgentServerConnector(IConfigSource config, IHttpServer server) : |
65 | this(config, server, (IFriendsSimConnector)null) | 65 | this(config, server, (IFriendsSimConnector)null) |
66 | { | 66 | { |
67 | } | 67 | } |
68 | 68 | ||
69 | public UserAgentServerConnector(IConfigSource config, IHttpServer server, string configName) : | 69 | public UserAgentServerConnector(IConfigSource config, IHttpServer server, string configName) : |
70 | this(config, server) | 70 | this(config, server) |
71 | { | 71 | { |
72 | } | 72 | } |
73 | 73 | ||
74 | public UserAgentServerConnector(IConfigSource config, IHttpServer server, IFriendsSimConnector friendsConnector) : | 74 | public UserAgentServerConnector(IConfigSource config, IHttpServer server, IFriendsSimConnector friendsConnector) : |
75 | base(config, server, String.Empty) | 75 | base(config, server, String.Empty) |
76 | { | 76 | { |
@@ -139,6 +139,7 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
139 | hash["region_name"] = regInfo.RegionName; | 139 | hash["region_name"] = regInfo.RegionName; |
140 | hash["hostname"] = regInfo.ExternalHostName; | 140 | hash["hostname"] = regInfo.ExternalHostName; |
141 | hash["http_port"] = regInfo.HttpPort.ToString(); | 141 | hash["http_port"] = regInfo.HttpPort.ToString(); |
142 | hash["server_uri"] = regInfo.ServerURI; | ||
142 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); | 143 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); |
143 | hash["position"] = position.ToString(); | 144 | hash["position"] = position.ToString(); |
144 | hash["lookAt"] = lookAt.ToString(); | 145 | hash["lookAt"] = lookAt.ToString(); |
diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index b295446..e90b869 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Server.Handlers.Inventory | |||
61 | { | 61 | { |
62 | if (configName != string.Empty) | 62 | if (configName != string.Empty) |
63 | m_ConfigName = configName; | 63 | m_ConfigName = configName; |
64 | 64 | ||
65 | IConfig serverConfig = config.Configs[m_ConfigName]; | 65 | IConfig serverConfig = config.Configs[m_ConfigName]; |
66 | if (serverConfig == null) | 66 | if (serverConfig == null) |
67 | throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName)); | 67 | throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName)); |
@@ -92,7 +92,7 @@ namespace OpenSim.Server.Handlers.Inventory | |||
92 | m_httpServer.AddStreamHandler( | 92 | m_httpServer.AddStreamHandler( |
93 | new RestDeserialiseSecureHandler<Guid, InventoryCollection>( | 93 | new RestDeserialiseSecureHandler<Guid, InventoryCollection>( |
94 | "POST", "/GetFolderContent/", GetFolderContent, CheckAuthSession)); | 94 | "POST", "/GetFolderContent/", GetFolderContent, CheckAuthSession)); |
95 | 95 | ||
96 | m_httpServer.AddStreamHandler( | 96 | m_httpServer.AddStreamHandler( |
97 | new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( | 97 | new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( |
98 | "POST", "/UpdateFolder/", m_InventoryService.UpdateFolder, CheckAuthSession)); | 98 | "POST", "/UpdateFolder/", m_InventoryService.UpdateFolder, CheckAuthSession)); |
@@ -114,12 +114,12 @@ namespace OpenSim.Server.Handlers.Inventory | |||
114 | "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); | 114 | "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); |
115 | 115 | ||
116 | m_httpServer.AddStreamHandler( | 116 | m_httpServer.AddStreamHandler( |
117 | new RestDeserialiseSecureHandler<InventoryItemBase, InventoryItemBase>( | 117 | new RestDeserialiseSecureHandler<Guid, InventoryItemBase>( |
118 | "POST", "/QueryItem/", m_InventoryService.GetItem, CheckAuthSession)); | 118 | "POST", "/QueryItem/", GetItem, CheckAuthSession)); |
119 | 119 | ||
120 | m_httpServer.AddStreamHandler( | 120 | m_httpServer.AddStreamHandler( |
121 | new RestDeserialiseSecureHandler<InventoryFolderBase, InventoryFolderBase>( | 121 | new RestDeserialiseSecureHandler<Guid, InventoryFolderBase>( |
122 | "POST", "/QueryFolder/", m_InventoryService.GetFolder, CheckAuthSession)); | 122 | "POST", "/QueryFolder/", GetFolder, CheckAuthSession)); |
123 | 123 | ||
124 | m_httpServer.AddStreamHandler( | 124 | m_httpServer.AddStreamHandler( |
125 | new RestDeserialiseTrustedHandler<Guid, bool>( | 125 | new RestDeserialiseTrustedHandler<Guid, bool>( |
@@ -151,7 +151,7 @@ namespace OpenSim.Server.Handlers.Inventory | |||
151 | 151 | ||
152 | m_httpServer.AddStreamHandler(new InventoryServerMoveItemsHandler(m_InventoryService)); | 152 | m_httpServer.AddStreamHandler(new InventoryServerMoveItemsHandler(m_InventoryService)); |
153 | 153 | ||
154 | 154 | ||
155 | // for persistent active gestures | 155 | // for persistent active gestures |
156 | m_httpServer.AddStreamHandler( | 156 | m_httpServer.AddStreamHandler( |
157 | new RestDeserialiseTrustedHandler<Guid, List<InventoryItemBase>> | 157 | new RestDeserialiseTrustedHandler<Guid, List<InventoryItemBase>> |
@@ -205,6 +205,16 @@ namespace OpenSim.Server.Handlers.Inventory | |||
205 | return new Dictionary<AssetType, InventoryFolderBase>(); | 205 | return new Dictionary<AssetType, InventoryFolderBase>(); |
206 | } | 206 | } |
207 | 207 | ||
208 | public InventoryItemBase GetItem(Guid guid) | ||
209 | { | ||
210 | return m_InventoryService.GetItem(UUID.Zero, new UUID(guid)); | ||
211 | } | ||
212 | |||
213 | public InventoryFolderBase GetFolder(Guid guid) | ||
214 | { | ||
215 | return m_InventoryService.GetFolder(UUID.Zero, new UUID(guid)); | ||
216 | } | ||
217 | |||
208 | public InventoryCollection GetFolderContent(Guid guid) | 218 | public InventoryCollection GetFolderContent(Guid guid) |
209 | { | 219 | { |
210 | return m_InventoryService.GetFolderContent(UUID.Zero, new UUID(guid)); | 220 | return m_InventoryService.GetFolderContent(UUID.Zero, new UUID(guid)); |
diff --git a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs index 5c4e7a9..742d1a0 100644 --- a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs | |||
@@ -95,9 +95,9 @@ namespace OpenSim.Server.Handlers.Inventory | |||
95 | protected override byte[] ProcessRequest(string path, Stream requestData, | 95 | protected override byte[] ProcessRequest(string path, Stream requestData, |
96 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 96 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
97 | { | 97 | { |
98 | StreamReader sr = new StreamReader(requestData); | 98 | string body; |
99 | string body = sr.ReadToEnd(); | 99 | using(StreamReader sr = new StreamReader(requestData)) |
100 | sr.Close(); | 100 | body = sr.ReadToEnd(); |
101 | body = body.Trim(); | 101 | body = body.Trim(); |
102 | 102 | ||
103 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | 103 | //m_log.DebugFormat("[XXX]: query String: {0}", body); |
@@ -293,7 +293,7 @@ namespace OpenSim.Server.Handlers.Inventory | |||
293 | result["FID"] = icoll.FolderID.ToString(); | 293 | result["FID"] = icoll.FolderID.ToString(); |
294 | result["VERSION"] = icoll.Version.ToString(); | 294 | result["VERSION"] = icoll.Version.ToString(); |
295 | Dictionary<string, object> folders = new Dictionary<string, object>(); | 295 | Dictionary<string, object> folders = new Dictionary<string, object>(); |
296 | int i = 0; | 296 | int i = 0; |
297 | if (icoll.Folders != null) | 297 | if (icoll.Folders != null) |
298 | { | 298 | { |
299 | foreach (InventoryFolderBase f in icoll.Folders) | 299 | foreach (InventoryFolderBase f in icoll.Folders) |
@@ -407,7 +407,7 @@ namespace OpenSim.Server.Handlers.Inventory | |||
407 | } | 407 | } |
408 | } | 408 | } |
409 | result["ITEMS"] = sitems; | 409 | result["ITEMS"] = sitems; |
410 | 410 | ||
411 | string xmlString = ServerUtils.BuildXmlResponse(result); | 411 | string xmlString = ServerUtils.BuildXmlResponse(result); |
412 | 412 | ||
413 | //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); | 413 | //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); |
@@ -566,9 +566,11 @@ namespace OpenSim.Server.Handlers.Inventory | |||
566 | Dictionary<string,object> result = new Dictionary<string,object>(); | 566 | Dictionary<string,object> result = new Dictionary<string,object>(); |
567 | UUID id = UUID.Zero; | 567 | UUID id = UUID.Zero; |
568 | UUID.TryParse(request["ID"].ToString(), out id); | 568 | UUID.TryParse(request["ID"].ToString(), out id); |
569 | UUID user = UUID.Zero; | ||
570 | if (request.ContainsKey("PRINCIPAL")) | ||
571 | UUID.TryParse(request["PRINCIPAL"].ToString(), out user); | ||
569 | 572 | ||
570 | InventoryItemBase item = new InventoryItemBase(id); | 573 | InventoryItemBase item = m_InventoryService.GetItem(user, id); |
571 | item = m_InventoryService.GetItem(item); | ||
572 | if (item != null) | 574 | if (item != null) |
573 | result["item"] = EncodeItem(item); | 575 | result["item"] = EncodeItem(item); |
574 | 576 | ||
@@ -617,9 +619,11 @@ namespace OpenSim.Server.Handlers.Inventory | |||
617 | Dictionary<string, object> result = new Dictionary<string, object>(); | 619 | Dictionary<string, object> result = new Dictionary<string, object>(); |
618 | UUID id = UUID.Zero; | 620 | UUID id = UUID.Zero; |
619 | UUID.TryParse(request["ID"].ToString(), out id); | 621 | UUID.TryParse(request["ID"].ToString(), out id); |
622 | UUID user = UUID.Zero; | ||
623 | if (request.ContainsKey("PRINCIPAL")) | ||
624 | UUID.TryParse(request["PRINCIPAL"].ToString(), out user); | ||
620 | 625 | ||
621 | InventoryFolderBase folder = new InventoryFolderBase(id); | 626 | InventoryFolderBase folder = m_InventoryService.GetFolder(user, id); |
622 | folder = m_InventoryService.GetFolder(folder); | ||
623 | if (folder != null) | 627 | if (folder != null) |
624 | result["folder"] = EncodeFolder(folder); | 628 | result["folder"] = EncodeFolder(folder); |
625 | 629 | ||
diff --git a/OpenSim/Server/Handlers/Land/LandHandlers.cs b/OpenSim/Server/Handlers/Land/LandHandlers.cs index b45289a..d74077a 100644 --- a/OpenSim/Server/Handlers/Land/LandHandlers.cs +++ b/OpenSim/Server/Handlers/Land/LandHandlers.cs | |||
@@ -64,7 +64,7 @@ namespace OpenSim.Server.Handlers.Land | |||
64 | ulong regionHandle = Convert.ToUInt64(requestData["region_handle"]); | 64 | ulong regionHandle = Convert.ToUInt64(requestData["region_handle"]); |
65 | uint x = Convert.ToUInt32(requestData["x"]); | 65 | uint x = Convert.ToUInt32(requestData["x"]); |
66 | uint y = Convert.ToUInt32(requestData["y"]); | 66 | uint y = Convert.ToUInt32(requestData["y"]); |
67 | m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle); | 67 | // m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle); |
68 | 68 | ||
69 | byte regionAccess; | 69 | byte regionAccess; |
70 | LandData landData = m_LocalService.GetLandData(UUID.Zero, regionHandle, x, y, out regionAccess); | 70 | LandData landData = m_LocalService.GetLandData(UUID.Zero, regionHandle, x, y, out regionAccess); |
@@ -85,6 +85,7 @@ namespace OpenSim.Server.Handlers.Land | |||
85 | hash["SnapshotID"] = landData.SnapshotID.ToString(); | 85 | hash["SnapshotID"] = landData.SnapshotID.ToString(); |
86 | hash["UserLocation"] = landData.UserLocation.ToString(); | 86 | hash["UserLocation"] = landData.UserLocation.ToString(); |
87 | hash["RegionAccess"] = regionAccess.ToString(); | 87 | hash["RegionAccess"] = regionAccess.ToString(); |
88 | hash["Dwell"] = landData.Dwell.ToString(); | ||
88 | } | 89 | } |
89 | 90 | ||
90 | XmlRpcResponse response = new XmlRpcResponse(); | 91 | XmlRpcResponse response = new XmlRpcResponse(); |
diff --git a/OpenSim/Server/Handlers/Land/LandServiceInConnector.cs b/OpenSim/Server/Handlers/Land/LandServiceInConnector.cs index d368bd3..c4b339f 100644 --- a/OpenSim/Server/Handlers/Land/LandServiceInConnector.cs +++ b/OpenSim/Server/Handlers/Land/LandServiceInConnector.cs | |||
@@ -54,7 +54,7 @@ namespace OpenSim.Server.Handlers.Land | |||
54 | m_log.Error("[LAND IN CONNECTOR]: Land service was not provided"); | 54 | m_log.Error("[LAND IN CONNECTOR]: Land service was not provided"); |
55 | return; | 55 | return; |
56 | } | 56 | } |
57 | 57 | ||
58 | //bool authentication = neighbourConfig.GetBoolean("RequireAuthentication", false); | 58 | //bool authentication = neighbourConfig.GetBoolean("RequireAuthentication", false); |
59 | //if (authentication) | 59 | //if (authentication) |
60 | // m_AuthenticationService = scene.RequestModuleInterface<IAuthenticationService>(); | 60 | // m_AuthenticationService = scene.RequestModuleInterface<IAuthenticationService>(); |
diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs index f2a5678..4e7ab00 100644 --- a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs +++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs | |||
@@ -53,7 +53,7 @@ namespace OpenSim.Server.Handlers.Login | |||
53 | 53 | ||
54 | private ILoginService m_LocalService; | 54 | private ILoginService m_LocalService; |
55 | private bool m_Proxy; | 55 | private bool m_Proxy; |
56 | 56 | ||
57 | 57 | ||
58 | public LLLoginHandlers(ILoginService service, bool hasProxy) | 58 | public LLLoginHandlers(ILoginService service, bool hasProxy) |
59 | { | 59 | { |
@@ -64,7 +64,7 @@ namespace OpenSim.Server.Handlers.Login | |||
64 | public XmlRpcResponse HandleXMLRPCLogin(XmlRpcRequest request, IPEndPoint remoteClient) | 64 | public XmlRpcResponse HandleXMLRPCLogin(XmlRpcRequest request, IPEndPoint remoteClient) |
65 | { | 65 | { |
66 | Hashtable requestData = (Hashtable)request.Params[0]; | 66 | Hashtable requestData = (Hashtable)request.Params[0]; |
67 | if (m_Proxy && request.Params[3] != null) | 67 | if (request.Params[3] != null) |
68 | { | 68 | { |
69 | IPEndPoint ep = Util.GetClientIPFromXFF((string)request.Params[3]); | 69 | IPEndPoint ep = Util.GetClientIPFromXFF((string)request.Params[3]); |
70 | if (ep != null) | 70 | if (ep != null) |
@@ -132,8 +132,13 @@ namespace OpenSim.Server.Handlers.Login | |||
132 | 132 | ||
133 | //m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion); | 133 | //m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion); |
134 | 134 | ||
135 | |||
136 | bool LibOMVclient = false; | ||
137 | if (request.Params.Count > 4 && (string)request.Params[4] == "gridproxy") | ||
138 | LibOMVclient = true; | ||
139 | |||
135 | LoginResponse reply = null; | 140 | LoginResponse reply = null; |
136 | reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, clientVersion, channel, mac, id0, remoteClient); | 141 | reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, clientVersion, channel, mac, id0, remoteClient, LibOMVclient); |
137 | 142 | ||
138 | XmlRpcResponse response = new XmlRpcResponse(); | 143 | XmlRpcResponse response = new XmlRpcResponse(); |
139 | response.Value = reply.ToHashtable(); | 144 | response.Value = reply.ToHashtable(); |
@@ -216,7 +221,7 @@ namespace OpenSim.Server.Handlers.Login | |||
216 | 221 | ||
217 | LoginResponse reply = null; | 222 | LoginResponse reply = null; |
218 | reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, | 223 | reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, |
219 | map["version"].AsString(), map["channel"].AsString(), map["mac"].AsString(), map["id0"].AsString(), remoteClient); | 224 | map["version"].AsString(), map["channel"].AsString(), map["mac"].AsString(), map["id0"].AsString(), remoteClient,false); |
220 | return reply.ToOSDMap(); | 225 | return reply.ToOSDMap(); |
221 | 226 | ||
222 | } | 227 | } |
@@ -259,7 +264,7 @@ namespace OpenSim.Server.Handlers.Login | |||
259 | (sender as WebSocketHttpServerHandler).GetRemoteIPEndpoint(); | 264 | (sender as WebSocketHttpServerHandler).GetRemoteIPEndpoint(); |
260 | LoginResponse reply = null; | 265 | LoginResponse reply = null; |
261 | reply = m_LocalService.Login(first, last, passwd, start, scope, version, | 266 | reply = m_LocalService.Login(first, last, passwd, start, scope, version, |
262 | channel, mac, id0, endPoint); | 267 | channel, mac, id0, endPoint,false); |
263 | sock.SendMessage(OSDParser.SerializeJsonString(reply.ToOSDMap())); | 268 | sock.SendMessage(OSDParser.SerializeJsonString(reply.ToOSDMap())); |
264 | 269 | ||
265 | } | 270 | } |
@@ -274,11 +279,11 @@ namespace OpenSim.Server.Handlers.Login | |||
274 | sock.Close("success"); | 279 | sock.Close("success"); |
275 | } | 280 | } |
276 | }; | 281 | }; |
277 | 282 | ||
278 | sock.HandshakeAndUpgrade(); | 283 | sock.HandshakeAndUpgrade(); |
279 | 284 | ||
280 | } | 285 | } |
281 | 286 | ||
282 | 287 | ||
283 | private XmlRpcResponse FailedXMLRPCResponse() | 288 | private XmlRpcResponse FailedXMLRPCResponse() |
284 | { | 289 | { |
diff --git a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs index f60e892..56ac3c2 100644 --- a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs +++ b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs | |||
@@ -98,7 +98,7 @@ namespace OpenSim.Server.Handlers.Login | |||
98 | m_DosProtectionOptions.ForgetTimeSpan = | 98 | m_DosProtectionOptions.ForgetTimeSpan = |
99 | TimeSpan.FromMilliseconds(serverConfig.GetInt("DOSForgiveClientAfterMS", 120000)); | 99 | TimeSpan.FromMilliseconds(serverConfig.GetInt("DOSForgiveClientAfterMS", 120000)); |
100 | m_DosProtectionOptions.ReportingName = "LOGINDOSPROTECTION"; | 100 | m_DosProtectionOptions.ReportingName = "LOGINDOSPROTECTION"; |
101 | 101 | ||
102 | 102 | ||
103 | return loginService; | 103 | return loginService; |
104 | } | 104 | } |
@@ -106,7 +106,7 @@ namespace OpenSim.Server.Handlers.Login | |||
106 | private void InitializeHandlers(IHttpServer server) | 106 | private void InitializeHandlers(IHttpServer server) |
107 | { | 107 | { |
108 | LLLoginHandlers loginHandlers = new LLLoginHandlers(m_LoginService, m_Proxy); | 108 | LLLoginHandlers loginHandlers = new LLLoginHandlers(m_LoginService, m_Proxy); |
109 | server.AddXmlRPCHandler("login_to_simulator", | 109 | server.AddXmlRPCHandler("login_to_simulator", |
110 | new XmlRpcBasicDOSProtector(loginHandlers.HandleXMLRPCLogin,loginHandlers.HandleXMLRPCLoginBlocked, | 110 | new XmlRpcBasicDOSProtector(loginHandlers.HandleXMLRPCLogin,loginHandlers.HandleXMLRPCLoginBlocked, |
111 | m_DosProtectionOptions).Process, false); | 111 | m_DosProtectionOptions).Process, false); |
112 | server.AddXmlRPCHandler("set_login_level", loginHandlers.HandleXMLRPCSetLoginLevel, false); | 112 | server.AddXmlRPCHandler("set_login_level", loginHandlers.HandleXMLRPCSetLoginLevel, false); |
diff --git a/OpenSim/Server/Handlers/Map/MapAddServerConnector.cs b/OpenSim/Server/Handlers/Map/MapAddServerConnector.cs index 649a27e..331dabf 100644 --- a/OpenSim/Server/Handlers/Map/MapAddServerConnector.cs +++ b/OpenSim/Server/Handlers/Map/MapAddServerConnector.cs | |||
@@ -104,9 +104,9 @@ namespace OpenSim.Server.Handlers.MapImage | |||
104 | protected override byte[] ProcessRequest(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 104 | protected override byte[] ProcessRequest(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
105 | { | 105 | { |
106 | // m_log.DebugFormat("[MAP SERVICE IMAGE HANDLER]: Received {0}", path); | 106 | // m_log.DebugFormat("[MAP SERVICE IMAGE HANDLER]: Received {0}", path); |
107 | StreamReader sr = new StreamReader(requestData); | 107 | string body; |
108 | string body = sr.ReadToEnd(); | 108 | using(StreamReader sr = new StreamReader(requestData)) |
109 | sr.Close(); | 109 | body = sr.ReadToEnd(); |
110 | body = body.Trim(); | 110 | body = body.Trim(); |
111 | 111 | ||
112 | try | 112 | try |
@@ -118,9 +118,13 @@ namespace OpenSim.Server.Handlers.MapImage | |||
118 | httpResponse.StatusCode = (int)OSHttpStatusCode.ClientErrorBadRequest; | 118 | httpResponse.StatusCode = (int)OSHttpStatusCode.ClientErrorBadRequest; |
119 | return FailureResult("Bad request."); | 119 | return FailureResult("Bad request."); |
120 | } | 120 | } |
121 | uint x = 0, y = 0; | 121 | int x = 0, y = 0; |
122 | UInt32.TryParse(request["X"].ToString(), out x); | 122 | // UUID scopeID = new UUID("07f8d88e-cd5e-4239-a0ed-843f75d09992"); |
123 | UInt32.TryParse(request["Y"].ToString(), out y); | 123 | UUID scopeID = UUID.Zero; |
124 | Int32.TryParse(request["X"].ToString(), out x); | ||
125 | Int32.TryParse(request["Y"].ToString(), out y); | ||
126 | if (request.ContainsKey("SCOPE")) | ||
127 | UUID.TryParse(request["SCOPE"].ToString(), out scopeID); | ||
124 | 128 | ||
125 | m_log.DebugFormat("[MAP ADD SERVER CONNECTOR]: Received map data for region at {0}-{1}", x, y); | 129 | m_log.DebugFormat("[MAP ADD SERVER CONNECTOR]: Received map data for region at {0}-{1}", x, y); |
126 | 130 | ||
@@ -132,7 +136,7 @@ namespace OpenSim.Server.Handlers.MapImage | |||
132 | if (m_GridService != null) | 136 | if (m_GridService != null) |
133 | { | 137 | { |
134 | System.Net.IPAddress ipAddr = GetCallerIP(httpRequest); | 138 | System.Net.IPAddress ipAddr = GetCallerIP(httpRequest); |
135 | GridRegion r = m_GridService.GetRegionByPosition(UUID.Zero, (int)Util.RegionToWorldLoc(x), (int)Util.RegionToWorldLoc(y)); | 139 | GridRegion r = m_GridService.GetRegionByPosition(UUID.Zero, (int)Util.RegionToWorldLoc((uint)x), (int)Util.RegionToWorldLoc((uint)y)); |
136 | if (r != null) | 140 | if (r != null) |
137 | { | 141 | { |
138 | if (r.ExternalEndPoint.Address.ToString() != ipAddr.ToString()) | 142 | if (r.ExternalEndPoint.Address.ToString() != ipAddr.ToString()) |
@@ -144,7 +148,7 @@ namespace OpenSim.Server.Handlers.MapImage | |||
144 | } | 148 | } |
145 | else | 149 | else |
146 | { | 150 | { |
147 | m_log.WarnFormat("[MAP IMAGE HANDLER]: IP address {0} may be rogue. Region not found at coordinates {1}-{2}", | 151 | m_log.WarnFormat("[MAP IMAGE HANDLER]: IP address {0} may be rogue. Region not found at coordinates {1}-{2}", |
148 | ipAddr, x, y); | 152 | ipAddr, x, y); |
149 | return FailureResult("Region not found at given coordinates"); | 153 | return FailureResult("Region not found at given coordinates"); |
150 | } | 154 | } |
@@ -153,7 +157,8 @@ namespace OpenSim.Server.Handlers.MapImage | |||
153 | byte[] data = Convert.FromBase64String(request["DATA"].ToString()); | 157 | byte[] data = Convert.FromBase64String(request["DATA"].ToString()); |
154 | 158 | ||
155 | string reason = string.Empty; | 159 | string reason = string.Empty; |
156 | bool result = m_MapService.AddMapTile((int)x, (int)y, data, out reason); | 160 | |
161 | bool result = m_MapService.AddMapTile((int)x, (int)y, data, scopeID, out reason); | ||
157 | 162 | ||
158 | if (result) | 163 | if (result) |
159 | return SuccessResult(); | 164 | return SuccessResult(); |
@@ -220,8 +225,8 @@ namespace OpenSim.Server.Handlers.MapImage | |||
220 | 225 | ||
221 | private System.Net.IPAddress GetCallerIP(IOSHttpRequest request) | 226 | private System.Net.IPAddress GetCallerIP(IOSHttpRequest request) |
222 | { | 227 | { |
223 | if (!m_Proxy) | 228 | // if (!m_Proxy) |
224 | return request.RemoteIPEndPoint.Address; | 229 | // return request.RemoteIPEndPoint.Address; |
225 | 230 | ||
226 | // We're behind a proxy | 231 | // We're behind a proxy |
227 | string xff = "X-Forwarded-For"; | 232 | string xff = "X-Forwarded-For"; |
@@ -231,7 +236,7 @@ namespace OpenSim.Server.Handlers.MapImage | |||
231 | 236 | ||
232 | if (xffValue == null || (xffValue != null && xffValue == string.Empty)) | 237 | if (xffValue == null || (xffValue != null && xffValue == string.Empty)) |
233 | { | 238 | { |
234 | m_log.WarnFormat("[MAP IMAGE HANDLER]: No XFF header"); | 239 | // m_log.WarnFormat("[MAP IMAGE HANDLER]: No XFF header"); |
235 | return request.RemoteIPEndPoint.Address; | 240 | return request.RemoteIPEndPoint.Address; |
236 | } | 241 | } |
237 | 242 | ||
diff --git a/OpenSim/Server/Handlers/Map/MapGetServerConnector.cs b/OpenSim/Server/Handlers/Map/MapGetServerConnector.cs index 7bb2f39..1ae669c 100644 --- a/OpenSim/Server/Handlers/Map/MapGetServerConnector.cs +++ b/OpenSim/Server/Handlers/Map/MapGetServerConnector.cs | |||
@@ -29,6 +29,7 @@ using System; | |||
29 | using System.IO; | 29 | using System.IO; |
30 | using System.Net; | 30 | using System.Net; |
31 | using System.Reflection; | 31 | using System.Reflection; |
32 | using System.Threading; | ||
32 | 33 | ||
33 | using Nini.Config; | 34 | using Nini.Config; |
34 | using log4net; | 35 | using log4net; |
@@ -37,6 +38,7 @@ using OpenSim.Server.Base; | |||
37 | using OpenSim.Services.Interfaces; | 38 | using OpenSim.Services.Interfaces; |
38 | using OpenSim.Framework.Servers.HttpServer; | 39 | using OpenSim.Framework.Servers.HttpServer; |
39 | using OpenSim.Server.Handlers.Base; | 40 | using OpenSim.Server.Handlers.Base; |
41 | using OpenMetaverse; | ||
40 | 42 | ||
41 | namespace OpenSim.Server.Handlers.MapImage | 43 | namespace OpenSim.Server.Handlers.MapImage |
42 | { | 44 | { |
@@ -70,6 +72,8 @@ namespace OpenSim.Server.Handlers.MapImage | |||
70 | 72 | ||
71 | class MapServerGetHandler : BaseStreamHandler | 73 | class MapServerGetHandler : BaseStreamHandler |
72 | { | 74 | { |
75 | public static ManualResetEvent ev = new ManualResetEvent(true); | ||
76 | |||
73 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 77 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
74 | 78 | ||
75 | private IMapImageService m_MapService; | 79 | private IMapImageService m_MapService; |
@@ -82,10 +86,25 @@ namespace OpenSim.Server.Handlers.MapImage | |||
82 | 86 | ||
83 | protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 87 | protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
84 | { | 88 | { |
85 | byte[] result = new byte[0]; | 89 | ev.WaitOne(); |
90 | lock (ev) | ||
91 | { | ||
92 | ev.Reset(); | ||
93 | } | ||
86 | 94 | ||
95 | byte[] result = new byte[0]; | ||
87 | string format = string.Empty; | 96 | string format = string.Empty; |
88 | result = m_MapService.GetMapTile(path.Trim('/'), out format); | 97 | |
98 | // UUID scopeID = new UUID("07f8d88e-cd5e-4239-a0ed-843f75d09992"); | ||
99 | UUID scopeID = UUID.Zero; | ||
100 | |||
101 | string[] bits = path.Trim('/').Split(new char[] {'/'}); | ||
102 | if (bits.Length > 1) | ||
103 | { | ||
104 | scopeID = new UUID(bits[0]); | ||
105 | path = bits[1]; | ||
106 | } | ||
107 | result = m_MapService.GetMapTile(path.Trim('/'), scopeID, out format); | ||
89 | if (result.Length > 0) | 108 | if (result.Length > 0) |
90 | { | 109 | { |
91 | httpResponse.StatusCode = (int)HttpStatusCode.OK; | 110 | httpResponse.StatusCode = (int)HttpStatusCode.OK; |
@@ -100,6 +119,11 @@ namespace OpenSim.Server.Handlers.MapImage | |||
100 | httpResponse.ContentType = "text/plain"; | 119 | httpResponse.ContentType = "text/plain"; |
101 | } | 120 | } |
102 | 121 | ||
122 | lock (ev) | ||
123 | { | ||
124 | ev.Set(); | ||
125 | } | ||
126 | |||
103 | return result; | 127 | return result; |
104 | } | 128 | } |
105 | 129 | ||
diff --git a/OpenSim/Server/Handlers/Map/MapRemoveServerConnector.cs b/OpenSim/Server/Handlers/Map/MapRemoveServerConnector.cs new file mode 100644 index 0000000..9daeb73 --- /dev/null +++ b/OpenSim/Server/Handlers/Map/MapRemoveServerConnector.cs | |||
@@ -0,0 +1,256 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Reflection; | ||
32 | using System.Xml; | ||
33 | |||
34 | using Nini.Config; | ||
35 | using log4net; | ||
36 | using OpenMetaverse; | ||
37 | |||
38 | using OpenSim.Framework; | ||
39 | using OpenSim.Server.Base; | ||
40 | using OpenSim.Services.Interfaces; | ||
41 | using OpenSim.Framework.Servers.HttpServer; | ||
42 | using OpenSim.Server.Handlers.Base; | ||
43 | |||
44 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
45 | |||
46 | namespace OpenSim.Server.Handlers.MapImage | ||
47 | { | ||
48 | public class MapRemoveServiceConnector : ServiceConnector | ||
49 | { | ||
50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
51 | |||
52 | private IMapImageService m_MapService; | ||
53 | private IGridService m_GridService; | ||
54 | private string m_ConfigName = "MapImageService"; | ||
55 | |||
56 | public MapRemoveServiceConnector(IConfigSource config, IHttpServer server, string configName) : | ||
57 | base(config, server, configName) | ||
58 | { | ||
59 | IConfig serverConfig = config.Configs[m_ConfigName]; | ||
60 | if (serverConfig == null) | ||
61 | throw new Exception(String.Format("No section {0} in config file", m_ConfigName)); | ||
62 | |||
63 | string mapService = serverConfig.GetString("LocalServiceModule", | ||
64 | String.Empty); | ||
65 | |||
66 | if (mapService == String.Empty) | ||
67 | throw new Exception("No LocalServiceModule in config file"); | ||
68 | |||
69 | Object[] args = new Object[] { config }; | ||
70 | m_MapService = ServerUtils.LoadPlugin<IMapImageService>(mapService, args); | ||
71 | |||
72 | string gridService = serverConfig.GetString("GridService", String.Empty); | ||
73 | if (gridService != string.Empty) | ||
74 | m_GridService = ServerUtils.LoadPlugin<IGridService>(gridService, args); | ||
75 | |||
76 | if (m_GridService != null) | ||
77 | m_log.InfoFormat("[MAP IMAGE HANDLER]: GridService check is ON"); | ||
78 | else | ||
79 | m_log.InfoFormat("[MAP IMAGE HANDLER]: GridService check is OFF"); | ||
80 | |||
81 | bool proxy = serverConfig.GetBoolean("HasProxy", false); | ||
82 | server.AddStreamHandler(new MapServerRemoveHandler(m_MapService, m_GridService, proxy)); | ||
83 | |||
84 | } | ||
85 | } | ||
86 | |||
87 | class MapServerRemoveHandler : BaseStreamHandler | ||
88 | { | ||
89 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
90 | private IMapImageService m_MapService; | ||
91 | private IGridService m_GridService; | ||
92 | bool m_Proxy; | ||
93 | |||
94 | public MapServerRemoveHandler(IMapImageService service, IGridService grid, bool proxy) : | ||
95 | base("POST", "/removemap") | ||
96 | { | ||
97 | m_MapService = service; | ||
98 | m_GridService = grid; | ||
99 | m_Proxy = proxy; | ||
100 | } | ||
101 | |||
102 | public override byte[] Handle(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | ||
103 | { | ||
104 | // m_log.DebugFormat("[MAP SERVICE IMAGE HANDLER]: Received {0}", path); | ||
105 | string body; | ||
106 | using(StreamReader sr = new StreamReader(requestData)) | ||
107 | body = sr.ReadToEnd(); | ||
108 | body = body.Trim(); | ||
109 | |||
110 | try | ||
111 | { | ||
112 | Dictionary<string, object> request = ServerUtils.ParseQueryString(body); | ||
113 | |||
114 | if (!request.ContainsKey("X") || !request.ContainsKey("Y")) | ||
115 | { | ||
116 | httpResponse.StatusCode = (int)OSHttpStatusCode.ClientErrorBadRequest; | ||
117 | return FailureResult("Bad request."); | ||
118 | } | ||
119 | int x = 0, y = 0; | ||
120 | Int32.TryParse(request["X"].ToString(), out x); | ||
121 | Int32.TryParse(request["Y"].ToString(), out y); | ||
122 | // UUID scopeID = new UUID("07f8d88e-cd5e-4239-a0ed-843f75d09992"); | ||
123 | UUID scopeID = UUID.Zero; | ||
124 | if (request.ContainsKey("SCOPE")) | ||
125 | UUID.TryParse(request["SCOPE"].ToString(), out scopeID); | ||
126 | |||
127 | m_log.DebugFormat("[MAP REMOVE SERVER CONNECTOR]: Received position data for region at {0}-{1}", x, y); | ||
128 | |||
129 | if (m_GridService != null) | ||
130 | { | ||
131 | System.Net.IPAddress ipAddr = GetCallerIP(httpRequest); | ||
132 | GridRegion r = m_GridService.GetRegionByPosition(UUID.Zero, (int)Util.RegionToWorldLoc((uint)x), (int)Util.RegionToWorldLoc((uint)y)); | ||
133 | if (r != null) | ||
134 | { | ||
135 | if (r.ExternalEndPoint.Address.ToString() != ipAddr.ToString()) | ||
136 | { | ||
137 | m_log.WarnFormat("[MAP IMAGE HANDLER]: IP address {0} may be trying to impersonate region in IP {1}", ipAddr, r.ExternalEndPoint.Address); | ||
138 | return FailureResult("IP address of caller does not match IP address of registered region"); | ||
139 | } | ||
140 | |||
141 | } | ||
142 | else | ||
143 | { | ||
144 | m_log.WarnFormat("[MAP IMAGE HANDLER]: IP address {0} may be rogue. Region not found at coordinates {1}-{2}", | ||
145 | ipAddr, x, y); | ||
146 | return FailureResult("Region not found at given coordinates"); | ||
147 | } | ||
148 | } | ||
149 | |||
150 | string reason = string.Empty; | ||
151 | bool result = m_MapService.RemoveMapTile(x, y, scopeID, out reason); | ||
152 | |||
153 | if (result) | ||
154 | return SuccessResult(); | ||
155 | else | ||
156 | return FailureResult(reason); | ||
157 | |||
158 | } | ||
159 | catch (Exception e) | ||
160 | { | ||
161 | m_log.ErrorFormat("[MAP SERVICE IMAGE HANDLER]: Exception {0} {1}", e.Message, e.StackTrace); | ||
162 | } | ||
163 | |||
164 | return FailureResult("Unexpected server error"); | ||
165 | } | ||
166 | |||
167 | private byte[] SuccessResult() | ||
168 | { | ||
169 | XmlDocument doc = new XmlDocument(); | ||
170 | |||
171 | XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, | ||
172 | "", ""); | ||
173 | |||
174 | doc.AppendChild(xmlnode); | ||
175 | |||
176 | XmlElement rootElement = doc.CreateElement("", "ServerResponse", | ||
177 | ""); | ||
178 | |||
179 | doc.AppendChild(rootElement); | ||
180 | |||
181 | XmlElement result = doc.CreateElement("", "Result", ""); | ||
182 | result.AppendChild(doc.CreateTextNode("Success")); | ||
183 | |||
184 | rootElement.AppendChild(result); | ||
185 | |||
186 | return DocToBytes(doc); | ||
187 | } | ||
188 | |||
189 | private byte[] FailureResult(string msg) | ||
190 | { | ||
191 | XmlDocument doc = new XmlDocument(); | ||
192 | |||
193 | XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, | ||
194 | "", ""); | ||
195 | |||
196 | doc.AppendChild(xmlnode); | ||
197 | |||
198 | XmlElement rootElement = doc.CreateElement("", "ServerResponse", | ||
199 | ""); | ||
200 | |||
201 | doc.AppendChild(rootElement); | ||
202 | |||
203 | XmlElement result = doc.CreateElement("", "Result", ""); | ||
204 | result.AppendChild(doc.CreateTextNode("Failure")); | ||
205 | |||
206 | rootElement.AppendChild(result); | ||
207 | |||
208 | XmlElement message = doc.CreateElement("", "Message", ""); | ||
209 | message.AppendChild(doc.CreateTextNode(msg)); | ||
210 | |||
211 | rootElement.AppendChild(message); | ||
212 | |||
213 | return DocToBytes(doc); | ||
214 | } | ||
215 | |||
216 | private byte[] DocToBytes(XmlDocument doc) | ||
217 | { | ||
218 | using(MemoryStream ms = new MemoryStream()) | ||
219 | { | ||
220 | using(XmlTextWriter xw = new XmlTextWriter(ms,null)) | ||
221 | { | ||
222 | xw.Formatting = Formatting.Indented; | ||
223 | doc.WriteTo(xw); | ||
224 | xw.Flush(); | ||
225 | } | ||
226 | return ms.ToArray(); | ||
227 | } | ||
228 | } | ||
229 | |||
230 | private System.Net.IPAddress GetCallerIP(IOSHttpRequest request) | ||
231 | { | ||
232 | // if (!m_Proxy) | ||
233 | // return request.RemoteIPEndPoint.Address; | ||
234 | |||
235 | // We're behind a proxy | ||
236 | string xff = "X-Forwarded-For"; | ||
237 | string xffValue = request.Headers[xff.ToLower()]; | ||
238 | if (xffValue == null || (xffValue != null && xffValue == string.Empty)) | ||
239 | xffValue = request.Headers[xff]; | ||
240 | |||
241 | if (xffValue == null || (xffValue != null && xffValue == string.Empty)) | ||
242 | { | ||
243 | // m_log.WarnFormat("[MAP IMAGE HANDLER]: No XFF header"); | ||
244 | return request.RemoteIPEndPoint.Address; | ||
245 | } | ||
246 | |||
247 | System.Net.IPEndPoint ep = Util.GetClientIPFromXFF(xffValue); | ||
248 | if (ep != null) | ||
249 | return ep.Address; | ||
250 | |||
251 | // Oops | ||
252 | return request.RemoteIPEndPoint.Address; | ||
253 | } | ||
254 | |||
255 | } | ||
256 | } | ||
diff --git a/OpenSim/Server/Handlers/MuteList/MuteListServerConnector.cs b/OpenSim/Server/Handlers/MuteList/MuteListServerConnector.cs new file mode 100644 index 0000000..8d27f07 --- /dev/null +++ b/OpenSim/Server/Handlers/MuteList/MuteListServerConnector.cs | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using Nini.Config; | ||
30 | using OpenSim.Server.Base; | ||
31 | using OpenSim.Services.Interfaces; | ||
32 | using OpenSim.Framework.ServiceAuth; | ||
33 | using OpenSim.Framework.Servers.HttpServer; | ||
34 | using OpenSim.Server.Handlers.Base; | ||
35 | |||
36 | namespace OpenSim.Server.Handlers.GridUser | ||
37 | { | ||
38 | public class MuteListServiceConnector : ServiceConnector | ||
39 | { | ||
40 | private IMuteListService m_MuteListService; | ||
41 | private string m_ConfigName = "MuteListService"; | ||
42 | |||
43 | public MuteListServiceConnector(IConfigSource config, IHttpServer server, string configName) : | ||
44 | base(config, server, configName) | ||
45 | { | ||
46 | IConfig serverConfig = config.Configs[m_ConfigName]; | ||
47 | if (serverConfig == null) | ||
48 | throw new Exception(String.Format("No section {0} in config file", m_ConfigName)); | ||
49 | |||
50 | string service = serverConfig.GetString("LocalServiceModule", String.Empty); | ||
51 | |||
52 | if (service == String.Empty) | ||
53 | throw new Exception("LocalServiceModule not present in MuteListService config file MuteListService section"); | ||
54 | |||
55 | Object[] args = new Object[] { config }; | ||
56 | m_MuteListService = ServerUtils.LoadPlugin<IMuteListService>(service, args); | ||
57 | |||
58 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); | ||
59 | |||
60 | server.AddStreamHandler(new MuteListServerPostHandler(m_MuteListService, auth)); | ||
61 | } | ||
62 | } | ||
63 | } | ||
diff --git a/OpenSim/Server/Handlers/MuteList/MuteListServerPostHandler.cs b/OpenSim/Server/Handlers/MuteList/MuteListServerPostHandler.cs new file mode 100644 index 0000000..26c4093 --- /dev/null +++ b/OpenSim/Server/Handlers/MuteList/MuteListServerPostHandler.cs | |||
@@ -0,0 +1,240 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using Nini.Config; | ||
29 | using log4net; | ||
30 | using System; | ||
31 | using System.Reflection; | ||
32 | using System.IO; | ||
33 | using System.Net; | ||
34 | using System.Text; | ||
35 | using System.Text.RegularExpressions; | ||
36 | using System.Xml; | ||
37 | using System.Xml.Serialization; | ||
38 | using System.Collections.Generic; | ||
39 | using OpenSim.Server.Base; | ||
40 | using OpenSim.Services.Interfaces; | ||
41 | using OpenSim.Framework; | ||
42 | using OpenSim.Framework.ServiceAuth; | ||
43 | using OpenSim.Framework.Servers.HttpServer; | ||
44 | using OpenMetaverse; | ||
45 | |||
46 | namespace OpenSim.Server.Handlers.GridUser | ||
47 | { | ||
48 | public class MuteListServerPostHandler : BaseStreamHandler | ||
49 | { | ||
50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
51 | |||
52 | private IMuteListService m_service; | ||
53 | |||
54 | public MuteListServerPostHandler(IMuteListService service, IServiceAuth auth) : | ||
55 | base("POST", "/mutelist", auth) | ||
56 | { | ||
57 | m_service = service; | ||
58 | } | ||
59 | |||
60 | protected override byte[] ProcessRequest(string path, Stream requestData, | ||
61 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | ||
62 | { | ||
63 | string body; | ||
64 | using(StreamReader sr = new StreamReader(requestData)) | ||
65 | body = sr.ReadToEnd(); | ||
66 | body = body.Trim(); | ||
67 | |||
68 | //m_log.DebugFormat("[XXX]: query String: {0}", body); | ||
69 | string method = string.Empty; | ||
70 | |||
71 | try | ||
72 | { | ||
73 | Dictionary<string, object> request = | ||
74 | ServerUtils.ParseQueryString(body); | ||
75 | |||
76 | if (!request.ContainsKey("METHOD")) | ||
77 | return FailureResult(); | ||
78 | |||
79 | method = request["METHOD"].ToString(); | ||
80 | |||
81 | switch (method) | ||
82 | { | ||
83 | case "get": | ||
84 | return getmutes(request); | ||
85 | case "update": | ||
86 | return updatemute(request); | ||
87 | case "delete": | ||
88 | return deletemute(request); | ||
89 | } | ||
90 | m_log.DebugFormat("[MUTELIST HANDLER]: unknown method request: {0}", method); | ||
91 | } | ||
92 | catch (Exception e) | ||
93 | { | ||
94 | m_log.DebugFormat("[MUTELIST HANDLER]: Exception in method {0}: {1}", method, e); | ||
95 | } | ||
96 | |||
97 | return FailureResult(); | ||
98 | } | ||
99 | |||
100 | byte[] getmutes(Dictionary<string, object> request) | ||
101 | { | ||
102 | if(!request.ContainsKey("agentid") || !request.ContainsKey("mutecrc")) | ||
103 | return FailureResult(); | ||
104 | |||
105 | UUID agentID; | ||
106 | if(!UUID.TryParse(request["agentid"].ToString(), out agentID)) | ||
107 | return FailureResult(); | ||
108 | |||
109 | uint mutecrc; | ||
110 | if(!UInt32.TryParse(request["mutecrc"].ToString(), out mutecrc)) | ||
111 | return FailureResult(); | ||
112 | |||
113 | byte[] data = m_service.MuteListRequest(agentID, mutecrc); | ||
114 | |||
115 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
116 | result["result"] = Convert.ToBase64String(data); | ||
117 | |||
118 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
119 | |||
120 | //m_log.DebugFormat("[GRID USER HANDLER]: resp string: {0}", xmlString); | ||
121 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | ||
122 | } | ||
123 | |||
124 | byte[] updatemute(Dictionary<string, object> request) | ||
125 | { | ||
126 | if(!request.ContainsKey("agentid") || !request.ContainsKey("muteid")) | ||
127 | return FailureResult(); | ||
128 | |||
129 | MuteData mute = new MuteData(); | ||
130 | |||
131 | if( !UUID.TryParse(request["agentid"].ToString(), out mute.AgentID)) | ||
132 | return FailureResult(); | ||
133 | |||
134 | if(!UUID.TryParse(request["muteid"].ToString(), out mute.MuteID)) | ||
135 | return FailureResult(); | ||
136 | |||
137 | if(request.ContainsKey("mutename")) | ||
138 | { | ||
139 | mute.MuteName = request["mutename"].ToString(); | ||
140 | } | ||
141 | else | ||
142 | mute.MuteName = String.Empty; | ||
143 | |||
144 | if(request.ContainsKey("mutetype")) | ||
145 | { | ||
146 | if(!Int32.TryParse(request["mutetype"].ToString(), out mute.MuteType)) | ||
147 | return FailureResult(); | ||
148 | } | ||
149 | else | ||
150 | mute.MuteType = 0; | ||
151 | |||
152 | if(request.ContainsKey("muteflags")) | ||
153 | { | ||
154 | if(!Int32.TryParse(request["muteflags"].ToString(), out mute.MuteFlags)) | ||
155 | return FailureResult(); | ||
156 | } | ||
157 | else | ||
158 | mute.MuteFlags = 0; | ||
159 | |||
160 | if(request.ContainsKey("mutestamp")) | ||
161 | { | ||
162 | if(!Int32.TryParse(request["mutestamp"].ToString(), out mute.Stamp)) | ||
163 | return FailureResult(); | ||
164 | } | ||
165 | else | ||
166 | mute.Stamp = Util.UnixTimeSinceEpoch(); | ||
167 | |||
168 | return m_service.UpdateMute(mute) ? SuccessResult() : FailureResult(); | ||
169 | } | ||
170 | |||
171 | byte[] deletemute(Dictionary<string, object> request) | ||
172 | { | ||
173 | if(!request.ContainsKey("agentid") || !request.ContainsKey("muteid")) | ||
174 | return FailureResult(); | ||
175 | |||
176 | UUID agentID; | ||
177 | if( !UUID.TryParse(request["agentid"].ToString(), out agentID)) | ||
178 | return FailureResult(); | ||
179 | |||
180 | UUID muteID; | ||
181 | if(!UUID.TryParse(request["muteid"].ToString(), out muteID)) | ||
182 | return FailureResult(); | ||
183 | |||
184 | string muteName; | ||
185 | if(request.ContainsKey("mutename")) | ||
186 | { | ||
187 | muteName = request["mutename"].ToString(); | ||
188 | |||
189 | } | ||
190 | else | ||
191 | muteName = String.Empty; | ||
192 | |||
193 | return m_service.RemoveMute(agentID, muteID, muteName) ? SuccessResult() : FailureResult(); | ||
194 | } | ||
195 | |||
196 | private byte[] SuccessResult() | ||
197 | { | ||
198 | XmlDocument doc = new XmlDocument(); | ||
199 | |||
200 | XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, | ||
201 | "", ""); | ||
202 | |||
203 | doc.AppendChild(xmlnode); | ||
204 | |||
205 | XmlElement rootElement = doc.CreateElement("", "ServerResponse", | ||
206 | ""); | ||
207 | |||
208 | doc.AppendChild(rootElement); | ||
209 | |||
210 | XmlElement result = doc.CreateElement("", "result", ""); | ||
211 | result.AppendChild(doc.CreateTextNode("Success")); | ||
212 | |||
213 | rootElement.AppendChild(result); | ||
214 | |||
215 | return Util.DocToBytes(doc); | ||
216 | } | ||
217 | |||
218 | private byte[] FailureResult() | ||
219 | { | ||
220 | XmlDocument doc = new XmlDocument(); | ||
221 | |||
222 | XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, | ||
223 | "", ""); | ||
224 | |||
225 | doc.AppendChild(xmlnode); | ||
226 | |||
227 | XmlElement rootElement = doc.CreateElement("", "ServerResponse", | ||
228 | ""); | ||
229 | |||
230 | doc.AppendChild(rootElement); | ||
231 | |||
232 | XmlElement result = doc.CreateElement("", "result", ""); | ||
233 | result.AppendChild(doc.CreateTextNode("Failure")); | ||
234 | |||
235 | rootElement.AppendChild(result); | ||
236 | |||
237 | return Util.DocToBytes(doc); | ||
238 | } | ||
239 | } | ||
240 | } | ||
diff --git a/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs index 3525a01..e3ee467 100644 --- a/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs +++ b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs | |||
@@ -150,7 +150,7 @@ namespace OpenSim.Server.Handlers.Neighbour | |||
150 | 150 | ||
151 | // Finally! | 151 | // Finally! |
152 | GridRegion thisRegion = m_NeighbourService.HelloNeighbour(regionhandle, aRegion); | 152 | GridRegion thisRegion = m_NeighbourService.HelloNeighbour(regionhandle, aRegion); |
153 | 153 | ||
154 | OSDMap resp = new OSDMap(1); | 154 | OSDMap resp = new OSDMap(1); |
155 | 155 | ||
156 | if (thisRegion != null) | 156 | if (thisRegion != null) |
diff --git a/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs b/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs index ac2e75f..65ac4e6 100644 --- a/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs +++ b/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs | |||
@@ -55,7 +55,7 @@ namespace OpenSim.Server.Handlers.Neighbour | |||
55 | m_log.Error("[NEIGHBOUR IN CONNECTOR]: neighbour service was not provided"); | 55 | m_log.Error("[NEIGHBOUR IN CONNECTOR]: neighbour service was not provided"); |
56 | return; | 56 | return; |
57 | } | 57 | } |
58 | 58 | ||
59 | //bool authentication = neighbourConfig.GetBoolean("RequireAuthentication", false); | 59 | //bool authentication = neighbourConfig.GetBoolean("RequireAuthentication", false); |
60 | //if (authentication) | 60 | //if (authentication) |
61 | // m_AuthenticationService = scene.RequestModuleInterface<IAuthenticationService>(); | 61 | // m_AuthenticationService = scene.RequestModuleInterface<IAuthenticationService>(); |
diff --git a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs index 49dbcb5..be16e17 100644 --- a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs | |||
@@ -158,7 +158,7 @@ namespace OpenSim.Server.Handlers.Presence | |||
158 | 158 | ||
159 | return FailureResult(); | 159 | return FailureResult(); |
160 | } | 160 | } |
161 | 161 | ||
162 | byte[] Report(Dictionary<string, object> request) | 162 | byte[] Report(Dictionary<string, object> request) |
163 | { | 163 | { |
164 | UUID session = UUID.Zero; | 164 | UUID session = UUID.Zero; |
@@ -241,7 +241,7 @@ namespace OpenSim.Server.Handlers.Presence | |||
241 | } | 241 | } |
242 | 242 | ||
243 | string xmlString = ServerUtils.BuildXmlResponse(result); | 243 | string xmlString = ServerUtils.BuildXmlResponse(result); |
244 | 244 | ||
245 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | 245 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); |
246 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 246 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
247 | } | 247 | } |
diff --git a/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs b/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs index 2dfb862..eecb370 100644 --- a/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs +++ b/OpenSim/Server/Handlers/Profiles/UserProfilesConnector.cs | |||
@@ -39,8 +39,8 @@ namespace OpenSim.Server.Handlers.Profiles | |||
39 | { | 39 | { |
40 | public class UserProfilesConnector: ServiceConnector | 40 | public class UserProfilesConnector: ServiceConnector |
41 | { | 41 | { |
42 | // static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 42 | // static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
43 | 43 | ||
44 | // Our Local Module | 44 | // Our Local Module |
45 | public IUserProfilesService ServiceModule | 45 | public IUserProfilesService ServiceModule |
46 | { | 46 | { |
@@ -83,7 +83,7 @@ namespace OpenSim.Server.Handlers.Profiles | |||
83 | 83 | ||
84 | Object[] args = new Object[] { config, ConfigName }; | 84 | Object[] args = new Object[] { config, ConfigName }; |
85 | ServiceModule = ServerUtils.LoadPlugin<IUserProfilesService>(service, args); | 85 | ServiceModule = ServerUtils.LoadPlugin<IUserProfilesService>(service, args); |
86 | 86 | ||
87 | JsonRpcProfileHandlers handler = new JsonRpcProfileHandlers(ServiceModule); | 87 | JsonRpcProfileHandlers handler = new JsonRpcProfileHandlers(ServiceModule); |
88 | 88 | ||
89 | Server.AddJsonRPCHandler("avatarclassifiedsrequest", handler.AvatarClassifiedsRequest); | 89 | Server.AddJsonRPCHandler("avatarclassifiedsrequest", handler.AvatarClassifiedsRequest); |
diff --git a/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs index 49aa8ba..f23a981 100644 --- a/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs +++ b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs | |||
@@ -48,17 +48,17 @@ namespace OpenSim.Server.Handlers | |||
48 | static readonly ILog m_log = | 48 | static readonly ILog m_log = |
49 | LogManager.GetLogger( | 49 | LogManager.GetLogger( |
50 | MethodBase.GetCurrentMethod().DeclaringType); | 50 | MethodBase.GetCurrentMethod().DeclaringType); |
51 | 51 | ||
52 | public IUserProfilesService Service | 52 | public IUserProfilesService Service |
53 | { | 53 | { |
54 | get; private set; | 54 | get; private set; |
55 | } | 55 | } |
56 | 56 | ||
57 | public JsonRpcProfileHandlers(IUserProfilesService service) | 57 | public JsonRpcProfileHandlers(IUserProfilesService service) |
58 | { | 58 | { |
59 | Service = service; | 59 | Service = service; |
60 | } | 60 | } |
61 | 61 | ||
62 | #region Classifieds | 62 | #region Classifieds |
63 | /// <summary> | 63 | /// <summary> |
64 | /// Request avatar's classified ads. | 64 | /// Request avatar's classified ads. |
@@ -80,17 +80,17 @@ namespace OpenSim.Server.Handlers | |||
80 | m_log.DebugFormat ("Classified Request"); | 80 | m_log.DebugFormat ("Classified Request"); |
81 | return false; | 81 | return false; |
82 | } | 82 | } |
83 | 83 | ||
84 | OSDMap request = (OSDMap)json["params"]; | 84 | OSDMap request = (OSDMap)json["params"]; |
85 | UUID creatorId = new UUID(request["creatorId"].AsString()); | 85 | UUID creatorId = new UUID(request["creatorId"].AsString()); |
86 | 86 | ||
87 | 87 | ||
88 | OSDArray data = (OSDArray) Service.AvatarClassifiedsRequest(creatorId); | 88 | OSDArray data = (OSDArray) Service.AvatarClassifiedsRequest(creatorId); |
89 | response.Result = data; | 89 | response.Result = data; |
90 | 90 | ||
91 | return true; | 91 | return true; |
92 | } | 92 | } |
93 | 93 | ||
94 | public bool ClassifiedUpdate(OSDMap json, ref JsonRpcResponse response) | 94 | public bool ClassifiedUpdate(OSDMap json, ref JsonRpcResponse response) |
95 | { | 95 | { |
96 | if(!json.ContainsKey("params")) | 96 | if(!json.ContainsKey("params")) |
@@ -100,7 +100,7 @@ namespace OpenSim.Server.Handlers | |||
100 | m_log.DebugFormat ("Classified Update Request"); | 100 | m_log.DebugFormat ("Classified Update Request"); |
101 | return false; | 101 | return false; |
102 | } | 102 | } |
103 | 103 | ||
104 | string result = string.Empty; | 104 | string result = string.Empty; |
105 | UserClassifiedAdd ad = new UserClassifiedAdd(); | 105 | UserClassifiedAdd ad = new UserClassifiedAdd(); |
106 | object Ad = (object)ad; | 106 | object Ad = (object)ad; |
@@ -110,12 +110,12 @@ namespace OpenSim.Server.Handlers | |||
110 | response.Result = OSD.SerializeMembers(ad); | 110 | response.Result = OSD.SerializeMembers(ad); |
111 | return true; | 111 | return true; |
112 | } | 112 | } |
113 | 113 | ||
114 | response.Error.Code = ErrorCode.InternalError; | 114 | response.Error.Code = ErrorCode.InternalError; |
115 | response.Error.Message = string.Format("{0}", result); | 115 | response.Error.Message = string.Format("{0}", result); |
116 | return false; | 116 | return false; |
117 | } | 117 | } |
118 | 118 | ||
119 | public bool ClassifiedDelete(OSDMap json, ref JsonRpcResponse response) | 119 | public bool ClassifiedDelete(OSDMap json, ref JsonRpcResponse response) |
120 | { | 120 | { |
121 | if(!json.ContainsKey("params")) | 121 | if(!json.ContainsKey("params")) |
@@ -124,10 +124,10 @@ namespace OpenSim.Server.Handlers | |||
124 | m_log.DebugFormat ("Classified Delete Request"); | 124 | m_log.DebugFormat ("Classified Delete Request"); |
125 | return false; | 125 | return false; |
126 | } | 126 | } |
127 | 127 | ||
128 | OSDMap request = (OSDMap)json["params"]; | 128 | OSDMap request = (OSDMap)json["params"]; |
129 | UUID classifiedId = new UUID(request["classifiedId"].AsString()); | 129 | UUID classifiedId = new UUID(request["classifiedId"].AsString()); |
130 | 130 | ||
131 | if (Service.ClassifiedDelete(classifiedId)) | 131 | if (Service.ClassifiedDelete(classifiedId)) |
132 | return true; | 132 | return true; |
133 | 133 | ||
@@ -135,7 +135,7 @@ namespace OpenSim.Server.Handlers | |||
135 | response.Error.Message = "data error removing record"; | 135 | response.Error.Message = "data error removing record"; |
136 | return false; | 136 | return false; |
137 | } | 137 | } |
138 | 138 | ||
139 | public bool ClassifiedInfoRequest(OSDMap json, ref JsonRpcResponse response) | 139 | public bool ClassifiedInfoRequest(OSDMap json, ref JsonRpcResponse response) |
140 | { | 140 | { |
141 | if(!json.ContainsKey("params")) | 141 | if(!json.ContainsKey("params")) |
@@ -145,7 +145,7 @@ namespace OpenSim.Server.Handlers | |||
145 | m_log.DebugFormat ("Classified Info Request"); | 145 | m_log.DebugFormat ("Classified Info Request"); |
146 | return false; | 146 | return false; |
147 | } | 147 | } |
148 | 148 | ||
149 | string result = string.Empty; | 149 | string result = string.Empty; |
150 | UserClassifiedAdd ad = new UserClassifiedAdd(); | 150 | UserClassifiedAdd ad = new UserClassifiedAdd(); |
151 | object Ad = (object)ad; | 151 | object Ad = (object)ad; |
@@ -155,13 +155,13 @@ namespace OpenSim.Server.Handlers | |||
155 | response.Result = OSD.SerializeMembers(ad); | 155 | response.Result = OSD.SerializeMembers(ad); |
156 | return true; | 156 | return true; |
157 | } | 157 | } |
158 | 158 | ||
159 | response.Error.Code = ErrorCode.InternalError; | 159 | response.Error.Code = ErrorCode.InternalError; |
160 | response.Error.Message = string.Format("{0}", result); | 160 | response.Error.Message = string.Format("{0}", result); |
161 | return false; | 161 | return false; |
162 | } | 162 | } |
163 | #endregion Classifieds | 163 | #endregion Classifieds |
164 | 164 | ||
165 | #region Picks | 165 | #region Picks |
166 | public bool AvatarPicksRequest(OSDMap json, ref JsonRpcResponse response) | 166 | public bool AvatarPicksRequest(OSDMap json, ref JsonRpcResponse response) |
167 | { | 167 | { |
@@ -171,17 +171,17 @@ namespace OpenSim.Server.Handlers | |||
171 | m_log.DebugFormat ("Avatar Picks Request"); | 171 | m_log.DebugFormat ("Avatar Picks Request"); |
172 | return false; | 172 | return false; |
173 | } | 173 | } |
174 | 174 | ||
175 | OSDMap request = (OSDMap)json["params"]; | 175 | OSDMap request = (OSDMap)json["params"]; |
176 | UUID creatorId = new UUID(request["creatorId"].AsString()); | 176 | UUID creatorId = new UUID(request["creatorId"].AsString()); |
177 | 177 | ||
178 | 178 | ||
179 | OSDArray data = (OSDArray) Service.AvatarPicksRequest(creatorId); | 179 | OSDArray data = (OSDArray) Service.AvatarPicksRequest(creatorId); |
180 | response.Result = data; | 180 | response.Result = data; |
181 | 181 | ||
182 | return true; | 182 | return true; |
183 | } | 183 | } |
184 | 184 | ||
185 | public bool PickInfoRequest(OSDMap json, ref JsonRpcResponse response) | 185 | public bool PickInfoRequest(OSDMap json, ref JsonRpcResponse response) |
186 | { | 186 | { |
187 | if(!json.ContainsKey("params")) | 187 | if(!json.ContainsKey("params")) |
@@ -191,7 +191,7 @@ namespace OpenSim.Server.Handlers | |||
191 | m_log.DebugFormat ("Avatar Picks Info Request"); | 191 | m_log.DebugFormat ("Avatar Picks Info Request"); |
192 | return false; | 192 | return false; |
193 | } | 193 | } |
194 | 194 | ||
195 | string result = string.Empty; | 195 | string result = string.Empty; |
196 | UserProfilePick pick = new UserProfilePick(); | 196 | UserProfilePick pick = new UserProfilePick(); |
197 | object Pick = (object)pick; | 197 | object Pick = (object)pick; |
@@ -201,12 +201,12 @@ namespace OpenSim.Server.Handlers | |||
201 | response.Result = OSD.SerializeMembers(pick); | 201 | response.Result = OSD.SerializeMembers(pick); |
202 | return true; | 202 | return true; |
203 | } | 203 | } |
204 | 204 | ||
205 | response.Error.Code = ErrorCode.InternalError; | 205 | response.Error.Code = ErrorCode.InternalError; |
206 | response.Error.Message = string.Format("{0}", result); | 206 | response.Error.Message = string.Format("{0}", result); |
207 | return false; | 207 | return false; |
208 | } | 208 | } |
209 | 209 | ||
210 | public bool PicksUpdate(OSDMap json, ref JsonRpcResponse response) | 210 | public bool PicksUpdate(OSDMap json, ref JsonRpcResponse response) |
211 | { | 211 | { |
212 | if(!json.ContainsKey("params")) | 212 | if(!json.ContainsKey("params")) |
@@ -216,7 +216,7 @@ namespace OpenSim.Server.Handlers | |||
216 | m_log.DebugFormat ("Avatar Picks Update Request"); | 216 | m_log.DebugFormat ("Avatar Picks Update Request"); |
217 | return false; | 217 | return false; |
218 | } | 218 | } |
219 | 219 | ||
220 | string result = string.Empty; | 220 | string result = string.Empty; |
221 | UserProfilePick pick = new UserProfilePick(); | 221 | UserProfilePick pick = new UserProfilePick(); |
222 | object Pick = (object)pick; | 222 | object Pick = (object)pick; |
@@ -226,13 +226,13 @@ namespace OpenSim.Server.Handlers | |||
226 | response.Result = OSD.SerializeMembers(pick); | 226 | response.Result = OSD.SerializeMembers(pick); |
227 | return true; | 227 | return true; |
228 | } | 228 | } |
229 | 229 | ||
230 | response.Error.Code = ErrorCode.InternalError; | 230 | response.Error.Code = ErrorCode.InternalError; |
231 | response.Error.Message = "unable to update pick"; | 231 | response.Error.Message = "unable to update pick"; |
232 | 232 | ||
233 | return false; | 233 | return false; |
234 | } | 234 | } |
235 | 235 | ||
236 | public bool PicksDelete(OSDMap json, ref JsonRpcResponse response) | 236 | public bool PicksDelete(OSDMap json, ref JsonRpcResponse response) |
237 | { | 237 | { |
238 | if(!json.ContainsKey("params")) | 238 | if(!json.ContainsKey("params")) |
@@ -241,18 +241,18 @@ namespace OpenSim.Server.Handlers | |||
241 | m_log.DebugFormat ("Avatar Picks Delete Request"); | 241 | m_log.DebugFormat ("Avatar Picks Delete Request"); |
242 | return false; | 242 | return false; |
243 | } | 243 | } |
244 | 244 | ||
245 | OSDMap request = (OSDMap)json["params"]; | 245 | OSDMap request = (OSDMap)json["params"]; |
246 | UUID pickId = new UUID(request["pickId"].AsString()); | 246 | UUID pickId = new UUID(request["pickId"].AsString()); |
247 | if(Service.PicksDelete(pickId)) | 247 | if(Service.PicksDelete(pickId)) |
248 | return true; | 248 | return true; |
249 | 249 | ||
250 | response.Error.Code = ErrorCode.InternalError; | 250 | response.Error.Code = ErrorCode.InternalError; |
251 | response.Error.Message = "data error removing record"; | 251 | response.Error.Message = "data error removing record"; |
252 | return false; | 252 | return false; |
253 | } | 253 | } |
254 | #endregion Picks | 254 | #endregion Picks |
255 | 255 | ||
256 | #region Notes | 256 | #region Notes |
257 | public bool AvatarNotesRequest(OSDMap json, ref JsonRpcResponse response) | 257 | public bool AvatarNotesRequest(OSDMap json, ref JsonRpcResponse response) |
258 | { | 258 | { |
@@ -277,7 +277,7 @@ namespace OpenSim.Server.Handlers | |||
277 | response.Error.Message = "Error reading notes"; | 277 | response.Error.Message = "Error reading notes"; |
278 | return false; | 278 | return false; |
279 | } | 279 | } |
280 | 280 | ||
281 | public bool NotesUpdate(OSDMap json, ref JsonRpcResponse response) | 281 | public bool NotesUpdate(OSDMap json, ref JsonRpcResponse response) |
282 | { | 282 | { |
283 | if(!json.ContainsKey("params")) | 283 | if(!json.ContainsKey("params")) |
@@ -287,7 +287,7 @@ namespace OpenSim.Server.Handlers | |||
287 | m_log.DebugFormat ("Avatar Notes Update Request"); | 287 | m_log.DebugFormat ("Avatar Notes Update Request"); |
288 | return false; | 288 | return false; |
289 | } | 289 | } |
290 | 290 | ||
291 | string result = string.Empty; | 291 | string result = string.Empty; |
292 | UserProfileNotes note = new UserProfileNotes(); | 292 | UserProfileNotes note = new UserProfileNotes(); |
293 | object Notes = (object) note; | 293 | object Notes = (object) note; |
@@ -300,7 +300,7 @@ namespace OpenSim.Server.Handlers | |||
300 | return true; | 300 | return true; |
301 | } | 301 | } |
302 | #endregion Notes | 302 | #endregion Notes |
303 | 303 | ||
304 | #region Profile Properties | 304 | #region Profile Properties |
305 | public bool AvatarPropertiesRequest(OSDMap json, ref JsonRpcResponse response) | 305 | public bool AvatarPropertiesRequest(OSDMap json, ref JsonRpcResponse response) |
306 | { | 306 | { |
@@ -311,7 +311,7 @@ namespace OpenSim.Server.Handlers | |||
311 | m_log.DebugFormat ("Avatar Properties Request"); | 311 | m_log.DebugFormat ("Avatar Properties Request"); |
312 | return false; | 312 | return false; |
313 | } | 313 | } |
314 | 314 | ||
315 | string result = string.Empty; | 315 | string result = string.Empty; |
316 | UserProfileProperties props = new UserProfileProperties(); | 316 | UserProfileProperties props = new UserProfileProperties(); |
317 | object Props = (object)props; | 317 | object Props = (object)props; |
@@ -321,12 +321,12 @@ namespace OpenSim.Server.Handlers | |||
321 | response.Result = OSD.SerializeMembers(props); | 321 | response.Result = OSD.SerializeMembers(props); |
322 | return true; | 322 | return true; |
323 | } | 323 | } |
324 | 324 | ||
325 | response.Error.Code = ErrorCode.InternalError; | 325 | response.Error.Code = ErrorCode.InternalError; |
326 | response.Error.Message = string.Format("{0}", result); | 326 | response.Error.Message = string.Format("{0}", result); |
327 | return false; | 327 | return false; |
328 | } | 328 | } |
329 | 329 | ||
330 | public bool AvatarPropertiesUpdate(OSDMap json, ref JsonRpcResponse response) | 330 | public bool AvatarPropertiesUpdate(OSDMap json, ref JsonRpcResponse response) |
331 | { | 331 | { |
332 | if(!json.ContainsKey("params")) | 332 | if(!json.ContainsKey("params")) |
@@ -336,7 +336,7 @@ namespace OpenSim.Server.Handlers | |||
336 | m_log.DebugFormat ("Avatar Properties Update Request"); | 336 | m_log.DebugFormat ("Avatar Properties Update Request"); |
337 | return false; | 337 | return false; |
338 | } | 338 | } |
339 | 339 | ||
340 | string result = string.Empty; | 340 | string result = string.Empty; |
341 | UserProfileProperties props = new UserProfileProperties(); | 341 | UserProfileProperties props = new UserProfileProperties(); |
342 | object Props = (object)props; | 342 | object Props = (object)props; |
@@ -346,13 +346,13 @@ namespace OpenSim.Server.Handlers | |||
346 | response.Result = OSD.SerializeMembers(props); | 346 | response.Result = OSD.SerializeMembers(props); |
347 | return true; | 347 | return true; |
348 | } | 348 | } |
349 | 349 | ||
350 | response.Error.Code = ErrorCode.InternalError; | 350 | response.Error.Code = ErrorCode.InternalError; |
351 | response.Error.Message = string.Format("{0}", result); | 351 | response.Error.Message = string.Format("{0}", result); |
352 | return false; | 352 | return false; |
353 | } | 353 | } |
354 | #endregion Profile Properties | 354 | #endregion Profile Properties |
355 | 355 | ||
356 | #region Interests | 356 | #region Interests |
357 | public bool AvatarInterestsUpdate(OSDMap json, ref JsonRpcResponse response) | 357 | public bool AvatarInterestsUpdate(OSDMap json, ref JsonRpcResponse response) |
358 | { | 358 | { |
@@ -363,7 +363,7 @@ namespace OpenSim.Server.Handlers | |||
363 | m_log.DebugFormat ("Avatar Interests Update Request"); | 363 | m_log.DebugFormat ("Avatar Interests Update Request"); |
364 | return false; | 364 | return false; |
365 | } | 365 | } |
366 | 366 | ||
367 | string result = string.Empty; | 367 | string result = string.Empty; |
368 | UserProfileProperties props = new UserProfileProperties(); | 368 | UserProfileProperties props = new UserProfileProperties(); |
369 | object Props = (object)props; | 369 | object Props = (object)props; |
@@ -373,7 +373,7 @@ namespace OpenSim.Server.Handlers | |||
373 | response.Result = OSD.SerializeMembers(props); | 373 | response.Result = OSD.SerializeMembers(props); |
374 | return true; | 374 | return true; |
375 | } | 375 | } |
376 | 376 | ||
377 | response.Error.Code = ErrorCode.InternalError; | 377 | response.Error.Code = ErrorCode.InternalError; |
378 | response.Error.Message = string.Format("{0}", result); | 378 | response.Error.Message = string.Format("{0}", result); |
379 | return false; | 379 | return false; |
@@ -399,7 +399,7 @@ namespace OpenSim.Server.Handlers | |||
399 | response.Result = OSD.SerializeMembers(prefs); | 399 | response.Result = OSD.SerializeMembers(prefs); |
400 | return true; | 400 | return true; |
401 | } | 401 | } |
402 | 402 | ||
403 | response.Error.Code = ErrorCode.InternalError; | 403 | response.Error.Code = ErrorCode.InternalError; |
404 | response.Error.Message = string.Format("{0}", result); | 404 | response.Error.Message = string.Format("{0}", result); |
405 | // m_log.InfoFormat("[PROFILES]: User preferences request error - {0}", response.Error.Message); | 405 | // m_log.InfoFormat("[PROFILES]: User preferences request error - {0}", response.Error.Message); |
@@ -415,7 +415,7 @@ namespace OpenSim.Server.Handlers | |||
415 | m_log.DebugFormat ("User Preferences Update Request"); | 415 | m_log.DebugFormat ("User Preferences Update Request"); |
416 | return false; | 416 | return false; |
417 | } | 417 | } |
418 | 418 | ||
419 | string result = string.Empty; | 419 | string result = string.Empty; |
420 | UserPreferences prefs = new UserPreferences(); | 420 | UserPreferences prefs = new UserPreferences(); |
421 | object Prefs = (object)prefs; | 421 | object Prefs = (object)prefs; |
@@ -425,7 +425,7 @@ namespace OpenSim.Server.Handlers | |||
425 | response.Result = OSD.SerializeMembers(prefs); | 425 | response.Result = OSD.SerializeMembers(prefs); |
426 | return true; | 426 | return true; |
427 | } | 427 | } |
428 | 428 | ||
429 | response.Error.Code = ErrorCode.InternalError; | 429 | response.Error.Code = ErrorCode.InternalError; |
430 | response.Error.Message = string.Format("{0}", result); | 430 | response.Error.Message = string.Format("{0}", result); |
431 | m_log.InfoFormat("[PROFILES]: User preferences update error - {0}", response.Error.Message); | 431 | m_log.InfoFormat("[PROFILES]: User preferences update error - {0}", response.Error.Message); |
@@ -433,6 +433,7 @@ namespace OpenSim.Server.Handlers | |||
433 | } | 433 | } |
434 | #endregion User Preferences | 434 | #endregion User Preferences |
435 | 435 | ||
436 | |||
436 | #region Utility | 437 | #region Utility |
437 | public bool AvatarImageAssetsRequest(OSDMap json, ref JsonRpcResponse response) | 438 | public bool AvatarImageAssetsRequest(OSDMap json, ref JsonRpcResponse response) |
438 | { | 439 | { |
@@ -442,13 +443,13 @@ namespace OpenSim.Server.Handlers | |||
442 | m_log.DebugFormat ("Avatar Image Assets Request"); | 443 | m_log.DebugFormat ("Avatar Image Assets Request"); |
443 | return false; | 444 | return false; |
444 | } | 445 | } |
445 | 446 | ||
446 | OSDMap request = (OSDMap)json["params"]; | 447 | OSDMap request = (OSDMap)json["params"]; |
447 | UUID avatarId = new UUID(request["avatarId"].AsString()); | 448 | UUID avatarId = new UUID(request["avatarId"].AsString()); |
448 | 449 | ||
449 | OSDArray data = (OSDArray) Service.AvatarImageAssetsRequest(avatarId); | 450 | OSDArray data = (OSDArray) Service.AvatarImageAssetsRequest(avatarId); |
450 | response.Result = data; | 451 | response.Result = data; |
451 | 452 | ||
452 | return true; | 453 | return true; |
453 | } | 454 | } |
454 | #endregion Utiltiy | 455 | #endregion Utiltiy |
@@ -463,7 +464,7 @@ namespace OpenSim.Server.Handlers | |||
463 | m_log.DebugFormat ("User Application Service URL Request: No Parameters!"); | 464 | m_log.DebugFormat ("User Application Service URL Request: No Parameters!"); |
464 | return false; | 465 | return false; |
465 | } | 466 | } |
466 | 467 | ||
467 | string result = string.Empty; | 468 | string result = string.Empty; |
468 | UserAppData props = new UserAppData(); | 469 | UserAppData props = new UserAppData(); |
469 | object Props = (object)props; | 470 | object Props = (object)props; |
@@ -474,15 +475,15 @@ namespace OpenSim.Server.Handlers | |||
474 | res["result"] = OSD.FromString("success"); | 475 | res["result"] = OSD.FromString("success"); |
475 | res["token"] = OSD.FromString (result); | 476 | res["token"] = OSD.FromString (result); |
476 | response.Result = res; | 477 | response.Result = res; |
477 | 478 | ||
478 | return true; | 479 | return true; |
479 | } | 480 | } |
480 | 481 | ||
481 | response.Error.Code = ErrorCode.InternalError; | 482 | response.Error.Code = ErrorCode.InternalError; |
482 | response.Error.Message = string.Format("{0}", result); | 483 | response.Error.Message = string.Format("{0}", result); |
483 | return false; | 484 | return false; |
484 | } | 485 | } |
485 | 486 | ||
486 | public bool UpdateUserAppData(OSDMap json, ref JsonRpcResponse response) | 487 | public bool UpdateUserAppData(OSDMap json, ref JsonRpcResponse response) |
487 | { | 488 | { |
488 | if(!json.ContainsKey("params")) | 489 | if(!json.ContainsKey("params")) |
@@ -492,7 +493,7 @@ namespace OpenSim.Server.Handlers | |||
492 | m_log.DebugFormat ("User App Data Update Request"); | 493 | m_log.DebugFormat ("User App Data Update Request"); |
493 | return false; | 494 | return false; |
494 | } | 495 | } |
495 | 496 | ||
496 | string result = string.Empty; | 497 | string result = string.Empty; |
497 | UserAppData props = new UserAppData(); | 498 | UserAppData props = new UserAppData(); |
498 | object Props = (object)props; | 499 | object Props = (object)props; |
@@ -502,7 +503,7 @@ namespace OpenSim.Server.Handlers | |||
502 | response.Result = OSD.SerializeMembers(props); | 503 | response.Result = OSD.SerializeMembers(props); |
503 | return true; | 504 | return true; |
504 | } | 505 | } |
505 | 506 | ||
506 | response.Error.Code = ErrorCode.InternalError; | 507 | response.Error.Code = ErrorCode.InternalError; |
507 | response.Error.Message = string.Format("{0}", result); | 508 | response.Error.Message = string.Format("{0}", result); |
508 | return false; | 509 | return false; |
diff --git a/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs b/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs index f0b36c1..4d6402f 100644 --- a/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs +++ b/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs | |||
@@ -2,7 +2,7 @@ | |||
2 | using System.Runtime.CompilerServices; | 2 | using System.Runtime.CompilerServices; |
3 | using System.Runtime.InteropServices; | 3 | using System.Runtime.InteropServices; |
4 | 4 | ||
5 | // General Information about an assembly is controlled through the following | 5 | // General Information about an assembly is controlled through the following |
6 | // set of attributes. Change these attribute values to modify the information | 6 | // set of attributes. Change these attribute values to modify the information |
7 | // associated with an assembly. | 7 | // associated with an assembly. |
8 | [assembly: AssemblyTitle("OpenSim.Server.Handlers")] | 8 | [assembly: AssemblyTitle("OpenSim.Server.Handlers")] |
@@ -14,8 +14,8 @@ using System.Runtime.InteropServices; | |||
14 | [assembly: AssemblyTrademark("")] | 14 | [assembly: AssemblyTrademark("")] |
15 | [assembly: AssemblyCulture("")] | 15 | [assembly: AssemblyCulture("")] |
16 | 16 | ||
17 | // Setting ComVisible to false makes the types in this assembly not visible | 17 | // Setting ComVisible to false makes the types in this assembly not visible |
18 | // to COM components. If you need to access a type in this assembly from | 18 | // to COM components. If you need to access a type in this assembly from |
19 | // COM, set the ComVisible attribute to true on that type. | 19 | // COM, set the ComVisible attribute to true on that type. |
20 | [assembly: ComVisible(false)] | 20 | [assembly: ComVisible(false)] |
21 | 21 | ||
@@ -25,9 +25,9 @@ using System.Runtime.InteropServices; | |||
25 | // Version information for an assembly consists of the following four values: | 25 | // Version information for an assembly consists of the following four values: |
26 | // | 26 | // |
27 | // Major Version | 27 | // Major Version |
28 | // Minor Version | 28 | // Minor Version |
29 | // Build Number | 29 | // Build Number |
30 | // Revision | 30 | // Revision |
31 | // | 31 | // |
32 | [assembly: AssemblyVersion("0.8.3.*")] | 32 | [assembly: AssemblyVersion(OpenSim.VersionInfo.AssemblyVersionNumber)] |
33 | 33 | ||
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs index 98c5312..c52a1ab 100644 --- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs | |||
@@ -120,6 +120,10 @@ namespace OpenSim.Server.Handlers.Simulation | |||
120 | 120 | ||
121 | protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID) | 121 | protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID) |
122 | { | 122 | { |
123 | Culture.SetCurrentCulture(); | ||
124 | |||
125 | EntityTransferContext ctx = new EntityTransferContext(); | ||
126 | |||
123 | if (m_SimulationService == null) | 127 | if (m_SimulationService == null) |
124 | { | 128 | { |
125 | m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless."); | 129 | m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless."); |
@@ -155,6 +159,9 @@ namespace OpenSim.Server.Handlers.Simulation | |||
155 | theirVersion = float.Parse(parts[1]); | 159 | theirVersion = float.Parse(parts[1]); |
156 | } | 160 | } |
157 | 161 | ||
162 | if (args.ContainsKey("context")) | ||
163 | ctx.Unpack((OSDMap)args["context"]); | ||
164 | |||
158 | // Decode the new versioning data | 165 | // Decode the new versioning data |
159 | float minVersionRequired = 0f; | 166 | float minVersionRequired = 0f; |
160 | float maxVersionRequired = 0f; | 167 | float maxVersionRequired = 0f; |
@@ -183,7 +190,7 @@ namespace OpenSim.Server.Handlers.Simulation | |||
183 | { | 190 | { |
184 | // If there is no version in the packet at all we're looking at 0.6 or | 191 | // If there is no version in the packet at all we're looking at 0.6 or |
185 | // even more ancient. Refuse it. | 192 | // even more ancient. Refuse it. |
186 | if(theirVersion == 0f) | 193 | if(theirVersion == 0f) |
187 | { | 194 | { |
188 | resp["success"] = OSD.FromBoolean(false); | 195 | resp["success"] = OSD.FromBoolean(false); |
189 | resp["reason"] = OSD.FromString("Your region is running a old version of opensim no longer supported. Consider updating it"); | 196 | resp["reason"] = OSD.FromString("Your region is running a old version of opensim no longer supported. Consider updating it"); |
@@ -192,8 +199,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
192 | } | 199 | } |
193 | 200 | ||
194 | version = theirVersion; | 201 | version = theirVersion; |
195 | 202 | ||
196 | if (version < VersionInfo.SimulationServiceVersionAcceptedMin || | 203 | if (version < VersionInfo.SimulationServiceVersionAcceptedMin || |
197 | version > VersionInfo.SimulationServiceVersionAcceptedMax ) | 204 | version > VersionInfo.SimulationServiceVersionAcceptedMax ) |
198 | { | 205 | { |
199 | resp["success"] = OSD.FromBoolean(false); | 206 | resp["success"] = OSD.FromBoolean(false); |
@@ -245,7 +252,6 @@ namespace OpenSim.Server.Handlers.Simulation | |||
245 | 252 | ||
246 | string reason; | 253 | string reason; |
247 | // We're sending the version numbers down to the local connector to do the varregion check. | 254 | // We're sending the version numbers down to the local connector to do the varregion check. |
248 | EntityTransferContext ctx = new EntityTransferContext(); | ||
249 | ctx.InboundVersion = inboundVersion; | 255 | ctx.InboundVersion = inboundVersion; |
250 | ctx.OutboundVersion = outboundVersion; | 256 | ctx.OutboundVersion = outboundVersion; |
251 | if (minVersionProvided == 0f) | 257 | if (minVersionProvided == 0f) |
@@ -255,6 +261,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
255 | } | 261 | } |
256 | 262 | ||
257 | bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, features, ctx, out reason); | 263 | bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, features, ctx, out reason); |
264 | m_log.DebugFormat("[AGENT HANDLER]: QueryAccess returned {0} ({1}). Version={2}, {3}/{4}", | ||
265 | result, reason, version, inboundVersion, outboundVersion); | ||
258 | 266 | ||
259 | resp["success"] = OSD.FromBoolean(result); | 267 | resp["success"] = OSD.FromBoolean(result); |
260 | resp["reason"] = OSD.FromString(reason); | 268 | resp["reason"] = OSD.FromString(reason); |
@@ -262,12 +270,11 @@ namespace OpenSim.Server.Handlers.Simulation | |||
262 | resp["version"] = OSD.FromString(legacyVersion); | 270 | resp["version"] = OSD.FromString(legacyVersion); |
263 | resp["negotiated_inbound_version"] = OSD.FromReal(inboundVersion); | 271 | resp["negotiated_inbound_version"] = OSD.FromReal(inboundVersion); |
264 | resp["negotiated_outbound_version"] = OSD.FromReal(outboundVersion); | 272 | resp["negotiated_outbound_version"] = OSD.FromReal(outboundVersion); |
265 | resp["variable_wearables_count_supported"] = OSD.FromBoolean(true); | ||
266 | 273 | ||
267 | OSDArray featuresWanted = new OSDArray(); | 274 | OSDArray featuresWanted = new OSDArray(); |
268 | foreach (UUID feature in features) | 275 | foreach (UUID feature in features) |
269 | featuresWanted.Add(OSD.FromString(feature.ToString())); | 276 | featuresWanted.Add(OSD.FromString(feature.ToString())); |
270 | 277 | ||
271 | resp["features"] = featuresWanted; | 278 | resp["features"] = featuresWanted; |
272 | 279 | ||
273 | // We must preserve defaults here, otherwise a false "success" will not be put into the JSON map! | 280 | // We must preserve defaults here, otherwise a false "success" will not be put into the JSON map! |
@@ -407,6 +414,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
407 | 414 | ||
408 | protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) | 415 | protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) |
409 | { | 416 | { |
417 | EntityTransferContext ctx = new EntityTransferContext(); | ||
418 | |||
410 | OSDMap args = Utils.GetOSDMap((string)request["body"]); | 419 | OSDMap args = Utils.GetOSDMap((string)request["body"]); |
411 | if (args == null) | 420 | if (args == null) |
412 | { | 421 | { |
@@ -415,6 +424,9 @@ namespace OpenSim.Server.Handlers.Simulation | |||
415 | return; | 424 | return; |
416 | } | 425 | } |
417 | 426 | ||
427 | if (args.ContainsKey("context")) | ||
428 | ctx.Unpack((OSDMap)args["context"]); | ||
429 | |||
418 | AgentDestinationData data = CreateAgentDestinationData(); | 430 | AgentDestinationData data = CreateAgentDestinationData(); |
419 | UnpackData(args, data, request); | 431 | UnpackData(args, data, request); |
420 | 432 | ||
@@ -448,7 +460,7 @@ namespace OpenSim.Server.Handlers.Simulation | |||
448 | source.RegionLocY = Int32.Parse(args["source_y"].AsString()); | 460 | source.RegionLocY = Int32.Parse(args["source_y"].AsString()); |
449 | source.RegionName = args["source_name"].AsString(); | 461 | source.RegionName = args["source_name"].AsString(); |
450 | source.RegionID = UUID.Parse(args["source_uuid"].AsString()); | 462 | source.RegionID = UUID.Parse(args["source_uuid"].AsString()); |
451 | 463 | ||
452 | if (args.ContainsKey("source_server_uri")) | 464 | if (args.ContainsKey("source_server_uri")) |
453 | source.RawServerURI = args["source_server_uri"].AsString(); | 465 | source.RawServerURI = args["source_server_uri"].AsString(); |
454 | else | 466 | else |
@@ -461,7 +473,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
461 | // This is the meaning of POST agent | 473 | // This is the meaning of POST agent |
462 | //m_regionClient.AdjustUserInformation(aCircuit); | 474 | //m_regionClient.AdjustUserInformation(aCircuit); |
463 | //bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason); | 475 | //bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason); |
464 | bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, out reason); | 476 | |
477 | bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, ctx, out reason); | ||
465 | 478 | ||
466 | resp["reason"] = OSD.FromString(reason); | 479 | resp["reason"] = OSD.FromString(reason); |
467 | resp["success"] = OSD.FromBoolean(result); | 480 | resp["success"] = OSD.FromBoolean(result); |
@@ -504,41 +517,62 @@ namespace OpenSim.Server.Handlers.Simulation | |||
504 | 517 | ||
505 | protected string GetCallerIP(Hashtable request) | 518 | protected string GetCallerIP(Hashtable request) |
506 | { | 519 | { |
507 | if (!m_Proxy) | 520 | if (request.ContainsKey("headers")) |
508 | return Util.GetCallerIP(request); | 521 | { |
509 | 522 | Hashtable headers = (Hashtable)request["headers"]; | |
510 | // We're behind a proxy | ||
511 | Hashtable headers = (Hashtable)request["headers"]; | ||
512 | 523 | ||
513 | //// DEBUG | 524 | //// DEBUG |
514 | //foreach (object o in headers.Keys) | 525 | //foreach (object o in headers.Keys) |
515 | // m_log.DebugFormat("XXX {0} = {1}", o.ToString(), (headers[o] == null? "null" : headers[o].ToString())); | 526 | // m_log.DebugFormat("XXX {0} = {1}", o.ToString(), (headers[o] == null? "null" : headers[o].ToString())); |
516 | 527 | ||
517 | string xff = "X-Forwarded-For"; | 528 | string xff = "X-Forwarded-For"; |
518 | if (headers.ContainsKey(xff.ToLower())) | 529 | if (!headers.ContainsKey(xff)) |
519 | xff = xff.ToLower(); | 530 | xff = xff.ToLower(); |
520 | 531 | ||
521 | if (!headers.ContainsKey(xff) || headers[xff] == null) | 532 | if (!headers.ContainsKey(xff) || headers[xff] == null) |
522 | { | 533 | { |
523 | m_log.WarnFormat("[AGENT HANDLER]: No XFF header"); | 534 | // m_log.WarnFormat("[AGENT HANDLER]: No XFF header"); |
524 | return Util.GetCallerIP(request); | 535 | return Util.GetCallerIP(request); |
525 | } | 536 | } |
526 | |||
527 | m_log.DebugFormat("[AGENT HANDLER]: XFF is {0}", headers[xff]); | ||
528 | 537 | ||
529 | IPEndPoint ep = Util.GetClientIPFromXFF((string)headers[xff]); | 538 | // m_log.DebugFormat("[AGENT HANDLER]: XFF is {0}", headers[xff]); |
530 | if (ep != null) | ||
531 | return ep.Address.ToString(); | ||
532 | 539 | ||
540 | IPEndPoint ep = Util.GetClientIPFromXFF((string)headers[xff]); | ||
541 | if (ep != null) | ||
542 | return ep.Address.ToString(); | ||
543 | } | ||
533 | // Oops | 544 | // Oops |
534 | return Util.GetCallerIP(request); | 545 | return Util.GetCallerIP(request); |
535 | } | 546 | } |
536 | 547 | ||
537 | // subclasses can override this | 548 | // subclasses can override this |
538 | protected virtual bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, | 549 | protected virtual bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, |
539 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason) | 550 | AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason) |
540 | { | 551 | { |
541 | return m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out reason); | 552 | reason = String.Empty; |
553 | // The data and protocols are already defined so this is just a dummy to satisfy the interface | ||
554 | // TODO: make this end-to-end | ||
555 | |||
556 | /* this needs to be sync | ||
557 | if ((teleportFlags & (uint)TeleportFlags.ViaLogin) == 0) | ||
558 | { | ||
559 | Util.FireAndForget(x => | ||
560 | { | ||
561 | string r; | ||
562 | m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out r); | ||
563 | m_log.DebugFormat("[AGENT HANDLER]: ASYNC CreateAgent {0}", r); | ||
564 | }); | ||
565 | |||
566 | return true; | ||
567 | } | ||
568 | else | ||
569 | { | ||
570 | */ | ||
571 | |||
572 | bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason); | ||
573 | // m_log.DebugFormat("[AGENT HANDLER]: SYNC CreateAgent {0} {1}", ret.ToString(), reason); | ||
574 | return ret; | ||
575 | // } | ||
542 | } | 576 | } |
543 | } | 577 | } |
544 | 578 | ||
@@ -639,6 +673,9 @@ namespace OpenSim.Server.Handlers.Simulation | |||
639 | 673 | ||
640 | protected void DoAgentPut(Hashtable request, Hashtable responsedata) | 674 | protected void DoAgentPut(Hashtable request, Hashtable responsedata) |
641 | { | 675 | { |
676 | // TODO: Encode the ENtityTransferContext | ||
677 | EntityTransferContext ctx = new EntityTransferContext(); | ||
678 | |||
642 | OSDMap args = Utils.GetOSDMap((string)request["body"]); | 679 | OSDMap args = Utils.GetOSDMap((string)request["body"]); |
643 | if (args == null) | 680 | if (args == null) |
644 | { | 681 | { |
@@ -659,6 +696,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
659 | UUID.TryParse(args["destination_uuid"].AsString(), out uuid); | 696 | UUID.TryParse(args["destination_uuid"].AsString(), out uuid); |
660 | if (args.ContainsKey("destination_name") && args["destination_name"] != null) | 697 | if (args.ContainsKey("destination_name") && args["destination_name"] != null) |
661 | regionname = args["destination_name"].ToString(); | 698 | regionname = args["destination_name"].ToString(); |
699 | if (args.ContainsKey("context")) | ||
700 | ctx.Unpack((OSDMap)args["context"]); | ||
662 | 701 | ||
663 | GridRegion destination = new GridRegion(); | 702 | GridRegion destination = new GridRegion(); |
664 | destination.RegionID = uuid; | 703 | destination.RegionID = uuid; |
@@ -681,7 +720,7 @@ namespace OpenSim.Server.Handlers.Simulation | |||
681 | AgentData agent = new AgentData(); | 720 | AgentData agent = new AgentData(); |
682 | try | 721 | try |
683 | { | 722 | { |
684 | agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID)); | 723 | agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID), ctx); |
685 | } | 724 | } |
686 | catch (Exception ex) | 725 | catch (Exception ex) |
687 | { | 726 | { |
@@ -700,7 +739,7 @@ namespace OpenSim.Server.Handlers.Simulation | |||
700 | AgentPosition agent = new AgentPosition(); | 739 | AgentPosition agent = new AgentPosition(); |
701 | try | 740 | try |
702 | { | 741 | { |
703 | agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID)); | 742 | agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID), ctx); |
704 | } | 743 | } |
705 | catch (Exception ex) | 744 | catch (Exception ex) |
706 | { | 745 | { |
@@ -721,7 +760,10 @@ namespace OpenSim.Server.Handlers.Simulation | |||
721 | // subclasses can override this | 760 | // subclasses can override this |
722 | protected virtual bool UpdateAgent(GridRegion destination, AgentData agent) | 761 | protected virtual bool UpdateAgent(GridRegion destination, AgentData agent) |
723 | { | 762 | { |
724 | return m_SimulationService.UpdateAgent(destination, agent); | 763 | // The data and protocols are already defined so this is just a dummy to satisfy the interface |
764 | // TODO: make this end-to-end | ||
765 | EntityTransferContext ctx = new EntityTransferContext(); | ||
766 | return m_SimulationService.UpdateAgent(destination, agent, ctx); | ||
725 | } | 767 | } |
726 | } | 768 | } |
727 | 769 | ||
diff --git a/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs b/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs index dbb1a15..1b545ac 100644 --- a/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs | |||
@@ -69,6 +69,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
69 | //m_log.Debug(" >> http-method=" + request["http-method"]); | 69 | //m_log.Debug(" >> http-method=" + request["http-method"]); |
70 | //m_log.Debug("---------------------------\n"); | 70 | //m_log.Debug("---------------------------\n"); |
71 | 71 | ||
72 | Culture.SetCurrentCulture(); | ||
73 | |||
72 | Hashtable responsedata = new Hashtable(); | 74 | Hashtable responsedata = new Hashtable(); |
73 | responsedata["content_type"] = "text/html"; | 75 | responsedata["content_type"] = "text/html"; |
74 | 76 | ||
diff --git a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs index 21eb790..bc12ef9 100644 --- a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs +++ b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs | |||
@@ -72,9 +72,9 @@ namespace OpenSim.Server.Handlers.UserAccounts | |||
72 | protected override byte[] ProcessRequest(string path, Stream requestData, | 72 | protected override byte[] ProcessRequest(string path, Stream requestData, |
73 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 73 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
74 | { | 74 | { |
75 | StreamReader sr = new StreamReader(requestData); | 75 | string body; |
76 | string body = sr.ReadToEnd(); | 76 | using(StreamReader sr = new StreamReader(requestData)) |
77 | sr.Close(); | 77 | body = sr.ReadToEnd(); |
78 | body = body.Trim(); | 78 | body = body.Trim(); |
79 | 79 | ||
80 | // We need to check the authorization header | 80 | // We need to check the authorization header |
@@ -98,16 +98,18 @@ namespace OpenSim.Server.Handlers.UserAccounts | |||
98 | if (m_AllowCreateUser) | 98 | if (m_AllowCreateUser) |
99 | return CreateUser(request); | 99 | return CreateUser(request); |
100 | else | 100 | else |
101 | break; | 101 | return FailureResult(); |
102 | case "getaccount": | 102 | case "getaccount": |
103 | return GetAccount(request); | 103 | return GetAccount(request); |
104 | case "getaccounts": | 104 | case "getaccounts": |
105 | return GetAccounts(request); | 105 | return GetAccounts(request); |
106 | case "getmultiaccounts": | ||
107 | return GetMultiAccounts(request); | ||
106 | case "setaccount": | 108 | case "setaccount": |
107 | if (m_AllowSetAccount) | 109 | if (m_AllowSetAccount) |
108 | return StoreAccount(request); | 110 | return StoreAccount(request); |
109 | else | 111 | else |
110 | break; | 112 | return FailureResult(); |
111 | } | 113 | } |
112 | 114 | ||
113 | m_log.DebugFormat("[USER SERVICE HANDLER]: unknown method request: {0}", method); | 115 | m_log.DebugFormat("[USER SERVICE HANDLER]: unknown method request: {0}", method); |
@@ -201,6 +203,52 @@ namespace OpenSim.Server.Handlers.UserAccounts | |||
201 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 203 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
202 | } | 204 | } |
203 | 205 | ||
206 | byte[] GetMultiAccounts(Dictionary<string, object> request) | ||
207 | { | ||
208 | UUID scopeID = UUID.Zero; | ||
209 | if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) | ||
210 | return FailureResult(); | ||
211 | |||
212 | if (!request.ContainsKey("IDS")) | ||
213 | { | ||
214 | m_log.DebugFormat("[USER SERVICE HANDLER]: GetMultiAccounts called without required uuids argument"); | ||
215 | return FailureResult(); | ||
216 | } | ||
217 | |||
218 | if (!(request["IDS"] is List<string>)) | ||
219 | { | ||
220 | m_log.DebugFormat("[USER SERVICE HANDLER]: GetMultiAccounts input argument was of unexpected type {0}", request["IDS"].GetType().ToString()); | ||
221 | return FailureResult(); | ||
222 | } | ||
223 | |||
224 | List<string> userIDs = (List<string>)request["IDS"]; | ||
225 | |||
226 | List<UserAccount> accounts = m_UserAccountService.GetUserAccounts(scopeID, userIDs); | ||
227 | |||
228 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
229 | if ((accounts == null) || ((accounts != null) && (accounts.Count == 0))) | ||
230 | { | ||
231 | result["result"] = "null"; | ||
232 | } | ||
233 | else | ||
234 | { | ||
235 | int i = 0; | ||
236 | foreach (UserAccount acc in accounts) | ||
237 | { | ||
238 | if(acc == null) | ||
239 | continue; | ||
240 | Dictionary<string, object> rinfoDict = acc.ToKeyValuePairs(); | ||
241 | result["account" + i] = rinfoDict; | ||
242 | i++; | ||
243 | } | ||
244 | } | ||
245 | |||
246 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
247 | |||
248 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | ||
249 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | ||
250 | } | ||
251 | |||
204 | byte[] StoreAccount(Dictionary<string, object> request) | 252 | byte[] StoreAccount(Dictionary<string, object> request) |
205 | { | 253 | { |
206 | UUID principalID = UUID.Zero; | 254 | UUID principalID = UUID.Zero; |
@@ -280,12 +328,16 @@ namespace OpenSim.Server.Handlers.UserAccounts | |||
280 | if (request.ContainsKey("Email")) | 328 | if (request.ContainsKey("Email")) |
281 | email = request["Email"].ToString(); | 329 | email = request["Email"].ToString(); |
282 | 330 | ||
331 | string model = ""; | ||
332 | if (request.ContainsKey("Model")) | ||
333 | model = request["Model"].ToString(); | ||
334 | |||
283 | UserAccount createdUserAccount = null; | 335 | UserAccount createdUserAccount = null; |
284 | 336 | ||
285 | if (m_UserAccountService is UserAccountService) | 337 | if (m_UserAccountService is UserAccountService) |
286 | createdUserAccount | 338 | createdUserAccount |
287 | = ((UserAccountService)m_UserAccountService).CreateUser( | 339 | = ((UserAccountService)m_UserAccountService).CreateUser( |
288 | scopeID, principalID, firstName, lastName, password, email); | 340 | scopeID, principalID, firstName, lastName, password, email, model); |
289 | 341 | ||
290 | if (createdUserAccount == null) | 342 | if (createdUserAccount == null) |
291 | return FailureResult(); | 343 | return FailureResult(); |
@@ -345,4 +397,4 @@ namespace OpenSim.Server.Handlers.UserAccounts | |||
345 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 397 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
346 | } | 398 | } |
347 | } | 399 | } |
348 | } \ No newline at end of file | 400 | } |
diff --git a/OpenSim/Server/Handlers/Web/WebServerConnector.cs b/OpenSim/Server/Handlers/Web/WebServerConnector.cs new file mode 100644 index 0000000..5389c6e --- /dev/null +++ b/OpenSim/Server/Handlers/Web/WebServerConnector.cs | |||
@@ -0,0 +1,878 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.IO; | ||
5 | using System.Net; | ||
6 | using System.Net.Mail; | ||
7 | using System.Reflection; | ||
8 | using System.Security; | ||
9 | using System.Text; | ||
10 | using System.Text.RegularExpressions; | ||
11 | using log4net; | ||
12 | using Nini.Config; | ||
13 | using OpenMetaverse; | ||
14 | using OpenMetaverse.StructuredData; | ||
15 | using OpenSim.Data.MySQL; | ||
16 | using OpenSim.Framework; | ||
17 | using OpenSim.Framework.Servers; | ||
18 | using OpenSim.Framework.Servers.HttpServer; | ||
19 | using OpenSim.Server.Handlers.Base; | ||
20 | |||
21 | namespace OpenSim.Server.Handlers.Web | ||
22 | { | ||
23 | public class WebServerConnector : ServiceConnector | ||
24 | { | ||
25 | // This is all slow and clunky, it's not a real web server, just something to use if you don't want a real one. | ||
26 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
27 | private IConfigSource m_Config; | ||
28 | |||
29 | protected MySQLRaw m_database = null; | ||
30 | |||
31 | private Hashtable mime = new Hashtable(); | ||
32 | private Hashtable ssi = new Hashtable(); | ||
33 | |||
34 | private IPAddress m_IP; | ||
35 | private IHttpServer m_server; | ||
36 | // private IHttpServer m_SSLserver = null; | ||
37 | private string m_domain = ""; | ||
38 | private uint m_http_port; | ||
39 | // private uint m_https_port = 0; | ||
40 | |||
41 | private Dictionary<string, Hashtable> m_auth = new Dictionary<string, Hashtable>(); | ||
42 | |||
43 | private static Dictionary<string, string> m_firstNames = new Dictionary<string, string>(); | ||
44 | private static Dictionary<string, string> m_lastNames = new Dictionary<string, string>(); | ||
45 | private static Dictionary<string, string> m_fullNames = new Dictionary<string, string>(); | ||
46 | |||
47 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
48 | private string m_SMTP_server; | ||
49 | private string m_SMTP_port; | ||
50 | private string m_SMTP_user; | ||
51 | private string m_SMTP_password; | ||
52 | private string m_email_from; | ||
53 | private SmtpClient m_smtp; | ||
54 | */ | ||
55 | |||
56 | public WebServerConnector(IConfigSource config, IHttpServer server, string configName) : base(config, server, configName) | ||
57 | { | ||
58 | string dllName = String.Empty; | ||
59 | string connString = String.Empty; | ||
60 | |||
61 | m_Config = config; | ||
62 | m_server = server; | ||
63 | m_IP = MainServer.Instance.ListenIPAddress; | ||
64 | m_http_port = server.Port; | ||
65 | |||
66 | // Try reading the [DatabaseService] section, if it exists | ||
67 | IConfig dbConfig = m_Config.Configs["DatabaseService"]; | ||
68 | if (dbConfig != null) | ||
69 | { | ||
70 | if (dllName == String.Empty) | ||
71 | dllName = dbConfig.GetString("StorageProvider", String.Empty); | ||
72 | if (connString == String.Empty) | ||
73 | connString = dbConfig.GetString("ConnectionString", String.Empty); | ||
74 | } | ||
75 | if (dllName.Equals(String.Empty)) | ||
76 | throw new Exception("No StorageProvider configured"); | ||
77 | |||
78 | //// TODO - Should do the plugin thing to pick between database backends. | ||
79 | //// Or not, we are all using MariaDB anyway. | ||
80 | // m_Database = LoadPlugin<SQLGenericHandler>(dllName, new Object[] { connString }); | ||
81 | |||
82 | m_database = new MySQLRaw(connString); | ||
83 | |||
84 | mime.Add(".gz", "application/gzip"); | ||
85 | mime.Add(".js", "application/javascript"); | ||
86 | mime.Add(".json", "application/json"); | ||
87 | mime.Add(".pdf", "application/pdf"); | ||
88 | mime.Add(".rtf", "application/rtf"); | ||
89 | mime.Add(".zip", "application/zip"); | ||
90 | mime.Add(".xz", "application/x-xz"); | ||
91 | mime.Add(".gif", "image/gif"); | ||
92 | mime.Add(".png", "image/png"); | ||
93 | mime.Add(".jp2", "image/jp2"); | ||
94 | mime.Add(".jpg2", "image/jp2"); | ||
95 | mime.Add(".jpe", "image/jpeg"); | ||
96 | mime.Add(".jpg", "image/jpeg"); | ||
97 | mime.Add(".jpeg", "image/jpeg"); | ||
98 | mime.Add(".svg", "image/svg+xml"); | ||
99 | mime.Add(".svgz", "image/svg+xml"); | ||
100 | mime.Add(".tif", "image/tiff"); | ||
101 | mime.Add(".tiff", "image/tiff"); | ||
102 | mime.Add(".css", "text/css"); | ||
103 | mime.Add(".html", "text/html"); | ||
104 | mime.Add(".htm", "text/html"); | ||
105 | mime.Add(".shtml", "text/html"); | ||
106 | // mime.Add(".md", "text/markdown"); | ||
107 | // mime.Add(".markdown","text/markdown"); | ||
108 | mime.Add(".txt", "text/plain"); | ||
109 | |||
110 | // Grab some info. | ||
111 | IConfig cfg = m_Config.Configs["GridInfoService"]; | ||
112 | string HomeURI = Util.GetConfigVarFromSections<string>(m_Config, "HomeURI", new string[] { "Startup", "Hypergrid" }, String.Empty); | ||
113 | ssi.Add("grid", cfg.GetString("gridname", "my grid")); | ||
114 | ssi.Add("uri", cfg.GetString("login", HomeURI)); | ||
115 | ssi.Add("version", VersionInfo.Version); | ||
116 | cfg = m_Config.Configs["Const"]; | ||
117 | m_domain = cfg.GetString("HostName", "localhost"); | ||
118 | |||
119 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
120 | // Copied from OpenSim/Region/OptionalModules/ViewerSupport/GodNamesModule.cs | ||
121 | cfg = m_Config.Configs["GodNames"]; | ||
122 | if (null != cfg) | ||
123 | { | ||
124 | m_log.Info("[WEB SERVICE]: Loading god names."); | ||
125 | string conf_str = cfg.GetString("FullNames", String.Empty); | ||
126 | if (String.Empty != conf_str) | ||
127 | { | ||
128 | foreach (string strl in conf_str.Split(',')) | ||
129 | { | ||
130 | string strlan = strl.Trim(" \t".ToCharArray()); | ||
131 | m_log.InfoFormat("[WEB SERVICE]: Adding {0} as a god name", strlan); | ||
132 | m_fullNames.Add(strlan, strlan); | ||
133 | } | ||
134 | } | ||
135 | |||
136 | conf_str = cfg.GetString("FirstNames", String.Empty); | ||
137 | if (String.Empty != conf_str) | ||
138 | { | ||
139 | foreach (string strl in conf_str.Split(',')) | ||
140 | { | ||
141 | string strlan = strl.Trim(" \t".ToCharArray()); | ||
142 | m_log.InfoFormat("[WEB SERVICE]: Adding {0} as a god first name", strlan); | ||
143 | m_firstNames.Add(strlan, strlan); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | conf_str = cfg.GetString("Surnames", String.Empty); | ||
148 | if (String.Empty != conf_str) | ||
149 | { | ||
150 | foreach (string strl in conf_str.Split(',')) | ||
151 | { | ||
152 | string strlan = strl.Trim(" \t".ToCharArray()); | ||
153 | m_log.InfoFormat("[WEB SERVICE]: Adding {0} as a god last name", strlan); | ||
154 | m_lastNames.Add(strlan, strlan); | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | else | ||
159 | m_log.Info("[WEB SERVICE]: No god names loaded."); | ||
160 | |||
161 | // Add the email client. | ||
162 | cfg = m_Config.Configs["SMTP"]; | ||
163 | if (null != cfg) | ||
164 | { | ||
165 | m_log.Info("[WEB SERVICE]: Loading email configuration."); | ||
166 | m_SMTP_server = cfg.GetString("SMTP_SERVER_HOSTNAME", "127.0.0.1"); | ||
167 | m_SMTP_port = cfg.GetString("SMTP_SERVER_PORT", "25"); | ||
168 | m_SMTP_user = cfg.GetString("SMTP_SERVER_LOGIN", ""); | ||
169 | m_SMTP_password = cfg.GetString("SMTP_SERVER_PASSWORD", ""); | ||
170 | m_email_from = cfg.GetString("host_domain_header_from", "grid@localhost"); | ||
171 | |||
172 | m_smtp = new SmtpClient | ||
173 | { | ||
174 | Host = m_SMTP_server, | ||
175 | Port = Convert.ToInt16(m_SMTP_port), | ||
176 | EnableSsl = false, | ||
177 | DeliveryMethod = SmtpDeliveryMethod.Network, | ||
178 | Credentials = new NetworkCredential(m_SMTP_user, m_SMTP_password), | ||
179 | Timeout = 20000 | ||
180 | }; | ||
181 | } | ||
182 | */ | ||
183 | |||
184 | // Add the HTTP and HTTPS handlers. | ||
185 | server.AddHTTPHandler("/web/", WebRequestHandler); | ||
186 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
187 | IConfig networkConfig = m_Config.Configs["Network"]; | ||
188 | if (null != networkConfig) | ||
189 | { | ||
190 | m_https_port = (uint) networkConfig.GetInt("https_port", 0); | ||
191 | if (0 != m_https_port) | ||
192 | { | ||
193 | m_SSLserver = MainServer.GetHttpServer(m_https_port, null); | ||
194 | if (null != m_SSLserver) | ||
195 | m_SSLserver.AddHTTPHandler("/web/", WebRequestHandlerSSL); | ||
196 | } | ||
197 | } | ||
198 | */ | ||
199 | } | ||
200 | |||
201 | // AAARGGGH, in the request we don't get the HTTP/S, domain name, nor port number we were called from. So we have to fake it, sorta. | ||
202 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
203 | private Hashtable WebRequestHandlerSSL(Hashtable request) | ||
204 | { | ||
205 | return Handler(request, true); | ||
206 | } | ||
207 | */ | ||
208 | private Hashtable WebRequestHandler(Hashtable request) | ||
209 | { | ||
210 | return Handler(request, false); | ||
211 | } | ||
212 | private Hashtable Handler(Hashtable request, bool usedSSL) | ||
213 | { | ||
214 | Hashtable reply = new Hashtable(); | ||
215 | Hashtable replyHeaders = new Hashtable(); | ||
216 | Hashtable cookies = new Hashtable(); | ||
217 | Hashtable fields = new Hashtable(); | ||
218 | List<string> errors = new List<string>(); | ||
219 | |||
220 | string reqpath = (string) request["uri"]; | ||
221 | string method = (string) request["http-method"]; | ||
222 | string type = (string) request["content-type"]; | ||
223 | string body = (string) request["body"]; | ||
224 | string[] query = (string[]) request["querystringkeys"]; | ||
225 | Hashtable headers = (Hashtable) request["headers"]; | ||
226 | Hashtable vars = (Hashtable) request["requestvars"]; | ||
227 | string file = reqpath.Remove(0, 5); | ||
228 | string path = Path.Combine(Util.webDir(), file); | ||
229 | |||
230 | // m_log.InfoFormat("[WEB SERVICE]: {0} {1} {2} : {3} {4}, server IP {5} content type {6}, body {7}.", | ||
231 | // headers["remote_addr"].ToString(), method, m_domain, (usedSSL ? m_https_port : m_http_port), reqpath, m_IP, type, body); | ||
232 | m_log.InfoFormat("[WEB SERVICE]: {0} {1} {2} : {3} {4}, server IP {5} content type {6}, body {7}.", | ||
233 | headers["remote_addr"].ToString(), method, m_domain, m_http_port, reqpath, m_IP, type, body); | ||
234 | |||
235 | if (! Path.GetFullPath(path).StartsWith(Path.GetFullPath(Util.webDir()))) | ||
236 | { | ||
237 | m_log.ErrorFormat("[WEB SERVICE]: INVALID PATH {0} != {1}", Path.GetFullPath(path), Path.GetFullPath(Util.webDir())); | ||
238 | reply["int_response_code"] = 404; | ||
239 | reply["content_type"] = "text/html"; | ||
240 | reply["str_response_string"] = "<html><title>404 Unknown page</title><head><link rel=\"shortcut icon\" href=\"SledjHamrIconSmall.png\"></head><body bgcolor=\"black\" text=\"white\" alink=\"red\" link=\"blue\" vlink=\"purple\">" + | ||
241 | "404 error, can't find the " + reqpath + " page.<p> </p></body></html>"; | ||
242 | return reply; | ||
243 | } | ||
244 | |||
245 | long locIn = m_database.Count("Presence", "RegionID != '00000000-0000-0000-0000-000000000000'"); // Locals online but not HGing, and HGers in world. | ||
246 | long HGin = m_database.Count("Presence", "UserID NOT IN (SELECT PrincipalID FROM UserAccounts)"); // HGers in world. | ||
247 | ssi["hgers"] = HGin.ToString(); | ||
248 | ssi["inworld"] = (locIn - HGin).ToString(); | ||
249 | ssi["outworld"] = m_database.Count("hg_traveling_data", "GridExternalName != '" + ssi["uri"] + "'").ToString(); // Locals that are HGing. | ||
250 | ssi["members"] = m_database.Count("UserAccounts").ToString(); | ||
251 | ssi["sims"] = m_database.Count("regions").ToString(); | ||
252 | ssi["onlineSims"] = m_database.Count("regions", "sizeX != 0").ToString(); | ||
253 | ssi["varRegions"] = m_database.Count("regions", "sizeX > 256 or sizeY > 256").ToString(); | ||
254 | ssi["singleSims"] = m_database.Count("regions", "sizeX = 256 and sizeY = 256").ToString(); | ||
255 | ssi["offlineSims"] = m_database.Count("regions", "sizeX = 0").ToString(); | ||
256 | |||
257 | // Calculate grid area. | ||
258 | long simSize = 0; | ||
259 | List< Hashtable > rows = m_database.Select("regions", "sizeX,sizeY", "sizeX != 0", ""); | ||
260 | foreach (Hashtable row in rows) | ||
261 | { | ||
262 | simSize = simSize + Convert.ToInt32(row["sizeX"]) * Convert.ToInt32(row["sizeY"]); | ||
263 | } | ||
264 | ssi["simsSize"] = simSize.ToString(); | ||
265 | |||
266 | // Count local and HG visitors for the last 30 and 60 days. | ||
267 | HGin = m_database.Count("GridUser", "Login > UNIX_TIMESTAMP(FROM_UNIXTIME(UNIX_TIMESTAMP(now()) - 2419200))"); | ||
268 | rows = m_database.Join("GridUser", "GridUser.UserID", "INNER JOIN UserAccounts ON GridUser.UserID = UserAccounts.PrincipalID", | ||
269 | "Login > UNIX_TIMESTAMP(FROM_UNIXTIME(UNIX_TIMESTAMP(now()) - 2419200))", ""); | ||
270 | locIn = rows.Count; | ||
271 | ssi["locDay30"] = locIn.ToString(); | ||
272 | ssi["day30"] = HGin.ToString(); | ||
273 | HGin = HGin - locIn; | ||
274 | ssi["HGday30"] = HGin.ToString(); | ||
275 | |||
276 | HGin = m_database.Count("GridUser", "Login > UNIX_TIMESTAMP(FROM_UNIXTIME(UNIX_TIMESTAMP(now()) - 4838400))"); | ||
277 | rows = m_database.Join("GridUser", "GridUser.UserID", "INNER JOIN UserAccounts ON GridUser.UserID = UserAccounts.PrincipalID", | ||
278 | "Login > UNIX_TIMESTAMP(FROM_UNIXTIME(UNIX_TIMESTAMP(now()) - 4838400))", ""); | ||
279 | locIn = rows.Count; | ||
280 | ssi["locDay60"] = locIn.ToString(); | ||
281 | ssi["day60"] = HGin.ToString(); | ||
282 | HGin = HGin - locIn; | ||
283 | ssi["HGday60"] = HGin.ToString(); | ||
284 | |||
285 | foreach (DictionaryEntry h in headers) | ||
286 | { | ||
287 | if ("cookie" == h.Key.ToString()) | ||
288 | { | ||
289 | string[] cks = h.Value.ToString().Split(';'); | ||
290 | foreach (String c in cks) | ||
291 | { | ||
292 | string[] ck = c.Split('='); | ||
293 | cookies[ck[0].Trim(' ')] = ck[1].Trim(' '); | ||
294 | } | ||
295 | } | ||
296 | } | ||
297 | |||
298 | if ("POST" == method) | ||
299 | { | ||
300 | string[] bdy = body.Split('&'); | ||
301 | body = ""; | ||
302 | foreach (String bd in bdy) | ||
303 | { | ||
304 | string[] b = bd.Split('='); | ||
305 | if (b.Length == 0) | ||
306 | continue; | ||
307 | string n = System.Web.HttpUtility.UrlDecode(b[0]); | ||
308 | string v = ""; | ||
309 | if (b.Length > 1) | ||
310 | v = System.Web.HttpUtility.UrlDecode(b[1]); | ||
311 | fields[n] = bobbyTables(n, v); | ||
312 | body = body + "<p>" + n + " = " + v + "</p>\n"; | ||
313 | } | ||
314 | } | ||
315 | |||
316 | foreach (String q in query) | ||
317 | { | ||
318 | // m_log.InfoFormat("[WEB SERVICE]: {0} {1} query {2} = {3}", method, reqpath, q, (string) request[q]); | ||
319 | fields[q] = bobbyTables(q, (string) request[q]); | ||
320 | } | ||
321 | // foreach (DictionaryEntry h in headers) | ||
322 | // m_log.DebugFormat("[WEB SERVICE]: {0} {1} header {2} = {3}", method, reqpath, (string) h.Key, (string) h.Value); | ||
323 | // I dunno what these vars are or where they come from, never actually seen them. | ||
324 | // Ah, viewers send them, and they seem to be identical to the query that viewers also send. | ||
325 | // foreach (DictionaryEntry h in vars) | ||
326 | // m_log.InfoFormat("[WEB SERVICE]: {0} {1} var {2} = {3}", method, reqpath, (string) h.Key, (string) h.Value); | ||
327 | |||
328 | reply["int_response_code"] = 200; | ||
329 | |||
330 | if (("GET" == method) || ("HEAD" == method)) | ||
331 | { | ||
332 | if (File.Exists(path)) | ||
333 | { | ||
334 | DateTime dt = File.GetLastWriteTimeUtc(path); | ||
335 | string m = (string) mime[Path.GetExtension(path).ToLower()]; | ||
336 | reply["content_type"] = m; | ||
337 | if ((null == m) || ("text/" != m.Substring(0, 5))) | ||
338 | { | ||
339 | string ifdtr = (string) headers["if-modified-since"]; | ||
340 | if (null != ifdtr) | ||
341 | { | ||
342 | try | ||
343 | { | ||
344 | DateTime ifdt = DateTime.Parse(ifdtr, System.Globalization.CultureInfo.InvariantCulture); | ||
345 | if (0 >= DateTime.Compare(ifdt, dt)) | ||
346 | { | ||
347 | reply["int_response_code"] = 304; | ||
348 | m_log.InfoFormat("[WEB SERVICE]: If-Modified-Since is earlier or equal to Last-Modified, from {0}", reqpath); | ||
349 | reply["headers"] = replyHeaders; | ||
350 | if ("HEAD" == method) | ||
351 | { | ||
352 | reply.Remove("bin_response_data"); | ||
353 | reply.Remove("str_response_string"); | ||
354 | } | ||
355 | return reply; | ||
356 | } | ||
357 | } | ||
358 | catch (Exception) | ||
359 | { | ||
360 | m_log.WarnFormat("[WEB SERVICE]: Invalid If-Modified-Since header, ignoring it, from {0} - {1}", reqpath, ifdtr); | ||
361 | } | ||
362 | } | ||
363 | replyHeaders["Last-Modified"] = dt.ToString("R"); | ||
364 | reply["bin_response_data"] = File.ReadAllBytes(path); | ||
365 | } | ||
366 | else | ||
367 | { | ||
368 | replyHeaders["Cache-Control"] = "no-cache"; | ||
369 | StreamReader csr = File.OpenText(path); | ||
370 | string content = csr.ReadToEnd(); | ||
371 | // Slow and wasteful, but I'm expecting only tiny web files, not accessed very often. | ||
372 | foreach (DictionaryEntry v in ssi) | ||
373 | { | ||
374 | content = content.Replace("<!--#echo var=\"" + ((string) v.Key) + "\" -->", (string) v.Value); | ||
375 | } | ||
376 | reply["str_response_string"] = content; | ||
377 | csr.Close(); | ||
378 | } | ||
379 | } | ||
380 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
381 | else | ||
382 | { | ||
383 | if ("account.html" == file) | ||
384 | { | ||
385 | if (usedSSL) | ||
386 | reply["str_response_string"] = loginPage(null, ""); | ||
387 | else // Force HTTPS by redirecting. | ||
388 | { | ||
389 | reply["int_response_code"] = 200; | ||
390 | reply["content_type"] = "text/html"; | ||
391 | reply["str_response_string"] = "<html><title>404 Unknown page</title><head>" + | ||
392 | "<meta http-equiv=\"refresh\" content=\"0; URL=https://" + m_domain + ":" + m_https_port.ToString() + "/web/account.html\" />" + | ||
393 | "</head><body></body></html>"; | ||
394 | } | ||
395 | } | ||
396 | else | ||
397 | { | ||
398 | m_log.ErrorFormat("[WEB SERVICE]: Unable to read {0}.", reqpath); | ||
399 | reply["int_response_code"] = 404; | ||
400 | reply["content_type"] = "text/html"; | ||
401 | reply["str_response_string"] = "<html><title>404 Unknown page</title><head><link rel=\"shortcut icon\" href=\"SledjHamrIconSmall.png\"></head><body bgcolor=\"black\" text=\"white\" alink=\"red\" link=\"blue\" vlink=\"purple\">" + | ||
402 | "404 error, can't find the " + reqpath + " page.<p> </p></body></html>"; | ||
403 | } | ||
404 | } | ||
405 | */ | ||
406 | } | ||
407 | else if ("POST" == method) | ||
408 | { | ||
409 | |||
410 | // if ("account.html" == file) | ||
411 | // { | ||
412 | // string doit = fields["doit"].ToString(); | ||
413 | // string toke_n_munchie = ""; | ||
414 | // replyHeaders["Cache-Control"] = "no-cache"; | ||
415 | |||
416 | /* TODO - | ||
417 | Switch to using prepared SQL statements. | ||
418 | |||
419 | Actually authenticate them. | ||
420 | Deal with dictionary attacks by slowing down access on password failures etc. | ||
421 | |||
422 | Regenerate token on authentication. | ||
423 | Store users UUID. | ||
424 | |||
425 | Invalidate token on logout and password reset. | ||
426 | Logout when invalidating tokens. | ||
427 | |||
428 | Deal with validation and password reset emails, likely with the same code. | ||
429 | |||
430 | Deal with editing yourself. | ||
431 | Deal with editing others, but only as god. | ||
432 | */ | ||
433 | /* TODO - shelved for now, rewrite it in Lua for lighttpd after the release. | ||
434 | if ((null == cookies["toke_n_munchie"]) || (null == fields["toke_n_munchie"]) | ||
435 | || ("" == cookies["toke_n_munchie"].ToString()) || ("" == fields["toke_n_munchie"].ToString())) | ||
436 | toke_n_munchie = newSession(doit, headers, ref fields, ref replyHeaders); | ||
437 | else if (cookies["toke_n_munchie"].ToString() != fields["toke_n_munchie"].ToString()) | ||
438 | errors.Add("Invalid session."); | ||
439 | else | ||
440 | { | ||
441 | toke_n_munchie = cookies["toke_n_munchie"].ToString(); | ||
442 | Hashtable auth = m_auth[toke_n_munchie]; | ||
443 | if (null == auth) | ||
444 | { | ||
445 | errors.Add("Null session."); | ||
446 | m_log.InfoFormat("[WEB SERVICE]: Null session {0} - {1}.", toke_n_munchie, doit); | ||
447 | } | ||
448 | else | ||
449 | { | ||
450 | // TODO - maybe check if session has expired, but how long should they last? | ||
451 | if (auth["IP"].ToString() != headers["remote_addr"].ToString()) | ||
452 | errors.Add("Wrong IP for session."); | ||
453 | else | ||
454 | { | ||
455 | auth["time"] = DateTime.Now; | ||
456 | m_auth[toke_n_munchie] = auth; | ||
457 | m_log.InfoFormat("[WEB SERVICE]: New timestamp for session {0} - {1}.", toke_n_munchie, doit); | ||
458 | } | ||
459 | } | ||
460 | } | ||
461 | |||
462 | if (0 != errors.Count) | ||
463 | deleteSession(toke_n_munchie, doit, headers, ref fields, ref replyHeaders); | ||
464 | |||
465 | if (("https://" + m_domain + ":" + m_https_port.ToString() + "/web/account.html") != headers["referer"].ToString()) | ||
466 | errors.Add("Invalid referer."); | ||
467 | |||
468 | // Include a check for god names if we are creating a new account. | ||
469 | string[] names = validateName(("create" == doit) || ("confirm" == doit), fields, ref errors); | ||
470 | |||
471 | if ("logout" == doit) | ||
472 | { | ||
473 | deleteSession(toke_n_munchie, doit, headers, ref fields, ref replyHeaders); | ||
474 | errors.Add("Logged out."); | ||
475 | } | ||
476 | else if (("create" == doit) || ("confirm" == doit)) | ||
477 | { | ||
478 | validateEmail(fields, ref errors); | ||
479 | if ("confirm" == doit) | ||
480 | validatePassword(fields, ref errors); | ||
481 | if (0 == errors.Count) | ||
482 | { | ||
483 | // Check the account name doesn't exist yet. | ||
484 | // Which might be tricky, apparently names are not case sensitive on login, but stored with case in the database. | ||
485 | // I confirmed that, can log in no matter what case you use. | ||
486 | // UserAccounts FirstName and LastName fields are both varchar(64) utf8_general_ci. | ||
487 | // The MySQL docs say that the "_ci" bit means comparisons will be case insensitive. So that should work fine. | ||
488 | // No need for prepared SQL here, the names have already been checked. | ||
489 | if (0 != m_database.Count("UserAccounts", "FirstName = '" + names[0] + "' AND LastName = '" + names[1] + "'")) | ||
490 | errors.Add("Pick a different name."); | ||
491 | else if (("create" == doit)) | ||
492 | reply["str_response_string"] = accountCreationPage(fields, body); | ||
493 | else | ||
494 | { | ||
495 | var fromAddress = new MailAddress(m_email_from, (string) ssi["grid"]); | ||
496 | var toAddress = new MailAddress((string) fields["email"], (string) fields["name"]); | ||
497 | using (var message = new MailMessage(fromAddress, toAddress) | ||
498 | { | ||
499 | Subject = "validation email", | ||
500 | Body = "Should be a linky around here somewhere." | ||
501 | }) | ||
502 | { | ||
503 | m_smtp.Send(message); | ||
504 | } | ||
505 | reply["str_response_string"] = loggedOnPage(fields, body); | ||
506 | } | ||
507 | } | ||
508 | else | ||
509 | deleteSession(toke_n_munchie.ToString(), doit, headers, ref fields, ref replyHeaders); | ||
510 | } | ||
511 | else if ("cancel" == doit) | ||
512 | { | ||
513 | deleteSession(toke_n_munchie.ToString(), doit, headers, ref fields, ref replyHeaders); | ||
514 | errors.Add("Cancelled."); | ||
515 | } | ||
516 | else if ("list" == doit) | ||
517 | { | ||
518 | // TODO - should check if the user is a god before allowing this. | ||
519 | List< Hashtable > rows = m_database.Select("UserAccounts", | ||
520 | "CONCAT(FirstName,' ',LastName) as Name,UserTitle as Title,UserLevel as Level,UserFlags as Flags,PrincipalID as UUID", | ||
521 | "", "Name"); | ||
522 | reply["str_response_string"] = "<html><title>member accounts</title><head><link rel=\"shortcut icon\" href=\"SledjHamrIconSmall.png\"></head><body bgcolor=\"black\" text=\"white\" alink=\"red\" link=\"blue\" vlink=\"purple\">" + | ||
523 | table(rows, new string[5] {"Name", "Title", "Level", "Flags", "UUID"}, "member accounts", | ||
524 | "account.html?doit=edit&token=" + fields["toke_n_munchie"].ToString(), "UUID") + "<p>" + button("my account") + "</p></body></html>"; | ||
525 | } | ||
526 | else if ("login" == doit) | ||
527 | { | ||
528 | if (0 != errors.Count) | ||
529 | deleteSession(toke_n_munchie.ToString(), doit, headers, ref fields, ref replyHeaders); | ||
530 | else | ||
531 | reply["str_response_string"] = loggedOnPage(fields, body); | ||
532 | } | ||
533 | else | ||
534 | reply["str_response_string"] = loggedOnPage(fields, body); | ||
535 | */ | ||
536 | // } | ||
537 | // else // Not one of our dynamic pages. | ||
538 | // { | ||
539 | m_log.ErrorFormat("[WEB SERVICE]: No such POST target {0}.", path); | ||
540 | reply["int_response_code"] = 404; | ||
541 | reply["content_type"] = "text/html"; | ||
542 | reply["str_response_string"] = "<html><title>404 Unknown page</title><head><link rel=\"shortcut icon\" href=\"SledjHamrIconSmall.png\"></head><body bgcolor=\"black\" text=\"white\" alink=\"red\" link=\"blue\" vlink=\"purple\">" + | ||
543 | "404 error, can't find the " + reqpath + " page.<p> </p></body></html>"; | ||
544 | // } | ||
545 | } | ||
546 | else // Not one of our handled methods. | ||
547 | { | ||
548 | m_log.ErrorFormat("[WEB SERVICE]: UNKNOWN method {0} path {1}.", method, reqpath); | ||
549 | reply["int_response_code"] = 404; | ||
550 | reply["content_type"] = "text/html"; | ||
551 | reply["str_response_string"] = "<html><title>Unknown method</title><head><link rel=\"shortcut icon\" href=\"SledjHamrIconSmall.png\"></head><body bgcolor=\"black\" text=\"white\" alink=\"red\" link=\"blue\" vlink=\"purple\">" + | ||
552 | "HUH! For " + reqpath + " page.<p> </p></body></html>"; | ||
553 | } | ||
554 | |||
555 | reply["headers"] = replyHeaders; | ||
556 | if (0 != errors.Count) | ||
557 | { | ||
558 | string b = ""; | ||
559 | foreach (string e in errors) | ||
560 | b = b + "<p>" + e + "</p>"; | ||
561 | reply["str_response_string"] = loginPage(fields, b); | ||
562 | } | ||
563 | |||
564 | if ("HEAD" == method) | ||
565 | { | ||
566 | reply.Remove("bin_response_data"); | ||
567 | reply.Remove("str_response_string"); | ||
568 | } | ||
569 | return reply; | ||
570 | } | ||
571 | |||
572 | // Poor mans Bobby Tables protection. | ||
573 | private string bobbyTables(string n, string v) | ||
574 | { | ||
575 | if ((0 != String.Compare("password", n)) && (0 != String.Compare("psswrd", n))) | ||
576 | { | ||
577 | v = v.Replace("'", "_"); | ||
578 | v = v.Replace("\"", "_"); | ||
579 | v = v.Replace(";", "_"); | ||
580 | v = v.Replace("(", "_"); | ||
581 | v = v.Replace(")", "_"); | ||
582 | } | ||
583 | return v; | ||
584 | } | ||
585 | |||
586 | private string newSession(string doit, Hashtable headers, ref Hashtable fields, ref Hashtable replyHeaders) | ||
587 | { | ||
588 | // This is a little over the top, but apparently best practices. | ||
589 | string toke_n_munchie = Guid.NewGuid().ToString(); | ||
590 | string salt = Util.Md5Hash(UUID.Random().ToString()); | ||
591 | string hash = Util.Md5Hash(Util.Md5Hash(toke_n_munchie) + ":" + salt); | ||
592 | Hashtable auth = new Hashtable(); | ||
593 | auth["toke_n_munchie"] = toke_n_munchie; | ||
594 | auth["salt"] = salt; | ||
595 | auth["hash"] = hash; | ||
596 | auth["IP"] = headers["remote_addr"].ToString(); | ||
597 | auth["time"] = DateTime.Now; | ||
598 | auth["UUID"] = UUID.Zero; | ||
599 | m_auth[hash] = auth; | ||
600 | // For some odd reason, __Host- only works if "Path=/", and if no "Domain=", per the spec. | ||
601 | //replyHeaders["Set-Cookie"] = "__Host-toke_n_munchie=" + toke_n_munchie + "; HttpOnly; Path=/web/; SameSite=Strict; Secure;"; | ||
602 | replyHeaders["Set-Cookie"] = "toke_n_munchie=" + hash + "; HttpOnly; Path=/web/; SameSite=Strict; Secure;"; | ||
603 | fields["toke_n_munchie"] = hash; | ||
604 | toke_n_munchie = hash; | ||
605 | m_log.InfoFormat("[WEB SERVICE]: {0} New session {1} - {2}.", headers["remote_addr"].ToString(), toke_n_munchie, doit); | ||
606 | return toke_n_munchie; | ||
607 | } | ||
608 | |||
609 | private void deleteSession(string session, string doit, Hashtable headers, ref Hashtable fields, ref Hashtable replyHeaders) | ||
610 | { | ||
611 | m_log.InfoFormat("[WEB SERVICE]: {0} Deleted session {1} - {2}.", headers["remote_addr"].ToString(), session, doit); | ||
612 | m_auth.Remove(session); | ||
613 | fields.Remove("toke_n_munchie"); | ||
614 | replyHeaders["Set-Cookie"] = "toke_n_munchie=\"\"; HttpOnly; Path=/web/; SameSite=Strict; Secure; expires=Thu, 01 Jan 1970 00:00:00 GMT;"; | ||
615 | } | ||
616 | |||
617 | private void validateEmail(Hashtable fields, ref List<string> errors) | ||
618 | { | ||
619 | Regex rgxEmail = new Regex("^.+@.+\\..+$"); | ||
620 | if ((null == fields["email"]) || ("" == fields["email"].ToString())) | ||
621 | errors.Add("Please supply an email address."); | ||
622 | else if (!rgxEmail.IsMatch(fields["email"].ToString())) | ||
623 | errors.Add("Please supply a proper email address."); | ||
624 | else if (!Uri.IsWellFormedUriString("mailto:" + fields["email"].ToString(), System.UriKind.Absolute)) | ||
625 | errors.Add("Please supply a valid email address."); | ||
626 | |||
627 | // Actually lookup the domain name, looking for any sort of record. | ||
628 | string e = fields["email"].ToString().Split('@')[1]; | ||
629 | IPHostEntry ip = null; | ||
630 | try | ||
631 | { | ||
632 | ip = Dns.GetHostEntry(e); | ||
633 | } | ||
634 | catch(Exception) | ||
635 | { | ||
636 | } | ||
637 | if (null == ip) | ||
638 | errors.Add("Can't find that email server, try a different email address."); | ||
639 | } | ||
640 | |||
641 | private string[] validateName(bool godCheck, Hashtable fields, ref List<string> errors) | ||
642 | { | ||
643 | Regex rgxName = new Regex("^[a-zA-Z0-9]+$"); | ||
644 | string[] names = {"", ""}; | ||
645 | if ((null == fields["name"]) || ("" == fields["name"].ToString())) | ||
646 | errors.Add("Please supply an account name."); | ||
647 | else | ||
648 | { | ||
649 | names = fields["name"].ToString().Split(' '); | ||
650 | if (2 != names.Length) | ||
651 | errors.Add("Names have to be two words."); | ||
652 | // SL docs say 31 characters each for first and last name. UserAccounts table is varchar(64) each. userinfo has varchar(50) for the combined name. | ||
653 | // The userinfo table seems to be obsolete. | ||
654 | // Singularity at least limits the total name to 64. | ||
655 | // I can't find any limitations on characters allowed, but I only ever see letters and digits used. Case is stored, but not significant. | ||
656 | // OpenSims "create user" console command doesn't sanitize it at all, even crashing on some names. | ||
657 | else | ||
658 | { | ||
659 | if ((31 < names[0].Length) || (31 < names[1].Length)) | ||
660 | errors.Add("First and last names are limited to 31 letters each."); | ||
661 | if ((!rgxName.IsMatch(names[0])) || (!rgxName.IsMatch(names[1]))) | ||
662 | errors.Add("First and last names are limited to letters and digits."); | ||
663 | if (godCheck) | ||
664 | { | ||
665 | // Check and disallow god names, those are done in the console. | ||
666 | bool f = false; | ||
667 | try | ||
668 | { | ||
669 | if (null != m_fullNames[names[0] + " " + names[1]]) | ||
670 | { | ||
671 | f = true; | ||
672 | errors.Add("Pick another name."); | ||
673 | } | ||
674 | } | ||
675 | catch (Exception) | ||
676 | { | ||
677 | } | ||
678 | if (!f) | ||
679 | { | ||
680 | try | ||
681 | { | ||
682 | if (null != m_firstNames[names[0]]) | ||
683 | errors.Add("Pick another first name."); | ||
684 | } | ||
685 | catch (Exception) | ||
686 | { | ||
687 | } | ||
688 | try | ||
689 | { | ||
690 | if (null != m_firstNames[names[1]]) | ||
691 | errors.Add("Pick another last name."); | ||
692 | } | ||
693 | catch (Exception) | ||
694 | { | ||
695 | } | ||
696 | } | ||
697 | } | ||
698 | } | ||
699 | } | ||
700 | return names; | ||
701 | } | ||
702 | |||
703 | private void validatePassword(Hashtable fields, ref List<string> errors) | ||
704 | { | ||
705 | if ((null == fields["password"]) || ("" == fields["password"].ToString())) | ||
706 | errors.Add("Please supply a password."); | ||
707 | else if ((null == fields["psswrd"]) || ("" == fields["psswrd"].ToString())) | ||
708 | errors.Add("Please supply a password."); | ||
709 | else if (0 != String.Compare(fields["psswrd"].ToString(), fields["password"].ToString())) | ||
710 | errors.Add("Passwords are not the same."); | ||
711 | } | ||
712 | |||
713 | private string loginPage(Hashtable fields, string message) | ||
714 | { | ||
715 | string n = ""; | ||
716 | string e = ""; | ||
717 | if (null != fields) | ||
718 | { | ||
719 | n = fields["name"].ToString(); | ||
720 | e = fields["email"].ToString(); | ||
721 | } | ||
722 | return header(ssi["grid"] + " account") | ||
723 | + form("account.html", "", | ||
724 | text("text", "name", "name", n, 63, true) | ||
725 | + text("email", "email", "email", e, 254, false) | ||
726 | + text("password", "password", "password", "", 0, true) | ||
727 | + "Warning, the limit on password length is set by your viewer, some can't handle longer than 16 characters." | ||
728 | + button("create") | ||
729 | + button("login") | ||
730 | ) | ||
731 | + "<p>" + message + "</p>" | ||
732 | + footer(); | ||
733 | } | ||
734 | |||
735 | private string accountCreationPage(Hashtable fields, string message) | ||
736 | { | ||
737 | return header(ssi["grid"] + " account") | ||
738 | + "<h1>Creating " + ssi["grid"] + " account for " + fields["name"].ToString() + "</h1>" | ||
739 | + form("account.html", fields["toke_n_munchie"].ToString(), | ||
740 | hidden("name", fields["name"].ToString()) | ||
741 | + hidden("psswrd", fields["password"].ToString()) | ||
742 | + text("email", "An email will be sent to", "email", fields["email"].ToString(), 254, false) | ||
743 | + " to validate it, please double check this." | ||
744 | + text("password", "Re-enter your password", "password", "", 0, false) | ||
745 | + "Warning, the limit on password length is set by your viewer, some can't handle longer than 16 characters." | ||
746 | + button("confirm") | ||
747 | + button("cancel") | ||
748 | ) | ||
749 | + message | ||
750 | + footer(); | ||
751 | } | ||
752 | |||
753 | private string loggedOnPage(Hashtable fields, string message) | ||
754 | { | ||
755 | return header(ssi["grid"] + " account") | ||
756 | + "<h1>" + ssi["grid"] + " account for " + fields["name"].ToString() + "</h1>" | ||
757 | + form("account.html", fields["toke_n_munchie"].ToString(), | ||
758 | hidden("name", fields["name"].ToString()) | ||
759 | // + hidden("UUID", fields["UUID"].ToString()) | ||
760 | + text("email", "email", "email", fields["email"].ToString(), 254, true) | ||
761 | + text("password", "password", "password", "", 0, false) | ||
762 | + "Warning, the limit on password length is set by your viewer, some can't handle longer than 16 characters." | ||
763 | // + text("title", "text", "title", fields["title"].ToString(), 64, false) | ||
764 | + select("type", "type", | ||
765 | option("", false) | ||
766 | + option("approved", true) | ||
767 | + option("disabled", false) | ||
768 | + option("god", false) | ||
769 | ) | ||
770 | + button("delete") | ||
771 | + button("list") | ||
772 | + button("logout") | ||
773 | // + button("read") | ||
774 | + button("update") | ||
775 | ) | ||
776 | + message | ||
777 | + footer(); | ||
778 | } | ||
779 | |||
780 | private string header(string title) | ||
781 | { | ||
782 | return "<html>\n <head>\n <title>" + title + "</title>\n </head>\n <body>\n"; | ||
783 | } | ||
784 | |||
785 | private string table(List< Hashtable > rows, string[] fields, string caption, string URL, string id) | ||
786 | { | ||
787 | string tbl = "<table border=\"1\"><caption>" + caption + "</caption>"; | ||
788 | bool head = true; | ||
789 | string address = ""; | ||
790 | string addrend = ""; | ||
791 | foreach (Hashtable row in rows) | ||
792 | { | ||
793 | if (0 == fields.Length) | ||
794 | { | ||
795 | int c = 0; | ||
796 | foreach (DictionaryEntry r in row) | ||
797 | c++; | ||
798 | fields = new string[c]; | ||
799 | c = 0; | ||
800 | foreach (DictionaryEntry r in row) | ||
801 | fields[c++] = (string) r.Key; | ||
802 | } | ||
803 | string line = "<tr>"; | ||
804 | address = ""; | ||
805 | if ("" != URL) | ||
806 | { | ||
807 | address = "<a href=\"" + URL; | ||
808 | addrend = "</a>"; | ||
809 | } | ||
810 | if ("" != id) | ||
811 | address = address + "&" + id + "=" + row[id] + "\">"; | ||
812 | if (head) | ||
813 | { | ||
814 | foreach (string s in fields) | ||
815 | line = line + "<th>" + s + "</th>"; | ||
816 | tbl = tbl + line + "</tr>\n"; | ||
817 | head = false; | ||
818 | } | ||
819 | line = "<tr>"; | ||
820 | foreach (string s in fields) | ||
821 | { | ||
822 | if (s == id) | ||
823 | line = line + "<td>" + address + row[s] + addrend + "</td>"; | ||
824 | else | ||
825 | line = line + "<td>" + row[s] + "</td>"; | ||
826 | } | ||
827 | tbl = tbl + line + "</tr>\n"; | ||
828 | } | ||
829 | return tbl + "</table>"; | ||
830 | } | ||
831 | |||
832 | private string form(string action, string token, string form) | ||
833 | { | ||
834 | return " <form action=\"" + action + "\" method=\"POST\">\n" + hidden("toke_n_munchie", token) + form + " </form>\n"; | ||
835 | } | ||
836 | |||
837 | private string hidden(string name, string val) | ||
838 | { | ||
839 | return " <input type=\"hidden\" name=\"" + name + "\" value=\"" + val + "\">\n"; | ||
840 | } | ||
841 | |||
842 | private string text(string type, string title, string name, string val, int max, bool required) | ||
843 | { | ||
844 | string extra = ""; | ||
845 | if (0 < max) | ||
846 | extra = extra + " maxlength=\"" + max.ToString() + "\""; | ||
847 | if (required) | ||
848 | extra = extra + " required"; | ||
849 | if ("" != val) | ||
850 | val = "value=\"" + val + "\""; | ||
851 | return " <p>" + title + " : <input type=\"" + type + "\" name=\"" + name + "\"" + val + extra + "></p>\n"; | ||
852 | } | ||
853 | |||
854 | private string select(string title, string name, string options) | ||
855 | { | ||
856 | return " <p>" + title + " : \n <select name=\"" + name + "\">\n" + options + " </select>\n </p>\n"; | ||
857 | } | ||
858 | |||
859 | private string option(string title, bool selected) | ||
860 | { | ||
861 | string sel = ""; | ||
862 | if (selected) | ||
863 | sel = " selected"; | ||
864 | return " <option value=\"" + title + "\"" + sel + ">" + title + "</option>\n"; | ||
865 | } | ||
866 | |||
867 | private string button(string title) | ||
868 | { | ||
869 | return " <button type=\"submit\" name=\"doit\" value=\"" + title + "\">" + title + "</button>\n"; | ||
870 | } | ||
871 | |||
872 | private string footer() | ||
873 | { | ||
874 | return " </body>\n</html>\n"; | ||
875 | } | ||
876 | |||
877 | } | ||
878 | } | ||
diff --git a/OpenSim/Server/Properties/AssemblyInfo.cs b/OpenSim/Server/Properties/AssemblyInfo.cs index ee45e10..6d15078 100644 --- a/OpenSim/Server/Properties/AssemblyInfo.cs +++ b/OpenSim/Server/Properties/AssemblyInfo.cs | |||
@@ -2,7 +2,7 @@ | |||
2 | using System.Runtime.CompilerServices; | 2 | using System.Runtime.CompilerServices; |
3 | using System.Runtime.InteropServices; | 3 | using System.Runtime.InteropServices; |
4 | 4 | ||
5 | // General Information about an assembly is controlled through the following | 5 | // General Information about an assembly is controlled through the following |
6 | // set of attributes. Change these attribute values to modify the information | 6 | // set of attributes. Change these attribute values to modify the information |
7 | // associated with an assembly. | 7 | // associated with an assembly. |
8 | [assembly: AssemblyTitle("Robust")] | 8 | [assembly: AssemblyTitle("Robust")] |
@@ -14,8 +14,8 @@ using System.Runtime.InteropServices; | |||
14 | [assembly: AssemblyTrademark("")] | 14 | [assembly: AssemblyTrademark("")] |
15 | [assembly: AssemblyCulture("")] | 15 | [assembly: AssemblyCulture("")] |
16 | 16 | ||
17 | // Setting ComVisible to false makes the types in this assembly not visible | 17 | // Setting ComVisible to false makes the types in this assembly not visible |
18 | // to COM components. If you need to access a type in this assembly from | 18 | // to COM components. If you need to access a type in this assembly from |
19 | // COM, set the ComVisible attribute to true on that type. | 19 | // COM, set the ComVisible attribute to true on that type. |
20 | [assembly: ComVisible(false)] | 20 | [assembly: ComVisible(false)] |
21 | 21 | ||
@@ -25,7 +25,7 @@ using System.Runtime.InteropServices; | |||
25 | // Version information for an assembly consists of the following four values: | 25 | // Version information for an assembly consists of the following four values: |
26 | // | 26 | // |
27 | // Major Version | 27 | // Major Version |
28 | // Minor Version | 28 | // Minor Version |
29 | // Build Number | 29 | // Build Number |
30 | // Revision | 30 | // Revision |
31 | // | 31 | // |
diff --git a/OpenSim/Server/ServerMain.cs b/OpenSim/Server/ServerMain.cs index 65e9287..30e9297 100644 --- a/OpenSim/Server/ServerMain.cs +++ b/OpenSim/Server/ServerMain.cs | |||
@@ -29,7 +29,9 @@ using Nini.Config; | |||
29 | using log4net; | 29 | using log4net; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System; | 31 | using System; |
32 | using System.Net; | ||
32 | using System.Collections.Generic; | 33 | using System.Collections.Generic; |
34 | using OpenSim.Framework; | ||
33 | using OpenSim.Framework.Servers; | 35 | using OpenSim.Framework.Servers; |
34 | using OpenSim.Framework.Servers.HttpServer; | 36 | using OpenSim.Framework.Servers.HttpServer; |
35 | using OpenSim.Server.Base; | 37 | using OpenSim.Server.Base; |
@@ -53,8 +55,14 @@ namespace OpenSim.Server | |||
53 | 55 | ||
54 | public static int Main(string[] args) | 56 | public static int Main(string[] args) |
55 | { | 57 | { |
58 | ServicePointManager.DefaultConnectionLimit = 64; | ||
59 | ServicePointManager.Expect100Continue = false; | ||
60 | ServicePointManager.UseNagleAlgorithm = false; | ||
61 | |||
62 | try { ServicePointManager.DnsRefreshTimeout = 300000; } catch { } | ||
63 | |||
56 | m_Server = new HttpServerBase("R.O.B.U.S.T.", args); | 64 | m_Server = new HttpServerBase("R.O.B.U.S.T.", args); |
57 | 65 | ||
58 | string registryLocation; | 66 | string registryLocation; |
59 | 67 | ||
60 | IConfig serverConfig = m_Server.Config.Configs["Startup"]; | 68 | IConfig serverConfig = m_Server.Config.Configs["Startup"]; |
@@ -65,7 +73,7 @@ namespace OpenSim.Server | |||
65 | } | 73 | } |
66 | 74 | ||
67 | string connList = serverConfig.GetString("ServiceConnectors", String.Empty); | 75 | string connList = serverConfig.GetString("ServiceConnectors", String.Empty); |
68 | 76 | ||
69 | registryLocation = serverConfig.GetString("RegistryLocation","."); | 77 | registryLocation = serverConfig.GetString("RegistryLocation","."); |
70 | 78 | ||
71 | IConfig servicesConfig = m_Server.Config.Configs["ServiceList"]; | 79 | IConfig servicesConfig = m_Server.Config.Configs["ServiceList"]; |
@@ -151,8 +159,15 @@ namespace OpenSim.Server | |||
151 | 159 | ||
152 | loader = new PluginLoader(m_Server.Config, registryLocation); | 160 | loader = new PluginLoader(m_Server.Config, registryLocation); |
153 | 161 | ||
162 | m_log.InfoFormat("[SERVER]: INITIALIZATION COMPLETE FOR ROBUST"); | ||
163 | |||
154 | int res = m_Server.Run(); | 164 | int res = m_Server.Run(); |
155 | 165 | ||
166 | if(m_Server != null) | ||
167 | m_Server.Shutdown(); | ||
168 | |||
169 | Util.StopThreadPool(); | ||
170 | |||
156 | Environment.Exit(res); | 171 | Environment.Exit(res); |
157 | 172 | ||
158 | return 0; | 173 | return 0; |