From 69b76acce1abc87dbeafa6d0773637682ce4e1d4 Mon Sep 17 00:00:00 2001 From: Melanie Date: Mon, 21 Sep 2009 19:46:29 +0100 Subject: [PATCH] Make the poll service handler call the handler method on incoming requests. --- .../Servers/HttpServer/BaseHttpServer.cs | 43 ++++++++++++++----- .../EventQueue/EventQueueGetModule.cs | 7 ++- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 771ae05437..b73557fc8e 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -260,7 +260,9 @@ namespace OpenSim.Framework.Servers.HttpServer PollServiceEventArgs psEvArgs; if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs)) { + OSHttpRequest req = new OSHttpRequest(context, request); + HandleRequest(req, null); m_PollServiceManager.Enqueue(new PollServiceHttpRequest(psEvArgs, context, request)); //DoHTTPGruntWork(psEvArgs.NoEvents(),new OSHttpResponse(new HttpResponse(context, request))); } @@ -332,19 +334,26 @@ namespace OpenSim.Framework.Servers.HttpServer // probability event; if a request is matched it is normally expected to be // handled //m_log.Debug("[BASE HTTP SERVER]: Handling Request" + request.RawUrl); - IHttpAgentHandler agentHandler; - if (TryGetAgentHandler(request, response, out agentHandler)) + // If the response is null, then we're not going to respond here. This case + // triggers when we're at the head of a HTTP poll + // + if (response != null) { - if (HandleAgentRequest(agentHandler, request, response)) - { - return; - } - } + IHttpAgentHandler agentHandler; + if (TryGetAgentHandler(request, response, out agentHandler)) + { + if (HandleAgentRequest(agentHandler, request, response)) + { + return; + } + } + + //response.KeepAlive = true; + response.SendChunked = false; + } IRequestHandler requestHandler; - //response.KeepAlive = true; - response.SendChunked = false; string path = request.RawUrl; string handlerKey = GetHandlerKey(request.HttpMethod, path); @@ -357,7 +366,9 @@ namespace OpenSim.Framework.Servers.HttpServer // Okay, so this is bad, but should be considered temporary until everything is IStreamHandler. byte[] buffer = null; - response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. + if (response != null) + response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. + if (requestHandler is IStreamedRequestHandler) { @@ -411,7 +422,12 @@ namespace OpenSim.Framework.Servers.HttpServer //m_log.Warn("[HTTP]: " + requestBody); } - DoHTTPGruntWork(HTTPRequestHandler.Handle(path, keysvals), response); + // If we're not responding, we dont' care about the reply + // + if (response == null) + HTTPRequestHandler.Handle(path, keysvals); + else + DoHTTPGruntWork(HTTPRequestHandler.Handle(path, keysvals), response); return; } else @@ -426,6 +442,11 @@ namespace OpenSim.Framework.Servers.HttpServer } } + // The handler has run and we're not yet ready to respond, bail + // + if (response == null) + return; + request.InputStream.Close(); // HTTP IN support. The script engine taes it from here diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index 55ea4b7f30..57c5198fb5 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs @@ -316,7 +316,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue // This will persist this beyond the expiry of the caps handlers MainServer.Instance.AddPollServiceHTTPHandler( - capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePath2, new PollServiceEventArgs(HasEvents, GetEvents, NoEvents, agentID)); + capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePoll, new PollServiceEventArgs(HasEvents, GetEvents, NoEvents, agentID)); Random rnd = new Random(Environment.TickCount); lock (m_ids) @@ -491,6 +491,11 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue return responsedata; } + public Hashtable EventQueuePoll(Hashtable request) + { + return new Hashtable(); + } + public Hashtable EventQueuePath2(Hashtable request) { string capuuid = (string)request["uri"]; //path.Replace("/CAPS/EQG/","");