Completely remove the prior implementation of the request event handling
on poll handlers. Introduce a new delegate on the PollServiceEventArgs that allow access to the request headers and body.remotes/origin/0.6.7-post-fixes
parent
c5be401d46
commit
dafe5bf05f
|
@ -198,7 +198,7 @@ namespace OpenSim.Framework.Console
|
|||
string uri = "/ReadResponses/" + sessionID.ToString() + "/";
|
||||
|
||||
m_Server.AddPollServiceHTTPHandler(uri, HandleHttpPoll,
|
||||
new PollServiceEventArgs(HasEvents, GetEvents, NoEvents,
|
||||
new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents,
|
||||
sessionID));
|
||||
|
||||
XmlDocument xmldoc = new XmlDocument();
|
||||
|
|
|
@ -256,17 +256,51 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
IHttpClientContext context = (IHttpClientContext)source;
|
||||
IHttpRequest request = args.Request;
|
||||
|
||||
|
||||
PollServiceEventArgs psEvArgs;
|
||||
|
||||
if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs))
|
||||
{
|
||||
// OSHttpRequest req = new OSHttpRequest(context, request);
|
||||
|
||||
PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request);
|
||||
// req.Headers["X-PollServiceID"] = psreq.RequestID.ToString();
|
||||
// HandleRequest(req, null);
|
||||
|
||||
if (psEvArgs.Request != null)
|
||||
{
|
||||
OSHttpRequest req = new OSHttpRequest(context, request);
|
||||
|
||||
Stream requestStream = req.InputStream;
|
||||
|
||||
Encoding encoding = Encoding.UTF8;
|
||||
StreamReader reader = new StreamReader(requestStream, encoding);
|
||||
|
||||
string requestBody = reader.ReadToEnd();
|
||||
|
||||
Hashtable keysvals = new Hashtable();
|
||||
Hashtable headervals = new Hashtable();
|
||||
|
||||
string[] querystringkeys = req.QueryString.AllKeys;
|
||||
string[] rHeaders = req.Headers.AllKeys;
|
||||
|
||||
keysvals.Add("body", requestBody);
|
||||
keysvals.Add("uri", req.RawUrl);
|
||||
keysvals.Add("content-type", req.ContentType);
|
||||
keysvals.Add("http-method", req.HttpMethod);
|
||||
|
||||
foreach (string queryname in querystringkeys)
|
||||
{
|
||||
keysvals.Add(queryname, req.QueryString[queryname]);
|
||||
}
|
||||
|
||||
foreach (string headername in rHeaders)
|
||||
{
|
||||
headervals[headername] = req.Headers[headername];
|
||||
}
|
||||
|
||||
keysvals.Add("headers",headervals);
|
||||
keysvals.Add("querystringkeys", querystringkeys);
|
||||
|
||||
psEvArgs.Request(psreq.RequestID, keysvals);
|
||||
}
|
||||
|
||||
m_PollServiceManager.Enqueue(psreq);
|
||||
//DoHTTPGruntWork(psEvArgs.NoEvents(),new OSHttpResponse(new HttpResponse(context, request)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -279,48 +313,16 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
{
|
||||
OSHttpRequest req = new OSHttpRequest(context, request);
|
||||
OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context);
|
||||
//resp.KeepAlive = req.KeepAlive;
|
||||
//m_log.Info("[Debug BASE HTTP SERVER]: Got Request");
|
||||
//HttpServerContextObj objstate= new HttpServerContextObj(req,resp);
|
||||
//ThreadPool.QueueUserWorkItem(new WaitCallback(ConvertIHttpClientContextToOSHttp), (object)objstate);
|
||||
HandleRequest(req, resp);
|
||||
}
|
||||
|
||||
public void ConvertIHttpClientContextToOSHttp(object stateinfo)
|
||||
{
|
||||
HttpServerContextObj objstate = (HttpServerContextObj)stateinfo;
|
||||
//OSHttpRequest request = new OSHttpRequest(objstate.context,objstate.req);
|
||||
//OSHttpResponse resp = new OSHttpResponse(new HttpServer.HttpResponse(objstate.context, objstate.req));
|
||||
|
||||
OSHttpRequest request = objstate.oreq;
|
||||
OSHttpResponse resp = objstate.oresp;
|
||||
//OSHttpResponse resp = new OSHttpResponse(new HttpServer.HttpResponse(objstate.context, objstate.req));
|
||||
|
||||
/*
|
||||
request.AcceptTypes = objstate.req.AcceptTypes;
|
||||
request.ContentLength = (long)objstate.req.ContentLength;
|
||||
request.Headers = objstate.req.Headers;
|
||||
request.HttpMethod = objstate.req.Method;
|
||||
request.InputStream = objstate.req.Body;
|
||||
foreach (string str in request.Headers)
|
||||
{
|
||||
if (str.ToLower().Contains("content-type: "))
|
||||
{
|
||||
request.ContentType = str.Substring(13, str.Length - 13);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//request.KeepAlive = objstate.req.
|
||||
foreach (HttpServer.HttpInput httpinput in objstate.req.QueryString)
|
||||
{
|
||||
request.QueryString.Add(httpinput.Name, httpinput[httpinput.Name]);
|
||||
}
|
||||
|
||||
//request.Query = objstate.req.//objstate.req.QueryString;
|
||||
//foreach (
|
||||
//request.QueryString = objstate.req.QueryString;
|
||||
|
||||
*/
|
||||
HandleRequest(request,resp);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ using System.Collections;
|
|||
using OpenMetaverse;
|
||||
namespace OpenSim.Framework.Servers.HttpServer
|
||||
{
|
||||
public delegate void RequestMethod(UUID requestID, Hashtable request);
|
||||
public delegate bool HasEventsMethod(UUID requestID, UUID pId);
|
||||
|
||||
public delegate Hashtable GetEventsMethod(UUID requestID, UUID pId, string request);
|
||||
|
@ -41,9 +42,11 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
public HasEventsMethod HasEvents;
|
||||
public GetEventsMethod GetEvents;
|
||||
public NoEventsMethod NoEvents;
|
||||
public RequestMethod Request;
|
||||
public UUID Id;
|
||||
public PollServiceEventArgs(HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents,UUID pId)
|
||||
public PollServiceEventArgs(RequestMethod Request, HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents,UUID pId)
|
||||
{
|
||||
Request = Request;
|
||||
HasEvents = pHasEvents;
|
||||
GetEvents = pGetEvents;
|
||||
NoEvents = pNoEvents;
|
||||
|
|
|
@ -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() + "/", EventQueuePoll, new PollServiceEventArgs(HasEvents, GetEvents, NoEvents, agentID));
|
||||
capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePoll, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID));
|
||||
|
||||
Random rnd = new Random(Environment.TickCount);
|
||||
lock (m_ids)
|
||||
|
|
Loading…
Reference in New Issue