diff options
Diffstat (limited to 'OpenSim/ApplicationPlugins/Rest/RestPlugin.cs')
-rw-r--r-- | OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs index 4b8cdc1..f1ca83d 100644 --- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | |||
@@ -66,7 +66,7 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
66 | private string _prefix; // URL prefix below | 66 | private string _prefix; // URL prefix below |
67 | // which all REST URLs | 67 | // which all REST URLs |
68 | // are living | 68 | // are living |
69 | private StringWriter _sw = null; | 69 | private StringWriter _sw = null; |
70 | private XmlTextWriter _xw = null; | 70 | private XmlTextWriter _xw = null; |
71 | 71 | ||
72 | private string _godkey; | 72 | private string _godkey; |
@@ -240,7 +240,8 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
240 | } | 240 | } |
241 | } | 241 | } |
242 | 242 | ||
243 | private List<RestStreamHandler> _handlers = new List<RestStreamHandler>(); | 243 | private List<RestStreamHandler> _handlers = new List<RestStreamHandler>(); |
244 | private Dictionary<string, IHttpAgentHandler> _agents = new Dictionary<string, IHttpAgentHandler>(); | ||
244 | 245 | ||
245 | /// <summary> | 246 | /// <summary> |
246 | /// Add a REST stream handler to the underlying HTTP server. | 247 | /// Add a REST stream handler to the underlying HTTP server. |
@@ -271,15 +272,39 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
271 | /// </summary> | 272 | /// </summary> |
272 | /// <param name="agentName">name of agent handler</param> | 273 | /// <param name="agentName">name of agent handler</param> |
273 | /// <param name="handler">agent handler method</param> | 274 | /// <param name="handler">agent handler method</param> |
274 | /// <returns>true when the plugin is disabled or the agent | 275 | /// <returns>false when the plugin is disabled or the agent |
275 | /// handler could not be added..</returns> | 276 | /// handler could not be added. Any generated exceptions are |
277 | /// allowed to drop through to the caller, i.e. ArgumentException. | ||
278 | /// </returns> | ||
276 | public bool AddAgentHandler(string agentName, IHttpAgentHandler handler) | 279 | public bool AddAgentHandler(string agentName, IHttpAgentHandler handler) |
277 | { | 280 | { |
278 | if (!IsEnabled) return false; | 281 | if (!IsEnabled) return false; |
282 | _agents.Add(agentName, handler); | ||
279 | return _httpd.AddAgentHandler(agentName, handler); | 283 | return _httpd.AddAgentHandler(agentName, handler); |
280 | } | 284 | } |
281 | 285 | ||
282 | /// <summary> | 286 | /// <summary> |
287 | /// Remove a powerful Agent handler from the underlying HTTP | ||
288 | /// server. | ||
289 | /// </summary> | ||
290 | /// <param name="agentName">name of agent handler</param> | ||
291 | /// <param name="handler">agent handler method</param> | ||
292 | /// <returns>false when the plugin is disabled or the agent | ||
293 | /// handler could not be removed. Any generated exceptions are | ||
294 | /// allowed to drop through to the caller, i.e. KeyNotFound. | ||
295 | /// </returns> | ||
296 | public bool RemoveAgentHandler(string agentName, IHttpAgentHandler handler) | ||
297 | { | ||
298 | if (!IsEnabled) return false; | ||
299 | if(_agents[agentName] == handler) | ||
300 | { | ||
301 | _agents.Remove(agentName); | ||
302 | return _httpd.RemoveAgentHandler(agentName, handler); | ||
303 | } | ||
304 | return false; | ||
305 | } | ||
306 | |||
307 | /// <summary> | ||
283 | /// Check whether the HTTP request came from god; that is, is | 308 | /// Check whether the HTTP request came from god; that is, is |
284 | /// the god_key as configured in the config section supplied | 309 | /// the god_key as configured in the config section supplied |
285 | /// via X-OpenSim-Godkey? | 310 | /// via X-OpenSim-Godkey? |
@@ -316,19 +341,30 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
316 | _httpd.RemoveStreamHandler(h.HttpMethod, h.Path); | 341 | _httpd.RemoveStreamHandler(h.HttpMethod, h.Path); |
317 | } | 342 | } |
318 | _handlers = null; | 343 | _handlers = null; |
344 | foreach (KeyValuePair<string,IHttpAgentHandler> h in _agents) | ||
345 | { | ||
346 | _httpd.RemoveAgentHandler(h.Key,h.Value); | ||
347 | } | ||
348 | _agents = null; | ||
319 | } | 349 | } |
320 | 350 | ||
321 | /// <summary> | 351 | /// <summary> |
322 | /// Return a failure message. | 352 | /// Return a failure message. |
323 | /// </summary> | 353 | /// </summary> |
324 | /// <param name="method">origin of the failure message</param> | 354 | /// <param name="method">origin of the failure message</param> |
325 | /// <param name="message>failure message</param> | 355 | /// <param name="message">failure message</param> |
326 | /// <remarks>This should probably set a return code as | 356 | /// <remarks>This should probably set a return code as |
327 | /// well. (?)</remarks> | 357 | /// well. (?)</remarks> |
328 | protected string Failure(string method, string message) | 358 | protected string Failure(OSHttpResponse response, OSHttpStatusCode status, |
359 | string method, string format, params string[] msg) | ||
329 | { | 360 | { |
330 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, message); | 361 | string m = String.Format(format, msg); |
331 | return String.Format("<error>{0}</error>", message); | 362 | |
363 | response.StatusCode = (int)status; | ||
364 | response.StatusDescription = m; | ||
365 | |||
366 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, m); | ||
367 | return String.Format("<error>{0}</error>", m); | ||
332 | } | 368 | } |
333 | 369 | ||
334 | /// <summary> | 370 | /// <summary> |
@@ -338,8 +374,14 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
338 | /// <param name="e">exception causing the failure message</param> | 374 | /// <param name="e">exception causing the failure message</param> |
339 | /// <remarks>This should probably set a return code as | 375 | /// <remarks>This should probably set a return code as |
340 | /// well. (?)</remarks> | 376 | /// well. (?)</remarks> |
341 | public string Failure(string method, Exception e) | 377 | public string Failure(OSHttpResponse response, OSHttpStatusCode status, |
378 | string method, Exception e) | ||
342 | { | 379 | { |
380 | string m = String.Format("exception occurred: {0}", e.Message); | ||
381 | |||
382 | response.StatusCode = (int)status; | ||
383 | response.StatusDescription = m; | ||
384 | |||
343 | m_log.DebugFormat("{0} {1} failed: {2}", MsgID, method, e.ToString()); | 385 | m_log.DebugFormat("{0} {1} failed: {2}", MsgID, method, e.ToString()); |
344 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, e.Message); | 386 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, e.Message); |
345 | 387 | ||