OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
DataRequestHandler.cs
Go to the documentation of this file.
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 
29 using System.Collections;
30 using System.Reflection;
31 using System.Xml;
32 using log4net;
33 using OpenMetaverse;
34 using OpenSim.Framework;
35 using OpenSim.Framework.Capabilities;
36 using OpenSim.Framework.Servers;
37 using OpenSim.Framework.Servers.HttpServer;
38 using OpenSim.Region.Framework.Scenes;
40 
41 namespace OpenSim.Region.DataSnapshot
42 {
43  public class DataRequestHandler
44  {
45 // private Scene m_scene = null;
46  private DataSnapshotManager m_externalData = null;
47  private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 
49  public DataRequestHandler(Scene scene, DataSnapshotManager externalData)
50  {
51 // m_scene = scene;
52  m_externalData = externalData;
53 
54  //Register HTTP handler
55  if (MainServer.Instance.AddHTTPHandler("collector", OnGetSnapshot))
56  {
57  m_log.Info("[DATASNAPSHOT]: Set up snapshot service");
58  }
59  // Register validation callback handler
60  MainServer.Instance.AddHTTPHandler("validate", OnValidate);
61 
62  }
63 
64  public Hashtable OnGetSnapshot(Hashtable keysvals)
65  {
66  m_log.Debug("[DATASNAPSHOT] Received collection request");
67  Hashtable reply = new Hashtable();
68  int statuscode = 200;
69 
70  string snapObj = (string)keysvals["region"];
71 
72  XmlDocument response = m_externalData.GetSnapshot(snapObj);
73 
74  reply["str_response_string"] = response.OuterXml;
75  reply["int_response_code"] = statuscode;
76  reply["content_type"] = "text/xml";
77 
78  return reply;
79  }
80 
81  public Hashtable OnValidate(Hashtable keysvals)
82  {
83  m_log.Debug("[DATASNAPSHOT] Received validation request");
84  Hashtable reply = new Hashtable();
85  int statuscode = 200;
86 
87  string secret = (string)keysvals["secret"];
88  if (secret == m_externalData.Secret.ToString())
89  statuscode = 403;
90 
91  reply["str_response_string"] = string.Empty;
92  reply["int_response_code"] = statuscode;
93  reply["content_type"] = "text/plain";
94 
95  return reply;
96  }
97 
98  }
99 }
bool AddHTTPHandler(string methodName, GenericHTTPMethod handler)
Add a handler for an HTTP request.
Interactive OpenSim region server
Definition: OpenSim.cs:55
static BaseHttpServer Instance
Set the main HTTP server instance.
Definition: MainServer.cs:83
OpenSim.Framework.Capabilities.Caps Caps
DataRequestHandler(Scene scene, DataSnapshotManager externalData)