From 05f098be569bf77eff06976c238e0b054b7db4bf Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 26 Apr 2020 18:11:34 +0100 Subject: [PATCH] change region objecthandlers --- .../Handlers/Simulation/ObjectHandlers.cs | 148 +++++++++--------- .../SimulationServiceInConnector.cs | 2 +- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs b/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs index 1b545acbf0..733f10d239 100644 --- a/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/ObjectHandlers.cs @@ -28,6 +28,7 @@ using System; using System.Collections; using System.IO; +using System.IO.Compression; using System.Reflection; using System.Net; using System.Text; @@ -47,88 +48,87 @@ using log4net; namespace OpenSim.Server.Handlers.Simulation { - public class ObjectHandler + public class ObjectSimpleHandler : SimpleStreamHandler { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private ISimulationService m_SimulationService; + protected bool m_Proxy = false; - public ObjectHandler() { } - - public ObjectHandler(ISimulationService sim) + public ObjectSimpleHandler(ISimulationService service) : base("/object") { - m_SimulationService = sim; + m_SimulationService = service; } - public Hashtable Handler(Hashtable request) + protected override void ProcessRequest(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) { - //m_log.Debug("[CONNECTION DEBUGGING]: ObjectHandler Called"); + httpResponse.KeepAlive = false; - //m_log.Debug("---------------------------"); - //m_log.Debug(" >> uri=" + request["uri"]); - //m_log.Debug(" >> content-type=" + request["content-type"]); - //m_log.Debug(" >> http-method=" + request["http-method"]); - //m_log.Debug("---------------------------\n"); - - Culture.SetCurrentCulture(); - - Hashtable responsedata = new Hashtable(); - responsedata["content_type"] = "text/html"; - - UUID objectID; - UUID regionID; - string action; - if (!Utils.GetParams((string)request["uri"], out objectID, out regionID, out action)) + if (m_SimulationService == null) { - m_log.InfoFormat("[OBJECT HANDLER]: Invalid parameters for object message {0}", request["uri"]); - responsedata["int_response_code"] = 404; - responsedata["str_response_string"] = "false"; - - return responsedata; - } - - try - { - // Next, let's parse the verb - string method = (string)request["http-method"]; - if (method.Equals("POST")) - { - DoObjectPost(request, responsedata, regionID); - return responsedata; - } - //else if (method.Equals("DELETE")) - //{ - // DoObjectDelete(request, responsedata, agentID, action, regionHandle); - // return responsedata; - //} - else - { - m_log.InfoFormat("[OBJECT HANDLER]: method {0} not supported in object message", method); - responsedata["int_response_code"] = HttpStatusCode.MethodNotAllowed; - responsedata["str_response_string"] = "Method not allowed"; - - return responsedata; - } - } - catch (Exception e) - { - m_log.WarnFormat("[OBJECT HANDLER]: Caught exception {0}", e.StackTrace); - responsedata["int_response_code"] = HttpStatusCode.InternalServerError; - responsedata["str_response_string"] = "Internal server error"; - - return responsedata; - - } - } - - protected void DoObjectPost(Hashtable request, Hashtable responsedata, UUID regionID) - { - OSDMap args = Utils.GetOSDMap((string)request["body"]); - if (args == null) - { - responsedata["int_response_code"] = 400; - responsedata["str_response_string"] = "false"; + httpResponse.StatusCode = (int)HttpStatusCode.InternalServerError; + httpResponse.RawBuffer = Util.UTF8.GetBytes("false"); return; } + + /* this things are ignored + if (!Utils.GetParams(httpRequest.UriPath, out UUID objectID, out UUID regionID, out string action)) + { + m_log.InfoFormat("[OBJECT HANDLER]: Invalid parameters for object message {0}", httpRequest.UriPath); + httpResponse.StatusCode = (int)HttpStatusCode.NotFound; + return; + } + */ + + switch (httpRequest.HttpMethod) + { + case "POST": + { + OSDMap args = Deserialize(httpRequest); + if (args == null) + { + httpResponse.StatusCode = (int)HttpStatusCode.BadRequest; + httpResponse.RawBuffer = Util.UTF8.GetBytes("false"); + return; + } + DoObjectPost(args, httpResponse); + break; + } + case "DELETE": + default: + { + httpResponse.StatusCode = (int)HttpStatusCode.MethodNotAllowed; + return; + } + } + + } + + private OSDMap Deserialize(IOSHttpRequest httpRequest) + { + Stream inputStream = httpRequest.InputStream; + Stream innerStream = null; + try + { + if ((httpRequest.ContentType == "application/x-gzip" || httpRequest.Headers["Content-Encoding"] == "gzip") || (httpRequest.Headers["X-Content-Encoding"] == "gzip")) + { + innerStream = inputStream; + inputStream = new GZipStream(innerStream, CompressionMode.Decompress); + } + return (OSDMap)OSDParser.DeserializeJson(inputStream); + } + catch + { + return null; + } + finally + { + if (innerStream != null) + innerStream.Dispose(); + } + } + protected void DoObjectPost(OSDMap args, IOSHttpResponse httpResponse) + { // retrieve the input arguments int x = 0, y = 0; UUID uuid = UUID.Zero; @@ -169,8 +169,7 @@ namespace OpenSim.Server.Handlers.Simulation catch (Exception ex) { m_log.InfoFormat("[OBJECT HANDLER]: exception on deserializing scene object {0}", ex.Message); - responsedata["int_response_code"] = HttpStatusCode.BadRequest; - responsedata["str_response_string"] = "Bad request"; + httpResponse.StatusCode = (int)HttpStatusCode.BadRequest; return; } @@ -205,10 +204,11 @@ namespace OpenSim.Server.Handlers.Simulation catch (Exception e) { m_log.DebugFormat("[OBJECT HANDLER]: Exception in CreateObject: {0}", e.StackTrace); + result = false; } - responsedata["int_response_code"] = HttpStatusCode.OK; - responsedata["str_response_string"] = result.ToString(); + httpResponse.StatusCode = (int)HttpStatusCode.OK; + httpResponse.RawBuffer = Util.UTF8.GetBytes(result.ToString()); } // subclasses can override this diff --git a/OpenSim/Server/Handlers/Simulation/SimulationServiceInConnector.cs b/OpenSim/Server/Handlers/Simulation/SimulationServiceInConnector.cs index ef34c4aef2..743c6eb6a1 100644 --- a/OpenSim/Server/Handlers/Simulation/SimulationServiceInConnector.cs +++ b/OpenSim/Server/Handlers/Simulation/SimulationServiceInConnector.cs @@ -50,7 +50,7 @@ namespace OpenSim.Server.Handlers.Simulation // are pure binary and shoehorning that into a string with UTF-8 // encoding breaks it server.AddSimpleStreamHandler(new AgentSimpleHandler(m_LocalSimulationService), true); - server.AddHTTPHandler("/object/", new ObjectHandler(m_LocalSimulationService).Handler); + server.AddSimpleStreamHandler(new ObjectSimpleHandler(m_LocalSimulationService), true); } } }