aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-09-11 21:48:02 +0100
committerJustin Clark-Casey (justincc)2012-09-11 21:48:51 +0100
commit25111e703f54d84c7c51e32db1f94332ea3ffd00 (patch)
treef0fd2496b35cea00b7f737ba61af9f72f22da0f3
parentrefactoring to allow Scene.GetLandData to accept Vector3 as an argument. Note... (diff)
downloadopensim-SC_OLD-25111e703f54d84c7c51e32db1f94332ea3ffd00.zip
opensim-SC_OLD-25111e703f54d84c7c51e32db1f94332ea3ffd00.tar.gz
opensim-SC_OLD-25111e703f54d84c7c51e32db1f94332ea3ffd00.tar.bz2
opensim-SC_OLD-25111e703f54d84c7c51e32db1f94332ea3ffd00.tar.xz
Add levels 4 and 5 to "debug http" console command that will log a sample of incoming request data and the entire incoming data respectively.
See "help debug http" for more details.
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs68
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs2
-rw-r--r--OpenSim/Framework/Util.cs32
3 files changed, 90 insertions, 12 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index f57ea76..c81e283 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -449,9 +449,7 @@ namespace OpenSim.Framework.Servers.HttpServer
449 if (TryGetStreamHandler(handlerKey, out requestHandler)) 449 if (TryGetStreamHandler(handlerKey, out requestHandler))
450 { 450 {
451 if (DebugLevel >= 3) 451 if (DebugLevel >= 3)
452 m_log.DebugFormat( 452 LogIncomingToStreamHandler(request, requestHandler);
453 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
454 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
455 453
456 response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. 454 response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type.
457 455
@@ -563,9 +561,7 @@ namespace OpenSim.Framework.Servers.HttpServer
563 if (DoWeHaveALLSDHandler(request.RawUrl)) 561 if (DoWeHaveALLSDHandler(request.RawUrl))
564 { 562 {
565 if (DebugLevel >= 3) 563 if (DebugLevel >= 3)
566 m_log.DebugFormat( 564 LogIncomingToContentTypeHandler(request);
567 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
568 request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
569 565
570 buffer = HandleLLSDRequests(request, response); 566 buffer = HandleLLSDRequests(request, response);
571 } 567 }
@@ -573,18 +569,14 @@ namespace OpenSim.Framework.Servers.HttpServer
573 else if (DoWeHaveAHTTPHandler(request.RawUrl)) 569 else if (DoWeHaveAHTTPHandler(request.RawUrl))
574 { 570 {
575 if (DebugLevel >= 3) 571 if (DebugLevel >= 3)
576 m_log.DebugFormat( 572 LogIncomingToContentTypeHandler(request);
577 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
578 request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
579 573
580 buffer = HandleHTTPRequest(request, response); 574 buffer = HandleHTTPRequest(request, response);
581 } 575 }
582 else 576 else
583 { 577 {
584 if (DebugLevel >= 3) 578 if (DebugLevel >= 3)
585 m_log.DebugFormat( 579 LogIncomingToXmlRpcHandler(request);
586 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
587 request.HttpMethod, request.Url.PathAndQuery);
588 580
589 // generic login request. 581 // generic login request.
590 buffer = HandleXmlRpcRequests(request, response); 582 buffer = HandleXmlRpcRequests(request, response);
@@ -654,6 +646,58 @@ namespace OpenSim.Framework.Servers.HttpServer
654 } 646 }
655 } 647 }
656 648
649 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
650 {
651 m_log.DebugFormat(
652 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
653 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
654
655 if (DebugLevel >= 4)
656 LogIncomingInDetail(request);
657 }
658
659 private void LogIncomingToContentTypeHandler(OSHttpRequest request)
660 {
661 m_log.DebugFormat(
662 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
663 request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
664
665 if (DebugLevel >= 4)
666 LogIncomingInDetail(request);
667 }
668
669 private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
670 {
671 m_log.DebugFormat(
672 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
673 request.HttpMethod, request.Url.PathAndQuery);
674
675 if (DebugLevel >= 4)
676 LogIncomingInDetail(request);
677 }
678
679 private void LogIncomingInDetail(OSHttpRequest request)
680 {
681 using (StreamReader reader = new StreamReader(Util.Copy(request.InputStream), Encoding.UTF8))
682 {
683 string output;
684
685 if (DebugLevel == 4)
686 {
687 const int sampleLength = 80;
688 char[] sampleChars = new char[sampleLength];
689 reader.Read(sampleChars, 0, sampleLength);
690 output = string.Format("[BASE HTTP SERVER]: {0}...", sampleChars);
691 }
692 else
693 {
694 output = string.Format("[BASE HTTP SERVER]: {0}", reader.ReadToEnd());
695 }
696
697 m_log.Debug(output);
698 }
699 }
700
657 private bool TryGetStreamHandler(string handlerKey, out IRequestHandler streamHandler) 701 private bool TryGetStreamHandler(string handlerKey, out IRequestHandler streamHandler)
658 { 702 {
659 string bestMatch = null; 703 string bestMatch = null;
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index 8dc0e3a..1ac0953 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -111,6 +111,8 @@ namespace OpenSim.Framework.Servers
111 + "If level >= 1, then short warnings are logged when receiving bad input data.\n" 111 + "If level >= 1, then short warnings are logged when receiving bad input data.\n"
112 + "If level >= 2, then long warnings are logged when receiving bad input data.\n" 112 + "If level >= 2, then long warnings are logged when receiving bad input data.\n"
113 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" 113 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n"
114 + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n"
115 + "If level >= 5, then the entire incoming data is logged.\n"
114 + "If no level is specified then the current level is returned.", 116 + "If no level is specified then the current level is returned.",
115 HandleDebugHttpCommand); 117 HandleDebugHttpCommand);
116 } 118 }
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 38cb3a6..1b9777f 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1007,6 +1007,38 @@ namespace OpenSim.Framework
1007 } 1007 }
1008 } 1008 }
1009 1009
1010 /// <summary>
1011 /// Copy data from one stream to another, leaving the read position of both streams at the beginning.
1012 /// </summary>
1013 /// <param name='inputStream'>
1014 /// Input stream. Must be seekable.
1015 /// </param>
1016 /// <exception cref='ArgumentException'>
1017 /// Thrown if the input stream is not seekable.
1018 /// </exception>
1019 public static Stream Copy(Stream inputStream)
1020 {
1021 if (!inputStream.CanSeek)
1022 throw new ArgumentException("Util.Copy(Stream inputStream) must receive an inputStream that can seek");
1023
1024 const int readSize = 256;
1025 byte[] buffer = new byte[readSize];
1026 MemoryStream ms = new MemoryStream();
1027
1028 int count = inputStream.Read(buffer, 0, readSize);
1029
1030 while (count > 0)
1031 {
1032 ms.Write(buffer, 0, count);
1033 count = inputStream.Read(buffer, 0, readSize);
1034 }
1035
1036 ms.Position = 0;
1037 inputStream.Position = 0;
1038
1039 return ms;
1040 }
1041
1010 public static XmlRpcResponse XmlRpcCommand(string url, string methodName, params object[] args) 1042 public static XmlRpcResponse XmlRpcCommand(string url, string methodName, params object[] args)
1011 { 1043 {
1012 return SendXmlRpcCommand(url, methodName, args); 1044 return SendXmlRpcCommand(url, methodName, args);