From b4dcdffb5094c488a98acbe675b333c3bd4cc570 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Tue, 16 Mar 2010 11:50:22 -0700 Subject: Fixed several unhandled exceptions and performance issues with PrimitiveBaseShape.Textures. This really should be moved from a property to a method if it is going to decode a byte[] into a TextureEntry each time --- OpenSim/Framework/PrimitiveBaseShape.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs index 6a38278..9c2a4f9 100644 --- a/OpenSim/Framework/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/PrimitiveBaseShape.cs @@ -227,8 +227,12 @@ namespace OpenSim.Framework { get { - //m_log.DebugFormat("[PRIMITIVE BASE SHAPE]: get m_textureEntry length {0}", m_textureEntry.Length); - return new Primitive.TextureEntry(m_textureEntry, 0, m_textureEntry.Length); + //m_log.DebugFormat("[SHAPE]: get m_textureEntry length {0}", m_textureEntry.Length); + try { return new Primitive.TextureEntry(m_textureEntry, 0, m_textureEntry.Length); } + catch { } + + m_log.Warn("[SHAPE]: Failed to decode texture, length=" + ((m_textureEntry != null) ? m_textureEntry.Length : 0)); + return new Primitive.TextureEntry(null); } set { m_textureEntry = value.GetBytes(); } -- cgit v1.1 From a647f5008770c4b5ee37190f07a1b6a9aa1ba272 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 16 Mar 2010 22:58:12 +0000 Subject: minor logging changes to BaseHttpServer, OSHttpRequest --- .../Framework/Servers/HttpServer/BaseHttpServer.cs | 76 +++++++++++++--------- .../Framework/Servers/HttpServer/OSHttpRequest.cs | 12 ++++ 2 files changed, 58 insertions(+), 30 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 9a6ef77..350c041 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -42,6 +42,7 @@ using Nwc.XmlRpc; using OpenMetaverse.StructuredData; using CoolHTTPListener = HttpServer.HttpListener; using HttpListener=System.Net.HttpListener; +using LogPrio=HttpServer.LogPrio; namespace OpenSim.Framework.Servers.HttpServer { @@ -294,7 +295,7 @@ namespace OpenSim.Framework.Servers.HttpServer headervals[headername] = req.Headers[headername]; } - keysvals.Add("headers",headervals); + keysvals.Add("headers", headervals); keysvals.Add("querystringkeys", querystringkeys); psEvArgs.Request(psreq.RequestID, keysvals); @@ -341,7 +342,7 @@ namespace OpenSim.Framework.Servers.HttpServer // 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 - //m_log.Debug("[BASE HTTP SERVER]: Handling Request" + request.RawUrl); +// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl); IHttpAgentHandler agentHandler; @@ -496,7 +497,8 @@ namespace OpenSim.Framework.Servers.HttpServer { case null: case "text/html": - //m_log.Info("[Debug BASE HTTP SERVER]: found a text/html content type"); +// m_log.DebugFormat( +// "[BASE HTTP SERVER]: Found a text/html content type for request {0}", request.RawUrl); HandleHTTPRequest(request, response); return; @@ -524,10 +526,11 @@ namespace OpenSim.Framework.Servers.HttpServer HandleLLSDRequests(request, response); return; } - //m_log.Info("[Debug BASE HTTP SERVER]: Checking for HTTP Handler"); + +// m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl); if (DoWeHaveAHTTPHandler(request.RawUrl)) { - //m_log.Info("[Debug BASE HTTP SERVER]: found HTTP Handler"); +// m_log.DebugFormat("[BASE HTTP SERVER]: Found HTTP Handler for request {0}", request.RawUrl); HandleHTTPRequest(request, response); return; } @@ -623,7 +626,7 @@ namespace OpenSim.Framework.Servers.HttpServer private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) { - //m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); +// m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); string bestMatch = null; @@ -943,7 +946,7 @@ namespace OpenSim.Framework.Servers.HttpServer } catch (IOException e) { - m_log.DebugFormat("[BASE HTTP SERVER]: LLSD IOException {0}.", e); + m_log.WarnFormat("[BASE HTTP SERVER]: LLSD IOException {0}.", e); } catch (SocketException e) { @@ -1218,7 +1221,11 @@ namespace OpenSim.Framework.Servers.HttpServer } public void HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response) - { + { +// m_log.DebugFormat( +// "[BASE HTTP SERVER]: HandleHTTPRequest for request to {0}, method {1}", +// request.RawUrl, request.HttpMethod); + switch (request.HttpMethod) { case "OPTIONS": @@ -1233,6 +1240,8 @@ namespace OpenSim.Framework.Servers.HttpServer private void HandleContentVerbs(OSHttpRequest request, OSHttpResponse response) { +// m_log.DebugFormat("[BASE HTTP SERVER]: HandleContentVerbs for request to {0}", request.RawUrl); + // This is a test. There's a workable alternative.. as this way sucks. // We'd like to put this into a text file parhaps that's easily editable. // @@ -1273,13 +1282,15 @@ namespace OpenSim.Framework.Servers.HttpServer foreach (string queryname in querystringkeys) { +// m_log.DebugFormat( +// "[BASE HTTP SERVER]: Got query paremeter {0}={1}", queryname, request.QueryString[queryname]); keysvals.Add(queryname, request.QueryString[queryname]); requestVars.Add(queryname, keysvals[queryname]); } foreach (string headername in rHeaders) { - //m_log.Warn("[HEADER]: " + headername + "=" + request.Headers[headername]); +// m_log.Debug("[BASE HTTP SERVER]: " + headername + "=" + request.Headers[headername]); headervals[headername] = request.Headers[headername]; } @@ -1288,15 +1299,16 @@ namespace OpenSim.Framework.Servers.HttpServer host = (string)headervals["Host"]; } - keysvals.Add("headers",headervals); + keysvals.Add("headers", headervals); keysvals.Add("querystringkeys", querystringkeys); keysvals.Add("requestvars", requestVars); +// keysvals.Add("form", request.Form); if (keysvals.Contains("method")) { - //m_log.Warn("[HTTP]: Contains Method"); +// m_log.Debug("[BASE HTTP SERVER]: Contains Method"); string method = (string) keysvals["method"]; - //m_log.Warn("[HTTP]: " + requestBody); +// m_log.Debug("[BASE HTTP SERVER]: " + requestBody); GenericHTTPMethod requestprocessor; bool foundHandler = TryGetHTTPHandler(method, out requestprocessor); if (foundHandler) @@ -1308,13 +1320,12 @@ namespace OpenSim.Framework.Servers.HttpServer } else { - //m_log.Warn("[HTTP]: Handler Not Found"); +// m_log.Warn("[BASE HTTP SERVER]: Handler Not Found"); SendHTML404(response, host); } } else { - GenericHTTPMethod requestprocessor; bool foundHandler = TryGetHTTPHandlerPathBased(request.RawUrl, out requestprocessor); if (foundHandler) @@ -1326,7 +1337,7 @@ namespace OpenSim.Framework.Servers.HttpServer } else { - //m_log.Warn("[HTTP]: Handler Not Found"); +// m_log.Warn("[BASE HTTP SERVER]: Handler Not Found2"); SendHTML404(response, host); } } @@ -1374,8 +1385,7 @@ namespace OpenSim.Framework.Servers.HttpServer { if (String.IsNullOrEmpty(bestMatch) || searchquery.Length > bestMatch.Length) { - // You have to specifically register for '/' and to get it, you must specificaly request it - // + // You have to specifically register for '/' and to get it, you must specifically request it if (pattern == "/" && searchquery == "/" || pattern != "/") bestMatch = pattern; } @@ -1814,30 +1824,36 @@ namespace OpenSim.Framework.Servers.HttpServer /// /// Relays HttpServer log messages to our own logging mechanism. /// - /// There is also a UseTraceLogs line in this file that can be uncommented for more detailed log information + /// To use this you must uncomment the switch section + /// + /// You may also be able to get additional trace information from HttpServer if you uncomment the UseTraceLogs + /// property in StartHttp() for the HttpListener public class HttpServerLogWriter : ILogWriter { - //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public void Write(object source, LogPrio priority, string message) { /* switch (priority) { - case HttpServer.LogPrio.Debug: - m_log.DebugFormat("[{0}]: {1}", source.ToString(), message); + case LogPrio.Trace: + m_log.DebugFormat("[{0}]: {1}", source, message); + break; + case LogPrio.Debug: + m_log.DebugFormat("[{0}]: {1}", source, message); break; - case HttpServer.LogPrio.Error: - m_log.ErrorFormat("[{0}]: {1}", source.ToString(), message); + case LogPrio.Error: + m_log.ErrorFormat("[{0}]: {1}", source, message); break; - case HttpServer.LogPrio.Info: - m_log.InfoFormat("[{0}]: {1}", source.ToString(), message); + case LogPrio.Info: + m_log.InfoFormat("[{0}]: {1}", source, message); break; - case HttpServer.LogPrio.Warning: - m_log.WarnFormat("[{0}]: {1}", source.ToString(), message); + case LogPrio.Warning: + m_log.WarnFormat("[{0}]: {1}", source, message); break; - case HttpServer.LogPrio.Fatal: - m_log.ErrorFormat("[{0}]: FATAL! - {1}", source.ToString(), message); + case LogPrio.Fatal: + m_log.ErrorFormat("[{0}]: FATAL! - {1}", source, message); break; default: break; @@ -1847,4 +1863,4 @@ namespace OpenSim.Framework.Servers.HttpServer return; } } -} +} \ No newline at end of file diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs index bcfb0a4..e354dfb 100644 --- a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs +++ b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs @@ -127,6 +127,11 @@ namespace OpenSim.Framework.Servers.HttpServer } private Hashtable _query; + /// + /// POST request values, if applicable + /// +// public Hashtable Form { get; private set; } + public string RawUrl { get { return _request.Uri.AbsolutePath; } @@ -228,6 +233,13 @@ namespace OpenSim.Framework.Servers.HttpServer { _log.ErrorFormat("[OSHttpRequest]: Error parsing querystring"); } + +// Form = new Hashtable(); +// foreach (HttpInputItem item in req.Form) +// { +// _log.DebugFormat("[OSHttpRequest]: Got form item {0}={1}", item.Name, item.Value); +// Form.Add(item.Name, item.Value); +// } } public override string ToString() -- cgit v1.1