aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers/HttpServer
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs86
-rw-r--r--OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs7
-rw-r--r--OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs12
3 files changed, 66 insertions, 39 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;
42using OpenMetaverse.StructuredData; 42using OpenMetaverse.StructuredData;
43using CoolHTTPListener = HttpServer.HttpListener; 43using CoolHTTPListener = HttpServer.HttpListener;
44using HttpListener=System.Net.HttpListener; 44using HttpListener=System.Net.HttpListener;
45using LogPrio=HttpServer.LogPrio;
45 46
46namespace OpenSim.Framework.Servers.HttpServer 47namespace 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()