diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateModule.cs index c8b9032c36..fc083d69da 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateModule.cs @@ -95,7 +95,7 @@ namespace OpenSim.Region.CoreModules.World.Estate // Instantiate the request handler IHttpServer server = MainServer.GetHttpServer(port); - server.AddStreamHandler(new EstateRequestHandler(this, token)); + server.AddSimpleStreamHandler(new EstateSimpleRequestHandler(this, token)); } public void PostInitialise() diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateRequestHandler.cs b/OpenSim/Region/CoreModules/World/Estate/EstateRequestHandler.cs index 5eda8ab02b..10653ea100 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateRequestHandler.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateRequestHandler.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Net; using System.Reflection; using System.Xml; @@ -42,7 +43,7 @@ using log4net; namespace OpenSim.Region.CoreModules.World.Estate { - public class EstateRequestHandler : BaseStreamHandler + public class EstateSimpleRequestHandler :SimpleStreamHandler { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -50,62 +51,83 @@ namespace OpenSim.Region.CoreModules.World.Estate protected Object m_RequestLock = new Object(); private string token; - public EstateRequestHandler(EstateModule fmodule, string _token) - : base("POST", "/estate") + public EstateSimpleRequestHandler(EstateModule fmodule, string _token) : base("/estate") { m_EstateModule = fmodule; token = _token; } - protected override byte[] ProcessRequest(string path, Stream requestData, - IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) + protected override void ProcessRequest(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) { - string body; - using(StreamReader sr = new StreamReader(requestData)) - body = sr.ReadToEnd(); + httpResponse.KeepAlive = false; + if (httpRequest.HttpMethod != "POST") + { + httpResponse.StatusCode = (int)HttpStatusCode.NotFound; + return; + } - body = body.Trim(); + httpResponse.StatusCode = (int)HttpStatusCode.OK; // m_log.DebugFormat("[XESTATE HANDLER]: query String: {0}", body); try { + string body; + using (StreamReader sr = new StreamReader(httpRequest.InputStream)) + body = sr.ReadToEnd(); + + body = body.Trim(); lock (m_RequestLock) { - Dictionary request = - ServerUtils.ParseQueryString(body); + Dictionary request = ServerUtils.ParseQueryString(body); - if (!request.ContainsKey("METHOD")) - return FailureResult(); + bool fail = true; + while(true) + { + if (!request.ContainsKey("METHOD")) + break; - if (!request.ContainsKey("TOKEN")) - return FailureResult(); + if (!request.ContainsKey("TOKEN")) + break; - string reqToken = request["TOKEN"].ToString(); - request.Remove("TOKEN"); + string reqToken = request["TOKEN"].ToString(); - if(token != reqToken) - return FailureResult(); + if(token != reqToken) + break; + + fail = false; + break; + } + if(fail) + { + httpResponse.RawBuffer = FailureResult(); + return; + } string method = request["METHOD"].ToString(); request.Remove("METHOD"); + request.Remove("TOKEN"); try { m_EstateModule.InInfoUpdate = false; - switch (method) { case "update_covenant": - return UpdateCovenant(request); + httpResponse.RawBuffer = UpdateCovenant(request); + return; case "update_estate": - return UpdateEstate(request); + httpResponse.RawBuffer = UpdateEstate(request); + return; case "estate_message": - return EstateMessage(request); + httpResponse.RawBuffer = EstateMessage(request); + return; case "teleport_home_one_user": - return TeleportHomeOneUser(request); + httpResponse.RawBuffer = TeleportHomeOneUser(request); + return; case "teleport_home_all_users": - return TeleportHomeAllUsers(request); + httpResponse.RawBuffer = TeleportHomeAllUsers(request); + return; } } finally @@ -119,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Estate m_log.Debug("[XESTATE]: Exception {0}" + e.ToString()); } - return FailureResult(); + httpResponse.RawBuffer = FailureResult(); } byte[] TeleportHomeAllUsers(Dictionary request)