From e9153e1d1aae50024d8cd05fe14a9bce34343a0e Mon Sep 17 00:00:00 2001
From: teravus
Date: Thu, 15 Nov 2012 10:05:16 -0500
Subject: Revert "Merge master into teravuswork", it should have been
avination, not master.
This reverts commit dfac269032300872c4d0dc507f4f9062d102b0f4, reversing
changes made to 619c39e5144f15aca129d6d999bcc5c34133ee64.
---
.../Framework/Servers/HttpServer/BaseHttpServer.cs | 274 ++++++++-------------
1 file changed, 98 insertions(+), 176 deletions(-)
(limited to 'OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs')
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 3198891..788a0b9 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -54,23 +54,8 @@ namespace OpenSim.Framework.Servers.HttpServer
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
- ///
- /// Gets or sets the debug level.
- ///
- ///
- /// See MainServer.DebugLevel.
- ///
public int DebugLevel { get; set; }
- ///
- /// Request number for diagnostic purposes.
- ///
- ///
- /// This is an internal number. In some debug situations an external number may also be supplied in the
- /// opensim-request-id header but we are not currently logging this.
- ///
- public int RequestNumber { get; private set; }
-
private volatile int NotSocketErrors = 0;
public volatile bool HTTPDRunning = false;
@@ -82,7 +67,7 @@ namespace OpenSim.Framework.Servers.HttpServer
protected Dictionary m_llsdHandlers = new Dictionary();
protected Dictionary m_streamHandlers = new Dictionary();
protected Dictionary m_HTTPHandlers = new Dictionary();
-// protected Dictionary m_agentHandlers = new Dictionary();
+ protected Dictionary m_agentHandlers = new Dictionary();
protected Dictionary m_pollHandlers =
new Dictionary();
@@ -260,29 +245,29 @@ namespace OpenSim.Framework.Servers.HttpServer
return new List(m_pollHandlers.Keys);
}
-// // Note that the agent string is provided simply to differentiate
-// // the handlers - it is NOT required to be an actual agent header
-// // value.
-// public bool AddAgentHandler(string agent, IHttpAgentHandler handler)
-// {
-// lock (m_agentHandlers)
-// {
-// if (!m_agentHandlers.ContainsKey(agent))
-// {
-// m_agentHandlers.Add(agent, handler);
-// return true;
-// }
-// }
-//
-// //must already have a handler for that path so return false
-// return false;
-// }
-//
-// public List GetAgentHandlerKeys()
-// {
-// lock (m_agentHandlers)
-// return new List(m_agentHandlers.Keys);
-// }
+ // Note that the agent string is provided simply to differentiate
+ // the handlers - it is NOT required to be an actual agent header
+ // value.
+ public bool AddAgentHandler(string agent, IHttpAgentHandler handler)
+ {
+ lock (m_agentHandlers)
+ {
+ if (!m_agentHandlers.ContainsKey(agent))
+ {
+ m_agentHandlers.Add(agent, handler);
+ return true;
+ }
+ }
+
+ //must already have a handler for that path so return false
+ return false;
+ }
+
+ public List GetAgentHandlerKeys()
+ {
+ lock (m_agentHandlers)
+ return new List(m_agentHandlers.Keys);
+ }
public bool AddLLSDHandler(string path, LLSDMethod handler)
{
@@ -311,8 +296,6 @@ namespace OpenSim.Framework.Servers.HttpServer
private void OnRequest(object source, RequestEventArgs args)
{
- RequestNumber++;
-
try
{
IHttpClientContext context = (IHttpClientContext)source;
@@ -423,6 +406,7 @@ namespace OpenSim.Framework.Servers.HttpServer
string requestMethod = request.HttpMethod;
string uriString = request.RawUrl;
+// string reqnum = "unknown";
int requestStartTick = Environment.TickCount;
// Will be adjusted later on.
@@ -439,22 +423,22 @@ namespace OpenSim.Framework.Servers.HttpServer
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
-// // This is the REST agent interface. We require an agent to properly identify
-// // itself. If the REST handler recognizes the prefix it will attempt to
-// // satisfy the request. If it is not recognizable, and no damage has occurred
-// // the request can be passed through to the other handlers. This is a low
-// // probability event; if a request is matched it is normally expected to be
-// // handled
-// IHttpAgentHandler agentHandler;
-//
-// if (TryGetAgentHandler(request, response, out agentHandler))
-// {
-// if (HandleAgentRequest(agentHandler, request, response))
-// {
-// requestEndTick = Environment.TickCount;
-// return;
-// }
-// }
+ // This is the REST agent interface. We require an agent to properly identify
+ // itself. If the REST handler recognizes the prefix it will attempt to
+ // satisfy the request. If it is not recognizable, and no damage has occurred
+ // the request can be passed through to the other handlers. This is a low
+ // probability event; if a request is matched it is normally expected to be
+ // handled
+ IHttpAgentHandler agentHandler;
+
+ if (TryGetAgentHandler(request, response, out agentHandler))
+ {
+ if (HandleAgentRequest(agentHandler, request, response))
+ {
+ requestEndTick = Environment.TickCount;
+ return;
+ }
+ }
//response.KeepAlive = true;
response.SendChunked = false;
@@ -466,7 +450,9 @@ namespace OpenSim.Framework.Servers.HttpServer
if (TryGetStreamHandler(handlerKey, out requestHandler))
{
if (DebugLevel >= 3)
- LogIncomingToStreamHandler(request, requestHandler);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
+ request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type.
@@ -543,8 +529,11 @@ namespace OpenSim.Framework.Servers.HttpServer
{
case null:
case "text/html":
+
if (DebugLevel >= 3)
- LogIncomingToContentTypeHandler(request);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
+ request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
buffer = HandleHTTPRequest(request, response);
break;
@@ -552,8 +541,11 @@ namespace OpenSim.Framework.Servers.HttpServer
case "application/llsd+xml":
case "application/xml+llsd":
case "application/llsd+json":
+
if (DebugLevel >= 3)
- LogIncomingToContentTypeHandler(request);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
+ request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
buffer = HandleLLSDRequests(request, response);
break;
@@ -572,7 +564,9 @@ namespace OpenSim.Framework.Servers.HttpServer
if (DoWeHaveALLSDHandler(request.RawUrl))
{
if (DebugLevel >= 3)
- LogIncomingToContentTypeHandler(request);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
+ request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
buffer = HandleLLSDRequests(request, response);
}
@@ -580,14 +574,18 @@ namespace OpenSim.Framework.Servers.HttpServer
else if (DoWeHaveAHTTPHandler(request.RawUrl))
{
if (DebugLevel >= 3)
- LogIncomingToContentTypeHandler(request);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
+ request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
buffer = HandleHTTPRequest(request, response);
}
else
{
if (DebugLevel >= 3)
- LogIncomingToXmlRpcHandler(request);
+ m_log.DebugFormat(
+ "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
+ request.HttpMethod, request.Url.PathAndQuery);
// generic login request.
buffer = HandleXmlRpcRequests(request, response);
@@ -631,11 +629,11 @@ namespace OpenSim.Framework.Servers.HttpServer
}
catch (IOException e)
{
- m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
+ m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e);
}
catch (Exception e)
{
- m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
+ m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e);
SendHTML500(response);
}
finally
@@ -646,93 +644,17 @@ namespace OpenSim.Framework.Servers.HttpServer
if (tickdiff > 3000 && (requestHandler == null || requestHandler.Name == null || requestHandler.Name != "GetTexture"))
{
m_log.InfoFormat(
- "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms",
- RequestNumber,
+ "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} from {4} took {5}ms",
requestMethod,
uriString,
requestHandler != null ? requestHandler.Name : "",
requestHandler != null ? requestHandler.Description : "",
- request.RemoteIPEndPoint,
- tickdiff);
- }
- else if (DebugLevel >= 4)
- {
- m_log.DebugFormat(
- "[BASE HTTP SERVER]: HTTP IN {0} :{1} took {2}ms",
- RequestNumber,
- Port,
+ request.RemoteIPEndPoint.ToString(),
tickdiff);
}
}
}
- private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
- {
- m_log.DebugFormat(
- "[BASE HTTP SERVER]: HTTP IN {0} :{1} stream handler {2} {3} {4} {5} from {6}",
- RequestNumber,
- Port,
- request.HttpMethod,
- request.Url.PathAndQuery,
- requestHandler.Name,
- requestHandler.Description,
- request.RemoteIPEndPoint);
-
- if (DebugLevel >= 5)
- LogIncomingInDetail(request);
- }
-
- private void LogIncomingToContentTypeHandler(OSHttpRequest request)
- {
- m_log.DebugFormat(
- "[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}",
- RequestNumber,
- Port,
- (request.ContentType == null || request.ContentType == "") ? "not set" : request.ContentType,
- request.HttpMethod,
- request.Url.PathAndQuery,
- request.RemoteIPEndPoint);
-
- if (DebugLevel >= 5)
- LogIncomingInDetail(request);
- }
-
- private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
- {
- m_log.DebugFormat(
- "[BASE HTTP SERVER]: HTTP IN {0} :{1} assumed generic XMLRPC request {2} {3} from {4}",
- RequestNumber,
- Port,
- request.HttpMethod,
- request.Url.PathAndQuery,
- request.RemoteIPEndPoint);
-
- if (DebugLevel >= 5)
- LogIncomingInDetail(request);
- }
-
- private void LogIncomingInDetail(OSHttpRequest request)
- {
- using (StreamReader reader = new StreamReader(Util.Copy(request.InputStream), Encoding.UTF8))
- {
- string output;
-
- if (DebugLevel == 5)
- {
- const int sampleLength = 80;
- char[] sampleChars = new char[sampleLength];
- reader.Read(sampleChars, 0, sampleLength);
- output = new string(sampleChars);
- }
- else
- {
- output = reader.ReadToEnd();
- }
-
- m_log.DebugFormat("[BASE HTTP SERVER]: {0}...", output.Replace("\n", @"\n"));
- }
- }
-
private bool TryGetStreamHandler(string handlerKey, out IRequestHandler streamHandler)
{
string bestMatch = null;
@@ -825,24 +747,24 @@ namespace OpenSim.Framework.Servers.HttpServer
}
}
-// private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler)
-// {
-// agentHandler = null;
-//
-// lock (m_agentHandlers)
-// {
-// foreach (IHttpAgentHandler handler in m_agentHandlers.Values)
-// {
-// if (handler.Match(request, response))
-// {
-// agentHandler = handler;
-// return true;
-// }
-// }
-// }
-//
-// return false;
-// }
+ private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler)
+ {
+ agentHandler = null;
+
+ lock (m_agentHandlers)
+ {
+ foreach (IHttpAgentHandler handler in m_agentHandlers.Values)
+ {
+ if (handler.Match(request, response))
+ {
+ agentHandler = handler;
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
///
/// Try all the registered xmlrpc handlers when an xmlrpc request is received.
@@ -1815,21 +1737,21 @@ namespace OpenSim.Framework.Servers.HttpServer
m_pollHandlers.Remove(path);
}
-// public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
-// {
-// lock (m_agentHandlers)
-// {
-// IHttpAgentHandler foundHandler;
-//
-// if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler)
-// {
-// m_agentHandlers.Remove(agent);
-// return true;
-// }
-// }
-//
-// return false;
-// }
+ public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
+ {
+ lock (m_agentHandlers)
+ {
+ IHttpAgentHandler foundHandler;
+
+ if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler)
+ {
+ m_agentHandlers.Remove(agent);
+ return true;
+ }
+ }
+
+ return false;
+ }
public void RemoveXmlRPCHandler(string method)
{
--
cgit v1.1