aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Servers')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs116
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs5
2 files changed, 55 insertions, 66 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 5d83e34..db87958 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -256,17 +256,51 @@ namespace OpenSim.Framework.Servers.HttpServer
256 IHttpClientContext context = (IHttpClientContext)source; 256 IHttpClientContext context = (IHttpClientContext)source;
257 IHttpRequest request = args.Request; 257 IHttpRequest request = args.Request;
258 258
259
260 PollServiceEventArgs psEvArgs; 259 PollServiceEventArgs psEvArgs;
260
261 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs)) 261 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs))
262 { 262 {
263 OSHttpRequest req = new OSHttpRequest(context, request);
264
265 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request); 263 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request);
266 req.Headers["X-PollServiceID"] = psreq.RequestID.ToString(); 264
267 HandleRequest(req, null); 265 if (psEvArgs.Request != null)
266 {
267 OSHttpRequest req = new OSHttpRequest(context, request);
268
269 Stream requestStream = req.InputStream;
270
271 Encoding encoding = Encoding.UTF8;
272 StreamReader reader = new StreamReader(requestStream, encoding);
273
274 string requestBody = reader.ReadToEnd();
275
276 Hashtable keysvals = new Hashtable();
277 Hashtable headervals = new Hashtable();
278
279 string[] querystringkeys = req.QueryString.AllKeys;
280 string[] rHeaders = req.Headers.AllKeys;
281
282 keysvals.Add("body", requestBody);
283 keysvals.Add("uri", req.RawUrl);
284 keysvals.Add("content-type", req.ContentType);
285 keysvals.Add("http-method", req.HttpMethod);
286
287 foreach (string queryname in querystringkeys)
288 {
289 keysvals.Add(queryname, req.QueryString[queryname]);
290 }
291
292 foreach (string headername in rHeaders)
293 {
294 headervals[headername] = req.Headers[headername];
295 }
296
297 keysvals.Add("headers",headervals);
298 keysvals.Add("querystringkeys", querystringkeys);
299
300 psEvArgs.Request(psreq.RequestID, keysvals);
301 }
302
268 m_PollServiceManager.Enqueue(psreq); 303 m_PollServiceManager.Enqueue(psreq);
269 //DoHTTPGruntWork(psEvArgs.NoEvents(),new OSHttpResponse(new HttpResponse(context, request)));
270 } 304 }
271 else 305 else
272 { 306 {
@@ -279,48 +313,16 @@ namespace OpenSim.Framework.Servers.HttpServer
279 { 313 {
280 OSHttpRequest req = new OSHttpRequest(context, request); 314 OSHttpRequest req = new OSHttpRequest(context, request);
281 OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); 315 OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context);
282 //resp.KeepAlive = req.KeepAlive;
283 //m_log.Info("[Debug BASE HTTP SERVER]: Got Request");
284 //HttpServerContextObj objstate= new HttpServerContextObj(req,resp);
285 //ThreadPool.QueueUserWorkItem(new WaitCallback(ConvertIHttpClientContextToOSHttp), (object)objstate);
286 HandleRequest(req, resp); 316 HandleRequest(req, resp);
287 } 317 }
288 318
289 public void ConvertIHttpClientContextToOSHttp(object stateinfo) 319 public void ConvertIHttpClientContextToOSHttp(object stateinfo)
290 { 320 {
291 HttpServerContextObj objstate = (HttpServerContextObj)stateinfo; 321 HttpServerContextObj objstate = (HttpServerContextObj)stateinfo;
292 //OSHttpRequest request = new OSHttpRequest(objstate.context,objstate.req);
293 //OSHttpResponse resp = new OSHttpResponse(new HttpServer.HttpResponse(objstate.context, objstate.req));
294 322
295 OSHttpRequest request = objstate.oreq; 323 OSHttpRequest request = objstate.oreq;
296 OSHttpResponse resp = objstate.oresp; 324 OSHttpResponse resp = objstate.oresp;
297 //OSHttpResponse resp = new OSHttpResponse(new HttpServer.HttpResponse(objstate.context, objstate.req));
298 325
299 /*
300 request.AcceptTypes = objstate.req.AcceptTypes;
301 request.ContentLength = (long)objstate.req.ContentLength;
302 request.Headers = objstate.req.Headers;
303 request.HttpMethod = objstate.req.Method;
304 request.InputStream = objstate.req.Body;
305 foreach (string str in request.Headers)
306 {
307 if (str.ToLower().Contains("content-type: "))
308 {
309 request.ContentType = str.Substring(13, str.Length - 13);
310 break;
311 }
312 }
313 //request.KeepAlive = objstate.req.
314 foreach (HttpServer.HttpInput httpinput in objstate.req.QueryString)
315 {
316 request.QueryString.Add(httpinput.Name, httpinput[httpinput.Name]);
317 }
318
319 //request.Query = objstate.req.//objstate.req.QueryString;
320 //foreach (
321 //request.QueryString = objstate.req.QueryString;
322
323 */
324 HandleRequest(request,resp); 326 HandleRequest(request,resp);
325 } 327 }
326 328
@@ -337,24 +339,19 @@ namespace OpenSim.Framework.Servers.HttpServer
337 // handled 339 // handled
338 //m_log.Debug("[BASE HTTP SERVER]: Handling Request" + request.RawUrl); 340 //m_log.Debug("[BASE HTTP SERVER]: Handling Request" + request.RawUrl);
339 341
340 // If the response is null, then we're not going to respond here. This case 342 IHttpAgentHandler agentHandler;
341 // triggers when we're at the head of a HTTP poll
342 //
343 if (response != null)
344 {
345 IHttpAgentHandler agentHandler;
346 343
347 if (TryGetAgentHandler(request, response, out agentHandler)) 344 if (TryGetAgentHandler(request, response, out agentHandler))
345 {
346 if (HandleAgentRequest(agentHandler, request, response))
348 { 347 {
349 if (HandleAgentRequest(agentHandler, request, response)) 348 return;
350 {
351 return;
352 }
353 } 349 }
354
355 //response.KeepAlive = true;
356 response.SendChunked = false;
357 } 350 }
351
352 //response.KeepAlive = true;
353 response.SendChunked = false;
354
358 IRequestHandler requestHandler; 355 IRequestHandler requestHandler;
359 356
360 string path = request.RawUrl; 357 string path = request.RawUrl;
@@ -368,8 +365,7 @@ namespace OpenSim.Framework.Servers.HttpServer
368 // Okay, so this is bad, but should be considered temporary until everything is IStreamHandler. 365 // Okay, so this is bad, but should be considered temporary until everything is IStreamHandler.
369 byte[] buffer = null; 366 byte[] buffer = null;
370 367
371 if (response != null) 368 response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type.
372 response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type.
373 369
374 370
375 if (requestHandler is IStreamedRequestHandler) 371 if (requestHandler is IStreamedRequestHandler)
@@ -425,12 +421,7 @@ namespace OpenSim.Framework.Servers.HttpServer
425 //m_log.Warn("[HTTP]: " + requestBody); 421 //m_log.Warn("[HTTP]: " + requestBody);
426 422
427 } 423 }
428 // If we're not responding, we dont' care about the reply 424 DoHTTPGruntWork(HTTPRequestHandler.Handle(path, keysvals), response);
429 //
430 if (response == null)
431 HTTPRequestHandler.Handle(path, keysvals);
432 else
433 DoHTTPGruntWork(HTTPRequestHandler.Handle(path, keysvals), response);
434 return; 425 return;
435 } 426 }
436 else 427 else
@@ -445,11 +436,6 @@ namespace OpenSim.Framework.Servers.HttpServer
445 } 436 }
446 } 437 }
447 438
448 // The handler has run and we're not yet ready to respond, bail
449 //
450 if (response == null)
451 return;
452
453 request.InputStream.Close(); 439 request.InputStream.Close();
454 440
455 // HTTP IN support. The script engine taes it from here 441 // HTTP IN support. The script engine taes it from here
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
index 61cb8aa..9d512c6 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
@@ -30,6 +30,7 @@ using System.Collections;
30using OpenMetaverse; 30using OpenMetaverse;
31namespace OpenSim.Framework.Servers.HttpServer 31namespace OpenSim.Framework.Servers.HttpServer
32{ 32{
33 public delegate void RequestMethod(UUID requestID, Hashtable request);
33 public delegate bool HasEventsMethod(UUID requestID, UUID pId); 34 public delegate bool HasEventsMethod(UUID requestID, UUID pId);
34 35
35 public delegate Hashtable GetEventsMethod(UUID requestID, UUID pId, string request); 36 public delegate Hashtable GetEventsMethod(UUID requestID, UUID pId, string request);
@@ -41,9 +42,11 @@ namespace OpenSim.Framework.Servers.HttpServer
41 public HasEventsMethod HasEvents; 42 public HasEventsMethod HasEvents;
42 public GetEventsMethod GetEvents; 43 public GetEventsMethod GetEvents;
43 public NoEventsMethod NoEvents; 44 public NoEventsMethod NoEvents;
45 public RequestMethod Request;
44 public UUID Id; 46 public UUID Id;
45 public PollServiceEventArgs(HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents,UUID pId) 47 public PollServiceEventArgs(RequestMethod pRequest, HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents,UUID pId)
46 { 48 {
49 Request = pRequest;
47 HasEvents = pHasEvents; 50 HasEvents = pHasEvents;
48 GetEvents = pGetEvents; 51 GetEvents = pGetEvents;
49 NoEvents = pNoEvents; 52 NoEvents = pNoEvents;