aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers/HttpServer
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs148
1 files changed, 77 insertions, 71 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 75cdeb4..08f1bec 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -253,60 +253,66 @@ namespace OpenSim.Framework.Servers.HttpServer
253 253
254 private void OnRequest(object source, RequestEventArgs args) 254 private void OnRequest(object source, RequestEventArgs args)
255 { 255 {
256 IHttpClientContext context = (IHttpClientContext)source; 256 try
257 IHttpRequest request = args.Request;
258
259 PollServiceEventArgs psEvArgs;
260
261 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs))
262 { 257 {
263 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request); 258 IHttpClientContext context = (IHttpClientContext)source;
264 259 IHttpRequest request = args.Request;
265 if (psEvArgs.Request != null) 260
261 PollServiceEventArgs psEvArgs;
262
263 if (TryGetPollServiceHTTPHandler(request.UriPath.ToString(), out psEvArgs))
266 { 264 {
267 OSHttpRequest req = new OSHttpRequest(context, request); 265 PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request);
268 266
269 Stream requestStream = req.InputStream; 267 if (psEvArgs.Request != null)
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 { 268 {
294 headervals[headername] = req.Headers[headername]; 269 OSHttpRequest req = new OSHttpRequest(context, request);
270
271 Stream requestStream = req.InputStream;
272
273 Encoding encoding = Encoding.UTF8;
274 StreamReader reader = new StreamReader(requestStream, encoding);
275
276 string requestBody = reader.ReadToEnd();
277
278 Hashtable keysvals = new Hashtable();
279 Hashtable headervals = new Hashtable();
280
281 string[] querystringkeys = req.QueryString.AllKeys;
282 string[] rHeaders = req.Headers.AllKeys;
283
284 keysvals.Add("body", requestBody);
285 keysvals.Add("uri", req.RawUrl);
286 keysvals.Add("content-type", req.ContentType);
287 keysvals.Add("http-method", req.HttpMethod);
288
289 foreach (string queryname in querystringkeys)
290 {
291 keysvals.Add(queryname, req.QueryString[queryname]);
292 }
293
294 foreach (string headername in rHeaders)
295 {
296 headervals[headername] = req.Headers[headername];
297 }
298
299 keysvals.Add("headers",headervals);
300 keysvals.Add("querystringkeys", querystringkeys);
301
302 psEvArgs.Request(psreq.RequestID, keysvals);
295 } 303 }
296 304
297 keysvals.Add("headers",headervals); 305 m_PollServiceManager.Enqueue(psreq);
298 keysvals.Add("querystringkeys", querystringkeys); 306 }
299 307 else
300 psEvArgs.Request(psreq.RequestID, keysvals); 308 {
309 OnHandleRequestIOThread(context, request);
301 } 310 }
302
303 m_PollServiceManager.Enqueue(psreq);
304 } 311 }
305 else 312 catch (Exception e)
306 { 313 {
307 OnHandleRequestIOThread(context, request); 314 m_log.ErrorFormat("[BASE HTTP SERVER]: OnRequest() failed with {0} {1}", e.Message, e.StackTrace);
308 } 315 }
309
310 } 316 }
311 317
312 public void OnHandleRequestIOThread(IHttpClientContext context, IHttpRequest request) 318 public void OnHandleRequestIOThread(IHttpClientContext context, IHttpRequest request)
@@ -465,11 +471,11 @@ namespace OpenSim.Framework.Servers.HttpServer
465 catch (SocketException e) 471 catch (SocketException e)
466 { 472 {
467 // This has to be here to prevent a Linux/Mono crash 473 // This has to be here to prevent a Linux/Mono crash
468 m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e); 474 m_log.WarnFormat("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e);
469 } 475 }
470 catch (IOException e) 476 catch (IOException e)
471 { 477 {
472 m_log.Warn("[BASE HTTP SERVER] XmlRpcRequest issue: " + e.Message); 478 m_log.Warn("[BASE HTTP SERVER]: XmlRpcRequest issue: " + e.Message);
473 } 479 }
474 return; 480 return;
475 } 481 }
@@ -548,7 +554,7 @@ namespace OpenSim.Framework.Servers.HttpServer
548 } 554 }
549 catch (IOException e) 555 catch (IOException e)
550 { 556 {
551 m_log.ErrorFormat("[BASE HTTP SERVER] HandleRequest() threw ", e); 557 m_log.ErrorFormat("[BASE HTTP SERVER]: HandleRequest() threw ", e);
552 } 558 }
553 catch (InvalidOperationException e) 559 catch (InvalidOperationException e)
554 { 560 {
@@ -763,7 +769,7 @@ namespace OpenSim.Framework.Servers.HttpServer
763 byte[] buf = Encoding.UTF8.GetBytes("Not found"); 769 byte[] buf = Encoding.UTF8.GetBytes("Not found");
764 response.KeepAlive = false; 770 response.KeepAlive = false;
765 771
766 m_log.ErrorFormat("[BASE HTTP SERVER] Handler not found for http request {0}", request.RawUrl); 772 m_log.ErrorFormat("[BASE HTTP SERVER]: Handler not found for http request {0}", request.RawUrl);
767 773
768 response.SendChunked = false; 774 response.SendChunked = false;
769 response.ContentLength64 = buf.Length; 775 response.ContentLength64 = buf.Length;
@@ -775,7 +781,7 @@ namespace OpenSim.Framework.Servers.HttpServer
775 } 781 }
776 catch (Exception ex) 782 catch (Exception ex)
777 { 783 {
778 m_log.Warn("[HTTPD]: Error - " + ex.Message); 784 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
779 } 785 }
780 finally 786 finally
781 { 787 {
@@ -787,11 +793,11 @@ namespace OpenSim.Framework.Servers.HttpServer
787 catch (SocketException e) 793 catch (SocketException e)
788 { 794 {
789 // This has to be here to prevent a Linux/Mono crash 795 // This has to be here to prevent a Linux/Mono crash
790 m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e); 796 m_log.WarnFormat("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e);
791 } 797 }
792 catch (IOException e) 798 catch (IOException e)
793 { 799 {
794 m_log.Warn("[BASE HTTP SERVER] XmlRpcRequest issue: " + e.Message); 800 m_log.Warn("[BASE HTTP SERVER]: XmlRpcRequest issue: " + e.Message);
795 } 801 }
796 } 802 }
797 return; 803 return;
@@ -812,7 +818,7 @@ namespace OpenSim.Framework.Servers.HttpServer
812 } 818 }
813 catch (Exception ex) 819 catch (Exception ex)
814 { 820 {
815 m_log.Warn("[HTTPD]: Error - " + ex.Message); 821 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
816 } 822 }
817 finally 823 finally
818 { 824 {
@@ -824,11 +830,11 @@ namespace OpenSim.Framework.Servers.HttpServer
824 catch (SocketException e) 830 catch (SocketException e)
825 { 831 {
826 // This has to be here to prevent a Linux/Mono crash 832 // This has to be here to prevent a Linux/Mono crash
827 m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e); 833 m_log.WarnFormat("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e);
828 } 834 }
829 catch (IOException e) 835 catch (IOException e)
830 { 836 {
831 m_log.Warn("[BASE HTTP SERVER] XmlRpcRequest issue: " + e.Message); 837 m_log.Warn("[BASE HTTP SERVER]: XmlRpcRequest issue: " + e.Message);
832 } 838 }
833 } 839 }
834 } 840 }
@@ -864,7 +870,7 @@ namespace OpenSim.Framework.Servers.HttpServer
864 } 870 }
865 catch (Exception ex) 871 catch (Exception ex)
866 { 872 {
867 m_log.Warn("[HTTPD]: Error - " + ex.Message); 873 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
868 } 874 }
869 875
870 if (llsdRequest != null)// && m_defaultLlsdHandler != null) 876 if (llsdRequest != null)// && m_defaultLlsdHandler != null)
@@ -925,7 +931,7 @@ namespace OpenSim.Framework.Servers.HttpServer
925 } 931 }
926 catch (Exception ex) 932 catch (Exception ex)
927 { 933 {
928 m_log.Warn("[HTTPD]: Error - " + ex.Message); 934 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
929 } 935 }
930 finally 936 finally
931 { 937 {
@@ -939,12 +945,12 @@ namespace OpenSim.Framework.Servers.HttpServer
939 } 945 }
940 catch (IOException e) 946 catch (IOException e)
941 { 947 {
942 m_log.DebugFormat("[BASE HTTP SERVER] LLSD IOException {0}.", e); 948 m_log.DebugFormat("[BASE HTTP SERVER]: LLSD IOException {0}.", e);
943 } 949 }
944 catch (SocketException e) 950 catch (SocketException e)
945 { 951 {
946 // This has to be here to prevent a Linux/Mono crash 952 // This has to be here to prevent a Linux/Mono crash
947 m_log.WarnFormat("[BASE HTTP SERVER] LLSD issue {0}.\nNOTE: this may be spurious on Linux.", e); 953 m_log.WarnFormat("[BASE HTTP SERVER]: LLSD issue {0}.\nNOTE: this may be spurious on Linux.", e);
948 } 954 }
949 } 955 }
950 } 956 }
@@ -1482,11 +1488,11 @@ namespace OpenSim.Framework.Servers.HttpServer
1482 catch (SocketException e) 1488 catch (SocketException e)
1483 { 1489 {
1484 // This has to be here to prevent a Linux/Mono crash 1490 // This has to be here to prevent a Linux/Mono crash
1485 m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e); 1491 m_log.WarnFormat("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e);
1486 } 1492 }
1487 catch (IOException e) 1493 catch (IOException e)
1488 { 1494 {
1489 m_log.Warn("[BASE HTTP SERVER] XmlRpcRequest issue: " + e.Message); 1495 m_log.Warn("[BASE HTTP SERVER]: XmlRpcRequest issue: " + e.Message);
1490 } 1496 }
1491 } 1497 }
1492 } 1498 }
@@ -1510,7 +1516,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1510 } 1516 }
1511 catch (Exception ex) 1517 catch (Exception ex)
1512 { 1518 {
1513 m_log.Warn("[HTTPD]: Error - " + ex.Message); 1519 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
1514 } 1520 }
1515 finally 1521 finally
1516 { 1522 {
@@ -1523,7 +1529,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1523 catch (SocketException e) 1529 catch (SocketException e)
1524 { 1530 {
1525 // This has to be here to prevent a Linux/Mono crash 1531 // This has to be here to prevent a Linux/Mono crash
1526 m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e); 1532 m_log.WarnFormat("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", e);
1527 } 1533 }
1528 } 1534 }
1529 } 1535 }
@@ -1546,7 +1552,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1546 } 1552 }
1547 catch (Exception ex) 1553 catch (Exception ex)
1548 { 1554 {
1549 m_log.Warn("[HTTPD]: Error - " + ex.Message); 1555 m_log.Warn("[BASE HTTP SERVER]: Error - " + ex.Message);
1550 } 1556 }
1551 finally 1557 finally
1552 { 1558 {
@@ -1566,7 +1572,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1566 1572
1567 public void Start() 1573 public void Start()
1568 { 1574 {
1569 m_log.Info("[HTTPD]: Starting up HTTP Server"); 1575 m_log.Info("[BASE HTTP SERVER]: Starting up HTTP Server");
1570 StartHTTP(); 1576 StartHTTP();
1571 } 1577 }
1572 1578
@@ -1574,7 +1580,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1574 { 1580 {
1575 try 1581 try
1576 { 1582 {
1577 m_log.Info("[HTTPD]: Spawned main thread OK"); 1583 m_log.Debug("[BASE HTTP SERVER]: Spawned main thread OK");
1578 //m_httpListener = new HttpListener(); 1584 //m_httpListener = new HttpListener();
1579 NotSocketErrors = 0; 1585 NotSocketErrors = 0;
1580 if (!m_ssl) 1586 if (!m_ssl)
@@ -1614,8 +1620,8 @@ namespace OpenSim.Framework.Servers.HttpServer
1614 } 1620 }
1615 catch (Exception e) 1621 catch (Exception e)
1616 { 1622 {
1617 m_log.Error("[HTTPD]: Error - " + e.Message); 1623 m_log.Error("[BASE HTTP SERVER]: Error - " + e.Message);
1618 m_log.Error("[HTTPD]: Tip: Do you have permission to listen on port " + m_port + ", " + m_sslport + "?"); 1624 m_log.Error("[BASE HTTP SERVER]: Tip: Do you have permission to listen on port " + m_port + ", " + m_sslport + "?");
1619 1625
1620 // We want this exception to halt the entire server since in current configurations we aren't too 1626 // We want this exception to halt the entire server since in current configurations we aren't too
1621 // useful without inbound HTTP. 1627 // useful without inbound HTTP.
@@ -1636,7 +1642,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1636 1642
1637 public void httpServerException(object source, Exception exception) 1643 public void httpServerException(object source, Exception exception)
1638 { 1644 {
1639 m_log.ErrorFormat("[HTTPSERVER]: {0} had an exception {1}", source.ToString(), exception.ToString()); 1645 m_log.ErrorFormat("[BASE HTTP SERVER]: {0} had an exception {1}", source.ToString(), exception.ToString());
1640 /* 1646 /*
1641 if (HTTPDRunning)// && NotSocketErrors > 5) 1647 if (HTTPDRunning)// && NotSocketErrors > 5)
1642 { 1648 {
@@ -1662,7 +1668,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1662 } 1668 }
1663 catch (NullReferenceException) 1669 catch (NullReferenceException)
1664 { 1670 {
1665 m_log.Warn("[BASEHTTPSERVER]: Null Reference when stopping HttpServer."); 1671 m_log.Warn("[BASE HTTP SERVER]: Null Reference when stopping HttpServer.");
1666 } 1672 }
1667 1673
1668 } 1674 }