diff options
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer')
4 files changed, 67 insertions, 40 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 214f936..a6e00c2 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -42,6 +42,7 @@ using Nwc.XmlRpc; | |||
42 | using OpenMetaverse.StructuredData; | 42 | using OpenMetaverse.StructuredData; |
43 | using CoolHTTPListener = HttpServer.HttpListener; | 43 | using CoolHTTPListener = HttpServer.HttpListener; |
44 | using HttpListener=System.Net.HttpListener; | 44 | using HttpListener=System.Net.HttpListener; |
45 | using LogPrio=HttpServer.LogPrio; | ||
45 | 46 | ||
46 | namespace OpenSim.Framework.Servers.HttpServer | 47 | namespace OpenSim.Framework.Servers.HttpServer |
47 | { | 48 | { |
@@ -202,16 +203,14 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
202 | if (!m_pollHandlers.ContainsKey(methodName)) | 203 | if (!m_pollHandlers.ContainsKey(methodName)) |
203 | { | 204 | { |
204 | m_pollHandlers.Add(methodName,args); | 205 | m_pollHandlers.Add(methodName,args); |
205 | pollHandlerResult = true; | 206 | pollHandlerResult = true; |
206 | |||
207 | } | 207 | } |
208 | } | 208 | } |
209 | 209 | ||
210 | if (pollHandlerResult) | 210 | if (pollHandlerResult) |
211 | return AddHTTPHandler(methodName, handler); | 211 | return AddHTTPHandler(methodName, handler); |
212 | 212 | ||
213 | return false; | 213 | return false; |
214 | |||
215 | } | 214 | } |
216 | 215 | ||
217 | // Note that the agent string is provided simply to differentiate | 216 | // Note that the agent string is provided simply to differentiate |
@@ -296,7 +295,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
296 | headervals[headername] = req.Headers[headername]; | 295 | headervals[headername] = req.Headers[headername]; |
297 | } | 296 | } |
298 | 297 | ||
299 | keysvals.Add("headers",headervals); | 298 | keysvals.Add("headers", headervals); |
300 | keysvals.Add("querystringkeys", querystringkeys); | 299 | keysvals.Add("querystringkeys", querystringkeys); |
301 | 300 | ||
302 | psEvArgs.Request(psreq.RequestID, keysvals); | 301 | psEvArgs.Request(psreq.RequestID, keysvals); |
@@ -311,7 +310,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
311 | } | 310 | } |
312 | catch (Exception e) | 311 | catch (Exception e) |
313 | { | 312 | { |
314 | m_log.ErrorFormat("[BASE HTTP SERVER]: OnRequest() failed with {0} {1}", e.Message, e.StackTrace); | 313 | m_log.Error(string.Format("[BASE HTTP SERVER]: OnRequest() failed with "), e); |
315 | } | 314 | } |
316 | } | 315 | } |
317 | 316 | ||
@@ -343,7 +342,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
343 | // the request can be passed through to the other handlers. This is a low | 342 | // the request can be passed through to the other handlers. This is a low |
344 | // probability event; if a request is matched it is normally expected to be | 343 | // probability event; if a request is matched it is normally expected to be |
345 | // handled | 344 | // handled |
346 | //m_log.Debug("[BASE HTTP SERVER]: Handling Request" + request.RawUrl); | 345 | // m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl); |
347 | 346 | ||
348 | IHttpAgentHandler agentHandler; | 347 | IHttpAgentHandler agentHandler; |
349 | 348 | ||
@@ -498,7 +497,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
498 | { | 497 | { |
499 | case null: | 498 | case null: |
500 | case "text/html": | 499 | case "text/html": |
501 | //m_log.Info("[Debug BASE HTTP SERVER]: found a text/html content type"); | 500 | // m_log.DebugFormat( |
501 | // "[BASE HTTP SERVER]: Found a text/html content type for request {0}", request.RawUrl); | ||
502 | HandleHTTPRequest(request, response); | 502 | HandleHTTPRequest(request, response); |
503 | return; | 503 | return; |
504 | 504 | ||
@@ -526,10 +526,11 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
526 | HandleLLSDRequests(request, response); | 526 | HandleLLSDRequests(request, response); |
527 | return; | 527 | return; |
528 | } | 528 | } |
529 | //m_log.Info("[Debug BASE HTTP SERVER]: Checking for HTTP Handler"); | 529 | |
530 | // m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl); | ||
530 | if (DoWeHaveAHTTPHandler(request.RawUrl)) | 531 | if (DoWeHaveAHTTPHandler(request.RawUrl)) |
531 | { | 532 | { |
532 | //m_log.Info("[Debug BASE HTTP SERVER]: found HTTP Handler"); | 533 | // m_log.DebugFormat("[BASE HTTP SERVER]: Found HTTP Handler for request {0}", request.RawUrl); |
533 | HandleHTTPRequest(request, response); | 534 | HandleHTTPRequest(request, response); |
534 | return; | 535 | return; |
535 | } | 536 | } |
@@ -625,7 +626,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
625 | 626 | ||
626 | private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) | 627 | private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) |
627 | { | 628 | { |
628 | //m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); | 629 | // m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); |
629 | 630 | ||
630 | string bestMatch = null; | 631 | string bestMatch = null; |
631 | 632 | ||
@@ -945,7 +946,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
945 | } | 946 | } |
946 | catch (IOException e) | 947 | catch (IOException e) |
947 | { | 948 | { |
948 | m_log.DebugFormat("[BASE HTTP SERVER]: LLSD IOException {0}.", e); | 949 | m_log.WarnFormat("[BASE HTTP SERVER]: LLSD IOException {0}.", e); |
949 | } | 950 | } |
950 | catch (SocketException e) | 951 | catch (SocketException e) |
951 | { | 952 | { |
@@ -1220,7 +1221,11 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1220 | } | 1221 | } |
1221 | 1222 | ||
1222 | public void HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response) | 1223 | public void HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response) |
1223 | { | 1224 | { |
1225 | // m_log.DebugFormat( | ||
1226 | // "[BASE HTTP SERVER]: HandleHTTPRequest for request to {0}, method {1}", | ||
1227 | // request.RawUrl, request.HttpMethod); | ||
1228 | |||
1224 | switch (request.HttpMethod) | 1229 | switch (request.HttpMethod) |
1225 | { | 1230 | { |
1226 | case "OPTIONS": | 1231 | case "OPTIONS": |
@@ -1235,6 +1240,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1235 | 1240 | ||
1236 | private void HandleContentVerbs(OSHttpRequest request, OSHttpResponse response) | 1241 | private void HandleContentVerbs(OSHttpRequest request, OSHttpResponse response) |
1237 | { | 1242 | { |
1243 | // m_log.DebugFormat("[BASE HTTP SERVER]: HandleContentVerbs for request to {0}", request.RawUrl); | ||
1244 | |||
1238 | // This is a test. There's a workable alternative.. as this way sucks. | 1245 | // This is a test. There's a workable alternative.. as this way sucks. |
1239 | // We'd like to put this into a text file parhaps that's easily editable. | 1246 | // We'd like to put this into a text file parhaps that's easily editable. |
1240 | // | 1247 | // |
@@ -1275,13 +1282,15 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1275 | 1282 | ||
1276 | foreach (string queryname in querystringkeys) | 1283 | foreach (string queryname in querystringkeys) |
1277 | { | 1284 | { |
1285 | // m_log.DebugFormat( | ||
1286 | // "[BASE HTTP SERVER]: Got query paremeter {0}={1}", queryname, request.QueryString[queryname]); | ||
1278 | keysvals.Add(queryname, request.QueryString[queryname]); | 1287 | keysvals.Add(queryname, request.QueryString[queryname]); |
1279 | requestVars.Add(queryname, keysvals[queryname]); | 1288 | requestVars.Add(queryname, keysvals[queryname]); |
1280 | } | 1289 | } |
1281 | 1290 | ||
1282 | foreach (string headername in rHeaders) | 1291 | foreach (string headername in rHeaders) |
1283 | { | 1292 | { |
1284 | //m_log.Warn("[HEADER]: " + headername + "=" + request.Headers[headername]); | 1293 | // m_log.Debug("[BASE HTTP SERVER]: " + headername + "=" + request.Headers[headername]); |
1285 | headervals[headername] = request.Headers[headername]; | 1294 | headervals[headername] = request.Headers[headername]; |
1286 | } | 1295 | } |
1287 | 1296 | ||
@@ -1290,15 +1299,16 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1290 | host = (string)headervals["Host"]; | 1299 | host = (string)headervals["Host"]; |
1291 | } | 1300 | } |
1292 | 1301 | ||
1293 | keysvals.Add("headers",headervals); | 1302 | keysvals.Add("headers", headervals); |
1294 | keysvals.Add("querystringkeys", querystringkeys); | 1303 | keysvals.Add("querystringkeys", querystringkeys); |
1295 | keysvals.Add("requestvars", requestVars); | 1304 | keysvals.Add("requestvars", requestVars); |
1305 | // keysvals.Add("form", request.Form); | ||
1296 | 1306 | ||
1297 | if (keysvals.Contains("method")) | 1307 | if (keysvals.Contains("method")) |
1298 | { | 1308 | { |
1299 | //m_log.Warn("[HTTP]: Contains Method"); | 1309 | // m_log.Debug("[BASE HTTP SERVER]: Contains Method"); |
1300 | string method = (string) keysvals["method"]; | 1310 | string method = (string) keysvals["method"]; |
1301 | //m_log.Warn("[HTTP]: " + requestBody); | 1311 | // m_log.Debug("[BASE HTTP SERVER]: " + requestBody); |
1302 | GenericHTTPMethod requestprocessor; | 1312 | GenericHTTPMethod requestprocessor; |
1303 | bool foundHandler = TryGetHTTPHandler(method, out requestprocessor); | 1313 | bool foundHandler = TryGetHTTPHandler(method, out requestprocessor); |
1304 | if (foundHandler) | 1314 | if (foundHandler) |
@@ -1310,13 +1320,12 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1310 | } | 1320 | } |
1311 | else | 1321 | else |
1312 | { | 1322 | { |
1313 | //m_log.Warn("[HTTP]: Handler Not Found"); | 1323 | // m_log.Warn("[BASE HTTP SERVER]: Handler Not Found"); |
1314 | SendHTML404(response, host); | 1324 | SendHTML404(response, host); |
1315 | } | 1325 | } |
1316 | } | 1326 | } |
1317 | else | 1327 | else |
1318 | { | 1328 | { |
1319 | |||
1320 | GenericHTTPMethod requestprocessor; | 1329 | GenericHTTPMethod requestprocessor; |
1321 | bool foundHandler = TryGetHTTPHandlerPathBased(request.RawUrl, out requestprocessor); | 1330 | bool foundHandler = TryGetHTTPHandlerPathBased(request.RawUrl, out requestprocessor); |
1322 | if (foundHandler) | 1331 | if (foundHandler) |
@@ -1328,7 +1337,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1328 | } | 1337 | } |
1329 | else | 1338 | else |
1330 | { | 1339 | { |
1331 | //m_log.Warn("[HTTP]: Handler Not Found"); | 1340 | // m_log.Warn("[BASE HTTP SERVER]: Handler Not Found2"); |
1332 | SendHTML404(response, host); | 1341 | SendHTML404(response, host); |
1333 | } | 1342 | } |
1334 | } | 1343 | } |
@@ -1376,8 +1385,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1376 | { | 1385 | { |
1377 | if (String.IsNullOrEmpty(bestMatch) || searchquery.Length > bestMatch.Length) | 1386 | if (String.IsNullOrEmpty(bestMatch) || searchquery.Length > bestMatch.Length) |
1378 | { | 1387 | { |
1379 | // You have to specifically register for '/' and to get it, you must specificaly request it | 1388 | // You have to specifically register for '/' and to get it, you must specifically request it |
1380 | // | ||
1381 | if (pattern == "/" && searchquery == "/" || pattern != "/") | 1389 | if (pattern == "/" && searchquery == "/" || pattern != "/") |
1382 | bestMatch = pattern; | 1390 | bestMatch = pattern; |
1383 | } | 1391 | } |
@@ -1572,7 +1580,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1572 | 1580 | ||
1573 | public void Start() | 1581 | public void Start() |
1574 | { | 1582 | { |
1575 | m_log.Info("[BASE HTTP SERVER]: Starting up HTTP Server"); | ||
1576 | StartHTTP(); | 1583 | StartHTTP(); |
1577 | } | 1584 | } |
1578 | 1585 | ||
@@ -1580,7 +1587,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1580 | { | 1587 | { |
1581 | try | 1588 | try |
1582 | { | 1589 | { |
1583 | m_log.Debug("[BASE HTTP SERVER]: Spawned main thread OK"); | ||
1584 | //m_httpListener = new HttpListener(); | 1590 | //m_httpListener = new HttpListener(); |
1585 | NotSocketErrors = 0; | 1591 | NotSocketErrors = 0; |
1586 | if (!m_ssl) | 1592 | if (!m_ssl) |
@@ -1816,30 +1822,36 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1816 | /// <summary> | 1822 | /// <summary> |
1817 | /// Relays HttpServer log messages to our own logging mechanism. | 1823 | /// Relays HttpServer log messages to our own logging mechanism. |
1818 | /// </summary> | 1824 | /// </summary> |
1819 | /// There is also a UseTraceLogs line in this file that can be uncommented for more detailed log information | 1825 | /// To use this you must uncomment the switch section |
1826 | /// | ||
1827 | /// You may also be able to get additional trace information from HttpServer if you uncomment the UseTraceLogs | ||
1828 | /// property in StartHttp() for the HttpListener | ||
1820 | public class HttpServerLogWriter : ILogWriter | 1829 | public class HttpServerLogWriter : ILogWriter |
1821 | { | 1830 | { |
1822 | //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 1831 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
1823 | 1832 | ||
1824 | public void Write(object source, LogPrio priority, string message) | 1833 | public void Write(object source, LogPrio priority, string message) |
1825 | { | 1834 | { |
1826 | /* | 1835 | /* |
1827 | switch (priority) | 1836 | switch (priority) |
1828 | { | 1837 | { |
1829 | case HttpServer.LogPrio.Debug: | 1838 | case LogPrio.Trace: |
1830 | m_log.DebugFormat("[{0}]: {1}", source.ToString(), message); | 1839 | m_log.DebugFormat("[{0}]: {1}", source, message); |
1840 | break; | ||
1841 | case LogPrio.Debug: | ||
1842 | m_log.DebugFormat("[{0}]: {1}", source, message); | ||
1831 | break; | 1843 | break; |
1832 | case HttpServer.LogPrio.Error: | 1844 | case LogPrio.Error: |
1833 | m_log.ErrorFormat("[{0}]: {1}", source.ToString(), message); | 1845 | m_log.ErrorFormat("[{0}]: {1}", source, message); |
1834 | break; | 1846 | break; |
1835 | case HttpServer.LogPrio.Info: | 1847 | case LogPrio.Info: |
1836 | m_log.InfoFormat("[{0}]: {1}", source.ToString(), message); | 1848 | m_log.InfoFormat("[{0}]: {1}", source, message); |
1837 | break; | 1849 | break; |
1838 | case HttpServer.LogPrio.Warning: | 1850 | case LogPrio.Warning: |
1839 | m_log.WarnFormat("[{0}]: {1}", source.ToString(), message); | 1851 | m_log.WarnFormat("[{0}]: {1}", source, message); |
1840 | break; | 1852 | break; |
1841 | case HttpServer.LogPrio.Fatal: | 1853 | case LogPrio.Fatal: |
1842 | m_log.ErrorFormat("[{0}]: FATAL! - {1}", source.ToString(), message); | 1854 | m_log.ErrorFormat("[{0}]: FATAL! - {1}", source, message); |
1843 | break; | 1855 | break; |
1844 | default: | 1856 | default: |
1845 | break; | 1857 | break; |
@@ -1849,4 +1861,4 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1849 | return; | 1861 | return; |
1850 | } | 1862 | } |
1851 | } | 1863 | } |
1852 | } | 1864 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs index d13408d..65b1eb5 100644 --- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs | |||
@@ -47,7 +47,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
47 | bool AddAgentHandler(string agent, IHttpAgentHandler handler); | 47 | bool AddAgentHandler(string agent, IHttpAgentHandler handler); |
48 | 48 | ||
49 | /// <summary> | 49 | /// <summary> |
50 | /// Add a handler for an HTTP request | 50 | /// Add a handler for an HTTP request. |
51 | /// </summary> | 51 | /// </summary> |
52 | /// | 52 | /// |
53 | /// This handler can actually be invoked either as | 53 | /// This handler can actually be invoked either as |
@@ -66,6 +66,10 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
66 | /// or | 66 | /// or |
67 | /// | 67 | /// |
68 | /// http://localhost:9000/object/ | 68 | /// http://localhost:9000/object/ |
69 | /// | ||
70 | /// In addition, the handler invoked by the HTTP server for any request is the one when best matches the request | ||
71 | /// URI. So if a handler for "/myapp/" is registered and a request for "/myapp/page" is received, then | ||
72 | /// the "/myapp/" handler is invoked if no "/myapp/page" handler exists. | ||
69 | /// | 73 | /// |
70 | /// <param name="methodName"></param> | 74 | /// <param name="methodName"></param> |
71 | /// <param name="handler"></param> | 75 | /// <param name="handler"></param> |
@@ -73,7 +77,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
73 | /// true if the handler was successfully registered, false if a handler with the same name already existed. | 77 | /// true if the handler was successfully registered, false if a handler with the same name already existed. |
74 | /// </returns> | 78 | /// </returns> |
75 | bool AddHTTPHandler(string methodName, GenericHTTPMethod handler); | 79 | bool AddHTTPHandler(string methodName, GenericHTTPMethod handler); |
76 | |||
77 | 80 | ||
78 | bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args); | 81 | bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args); |
79 | 82 | ||
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 | |||
127 | } | 127 | } |
128 | private Hashtable _query; | 128 | private Hashtable _query; |
129 | 129 | ||
130 | /// <value> | ||
131 | /// POST request values, if applicable | ||
132 | /// </value> | ||
133 | // public Hashtable Form { get; private set; } | ||
134 | |||
130 | public string RawUrl | 135 | public string RawUrl |
131 | { | 136 | { |
132 | get { return _request.Uri.AbsolutePath; } | 137 | get { return _request.Uri.AbsolutePath; } |
@@ -228,6 +233,13 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
228 | { | 233 | { |
229 | _log.ErrorFormat("[OSHttpRequest]: Error parsing querystring"); | 234 | _log.ErrorFormat("[OSHttpRequest]: Error parsing querystring"); |
230 | } | 235 | } |
236 | |||
237 | // Form = new Hashtable(); | ||
238 | // foreach (HttpInputItem item in req.Form) | ||
239 | // { | ||
240 | // _log.DebugFormat("[OSHttpRequest]: Got form item {0}={1}", item.Name, item.Value); | ||
241 | // Form.Add(item.Name, item.Value); | ||
242 | // } | ||
231 | } | 243 | } |
232 | 244 | ||
233 | public override string ToString() | 245 | public override string ToString() |
diff --git a/OpenSim/Framework/Servers/HttpServer/SynchronousRestFormsRequester.cs b/OpenSim/Framework/Servers/HttpServer/SynchronousRestFormsRequester.cs index 4543fd5..b0cf34d 100644 --- a/OpenSim/Framework/Servers/HttpServer/SynchronousRestFormsRequester.cs +++ b/OpenSim/Framework/Servers/HttpServer/SynchronousRestFormsRequester.cs | |||
@@ -81,7 +81,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
81 | } | 81 | } |
82 | catch (Exception e) | 82 | catch (Exception e) |
83 | { | 83 | { |
84 | m_log.DebugFormat("[FORMS]: exception occured on sending request {0}", e.Message); | 84 | m_log.DebugFormat("[FORMS]: exception occured on sending request to {0}: {1}", requestUrl, e.Message); |
85 | } | 85 | } |
86 | finally | 86 | finally |
87 | { | 87 | { |