diff options
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs')
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 148 |
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 | } |