diff options
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Framework/Servers')
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 47 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/MainServer.cs | 101 |
2 files changed, 111 insertions, 37 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 43a19fa..4e04dd8 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -54,6 +54,12 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); | 55 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); |
56 | 56 | ||
57 | /// <summary> | ||
58 | /// Gets or sets the debug level. | ||
59 | /// </summary> | ||
60 | /// <value> | ||
61 | /// See MainServer.DebugLevel. | ||
62 | /// </value> | ||
57 | public int DebugLevel { get; set; } | 63 | public int DebugLevel { get; set; } |
58 | 64 | ||
59 | private volatile int NotSocketErrors = 0; | 65 | private volatile int NotSocketErrors = 0; |
@@ -529,8 +535,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
529 | 535 | ||
530 | if (DebugLevel >= 3) | 536 | if (DebugLevel >= 3) |
531 | m_log.DebugFormat( | 537 | m_log.DebugFormat( |
532 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | 538 | "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}", |
533 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | 539 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint); |
534 | 540 | ||
535 | buffer = HandleHTTPRequest(request, response); | 541 | buffer = HandleHTTPRequest(request, response); |
536 | break; | 542 | break; |
@@ -541,8 +547,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
541 | 547 | ||
542 | if (DebugLevel >= 3) | 548 | if (DebugLevel >= 3) |
543 | m_log.DebugFormat( | 549 | m_log.DebugFormat( |
544 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | 550 | "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}", |
545 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | 551 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint); |
546 | 552 | ||
547 | buffer = HandleLLSDRequests(request, response); | 553 | buffer = HandleLLSDRequests(request, response); |
548 | break; | 554 | break; |
@@ -640,7 +646,18 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
640 | uriString, | 646 | uriString, |
641 | requestHandler != null ? requestHandler.Name : "", | 647 | requestHandler != null ? requestHandler.Name : "", |
642 | requestHandler != null ? requestHandler.Description : "", | 648 | requestHandler != null ? requestHandler.Description : "", |
643 | request.RemoteIPEndPoint.ToString(), | 649 | request.RemoteIPEndPoint, |
650 | tickdiff); | ||
651 | } | ||
652 | else if (DebugLevel >= 4) | ||
653 | { | ||
654 | m_log.DebugFormat( | ||
655 | "[BASE HTTP SERVER]: HTTP IN {0} {1} {2} {3} from {4} took {5}ms", | ||
656 | requestMethod, | ||
657 | uriString, | ||
658 | requestHandler != null ? requestHandler.Name : "", | ||
659 | requestHandler != null ? requestHandler.Description : "", | ||
660 | request.RemoteIPEndPoint, | ||
644 | tickdiff); | 661 | tickdiff); |
645 | } | 662 | } |
646 | } | 663 | } |
@@ -649,30 +666,30 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
649 | private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) | 666 | private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) |
650 | { | 667 | { |
651 | m_log.DebugFormat( | 668 | m_log.DebugFormat( |
652 | "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", | 669 | "[BASE HTTP SERVER]: HTTP IN stream handler {0} {1} {2} {3} from {4}", |
653 | request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); | 670 | request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description, request.RemoteIPEndPoint); |
654 | 671 | ||
655 | if (DebugLevel >= 4) | 672 | if (DebugLevel >= 5) |
656 | LogIncomingInDetail(request); | 673 | LogIncomingInDetail(request); |
657 | } | 674 | } |
658 | 675 | ||
659 | private void LogIncomingToContentTypeHandler(OSHttpRequest request) | 676 | private void LogIncomingToContentTypeHandler(OSHttpRequest request) |
660 | { | 677 | { |
661 | m_log.DebugFormat( | 678 | m_log.DebugFormat( |
662 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | 679 | "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}", |
663 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | 680 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint); |
664 | 681 | ||
665 | if (DebugLevel >= 4) | 682 | if (DebugLevel >= 5) |
666 | LogIncomingInDetail(request); | 683 | LogIncomingInDetail(request); |
667 | } | 684 | } |
668 | 685 | ||
669 | private void LogIncomingToXmlRpcHandler(OSHttpRequest request) | 686 | private void LogIncomingToXmlRpcHandler(OSHttpRequest request) |
670 | { | 687 | { |
671 | m_log.DebugFormat( | 688 | m_log.DebugFormat( |
672 | "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", | 689 | "[BASE HTTP SERVER]: HTTP IN assumed generic XMLRPC request {0} {1} from {2}", |
673 | request.HttpMethod, request.Url.PathAndQuery); | 690 | request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint); |
674 | 691 | ||
675 | if (DebugLevel >= 4) | 692 | if (DebugLevel >= 5) |
676 | LogIncomingInDetail(request); | 693 | LogIncomingInDetail(request); |
677 | } | 694 | } |
678 | 695 | ||
@@ -682,7 +699,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
682 | { | 699 | { |
683 | string output; | 700 | string output; |
684 | 701 | ||
685 | if (DebugLevel == 4) | 702 | if (DebugLevel == 5) |
686 | { | 703 | { |
687 | const int sampleLength = 80; | 704 | const int sampleLength = 80; |
688 | char[] sampleChars = new char[sampleLength]; | 705 | char[] sampleChars = new char[sampleLength]; |
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs index 7402c73..72f9cce 100644 --- a/OpenSim/Framework/Servers/MainServer.cs +++ b/OpenSim/Framework/Servers/MainServer.cs | |||
@@ -48,9 +48,12 @@ namespace OpenSim.Framework.Servers | |||
48 | /// Control the printing of certain debug messages. | 48 | /// Control the printing of certain debug messages. |
49 | /// </summary> | 49 | /// </summary> |
50 | /// <remarks> | 50 | /// <remarks> |
51 | /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data. | 51 | /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data. |
52 | /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data. | 52 | /// If DebugLevel >= 2 then long warnings are logged when receiving bad input data. |
53 | /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged. | 53 | /// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged. |
54 | /// If DebugLevel >= 4 then the time taken to fulfill the request is logged. | ||
55 | /// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged. | ||
56 | /// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged. | ||
54 | /// </remarks> | 57 | /// </remarks> |
55 | public static int DebugLevel | 58 | public static int DebugLevel |
56 | { | 59 | { |
@@ -102,7 +105,6 @@ namespace OpenSim.Framework.Servers | |||
102 | get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } | 105 | get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } |
103 | } | 106 | } |
104 | 107 | ||
105 | |||
106 | public static void RegisterHttpConsoleCommands(ICommandConsole console) | 108 | public static void RegisterHttpConsoleCommands(ICommandConsole console) |
107 | { | 109 | { |
108 | console.Commands.AddCommand( | 110 | console.Commands.AddCommand( |
@@ -111,15 +113,20 @@ namespace OpenSim.Framework.Servers | |||
111 | "Show all registered http handlers", HandleShowHttpHandlersCommand); | 113 | "Show all registered http handlers", HandleShowHttpHandlersCommand); |
112 | 114 | ||
113 | console.Commands.AddCommand( | 115 | console.Commands.AddCommand( |
114 | "Debug", false, "debug http", "debug http [<level>]", | 116 | "Debug", false, "debug http", "debug http <in|out|all> [<level>]", |
115 | "Turn on inbound non-poll http request debugging.", | 117 | "Turn on http request logging.", |
116 | "If level <= 0, then no extra logging is done.\n" | 118 | "If in or all and\n" |
117 | + "If level >= 1, then short warnings are logged when receiving bad input data.\n" | 119 | + " level <= 0 then no extra logging is done.\n" |
118 | + "If level >= 2, then long warnings are logged when receiving bad input data.\n" | 120 | + " level >= 1 then short warnings are logged when receiving bad input data.\n" |
119 | + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" | 121 | + " level >= 2 then long warnings are logged when receiving bad input data.\n" |
120 | + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n" | 122 | + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n" |
121 | + "If level >= 5, then the entire incoming data is logged.\n" | 123 | + " level >= 4 then the time taken to fulfill the request is logged.\n" |
122 | + "If no level is specified then the current level is returned.", | 124 | + " level >= 5 then a sample from the beginning of the incoming data is logged.\n" |
125 | + " level >= 6 then the entire incoming data is logged.\n" | ||
126 | + " no level is specified then the current level is returned.\n\n" | ||
127 | + "If out or all and\n" | ||
128 | + " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n" | ||
129 | + " level >= 4 then the time taken to fulfill the request is logged.\n", | ||
123 | HandleDebugHttpCommand); | 130 | HandleDebugHttpCommand); |
124 | } | 131 | } |
125 | 132 | ||
@@ -127,24 +134,74 @@ namespace OpenSim.Framework.Servers | |||
127 | /// Turn on some debugging values for OpenSim. | 134 | /// Turn on some debugging values for OpenSim. |
128 | /// </summary> | 135 | /// </summary> |
129 | /// <param name="args"></param> | 136 | /// <param name="args"></param> |
130 | private static void HandleDebugHttpCommand(string module, string[] args) | 137 | private static void HandleDebugHttpCommand(string module, string[] cmdparams) |
131 | { | 138 | { |
132 | if (args.Length == 3) | 139 | if (cmdparams.Length < 3) |
140 | { | ||
141 | MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6"); | ||
142 | return; | ||
143 | } | ||
144 | |||
145 | bool inReqs = false; | ||
146 | bool outReqs = false; | ||
147 | bool allReqs = false; | ||
148 | |||
149 | string subCommand = cmdparams[2]; | ||
150 | |||
151 | if (subCommand.ToLower() == "in") | ||
152 | { | ||
153 | inReqs = true; | ||
154 | } | ||
155 | else if (subCommand.ToLower() == "out") | ||
156 | { | ||
157 | outReqs = true; | ||
158 | } | ||
159 | else if (subCommand.ToLower() == "all") | ||
160 | { | ||
161 | allReqs = true; | ||
162 | } | ||
163 | else | ||
133 | { | 164 | { |
165 | MainConsole.Instance.Output("You must specify in, out or all"); | ||
166 | return; | ||
167 | } | ||
168 | |||
169 | if (cmdparams.Length >= 4) | ||
170 | { | ||
171 | string rawNewDebug = cmdparams[3]; | ||
134 | int newDebug; | 172 | int newDebug; |
135 | if (int.TryParse(args[2], out newDebug)) | 173 | |
174 | if (!int.TryParse(rawNewDebug, out newDebug)) | ||
175 | { | ||
176 | MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug); | ||
177 | return; | ||
178 | } | ||
179 | |||
180 | if (newDebug < 0 || newDebug > 5) | ||
181 | { | ||
182 | MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..5", newDebug); | ||
183 | return; | ||
184 | } | ||
185 | |||
186 | if (allReqs || inReqs) | ||
136 | { | 187 | { |
137 | MainServer.DebugLevel = newDebug; | 188 | MainServer.DebugLevel = newDebug; |
138 | MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug); | 189 | MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug); |
190 | } | ||
191 | |||
192 | if (allReqs || outReqs) | ||
193 | { | ||
194 | WebUtil.DebugLevel = newDebug; | ||
195 | MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug); | ||
139 | } | 196 | } |
140 | } | ||
141 | else if (args.Length == 2) | ||
142 | { | ||
143 | MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel); | ||
144 | } | 197 | } |
145 | else | 198 | else |
146 | { | 199 | { |
147 | MainConsole.Instance.Output("Usage: debug http 0..5"); | 200 | if (allReqs || inReqs) |
201 | MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel); | ||
202 | |||
203 | if (allReqs || outReqs) | ||
204 | MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel); | ||
148 | } | 205 | } |
149 | } | 206 | } |
150 | 207 | ||