diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Scripting')
-rw-r--r-- | OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs | 16 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | 34 |
2 files changed, 38 insertions, 12 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs index d78931a..51742ff 100644 --- a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs | |||
@@ -341,6 +341,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
341 | try | 341 | try |
342 | { | 342 | { |
343 | Request = (HttpWebRequest) WebRequest.Create(Url); | 343 | Request = (HttpWebRequest) WebRequest.Create(Url); |
344 | |||
345 | //This works around some buggy HTTP Servers like Lighttpd | ||
346 | Request.ServicePoint.Expect100Continue = false; | ||
347 | |||
344 | Request.Method = HttpMethod; | 348 | Request.Method = HttpMethod; |
345 | Request.ContentType = HttpMIMEType; | 349 | Request.ContentType = HttpMIMEType; |
346 | 350 | ||
@@ -404,7 +408,17 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
404 | { | 408 | { |
405 | HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response; | 409 | HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response; |
406 | Status = (int)webRsp.StatusCode; | 410 | Status = (int)webRsp.StatusCode; |
407 | ResponseBody = webRsp.StatusDescription; | 411 | try |
412 | { | ||
413 | using (Stream responseStream = webRsp.GetResponseStream()) | ||
414 | { | ||
415 | ResponseBody = responseStream.GetStreamString(); | ||
416 | } | ||
417 | } | ||
418 | catch | ||
419 | { | ||
420 | ResponseBody = webRsp.StatusDescription; | ||
421 | } | ||
408 | } | 422 | } |
409 | else | 423 | else |
410 | { | 424 | { |
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index 9b565ed..bdbd0c2 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | |||
@@ -60,6 +60,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
60 | //public ManualResetEvent ev; | 60 | //public ManualResetEvent ev; |
61 | public bool requestDone; | 61 | public bool requestDone; |
62 | public int startTime; | 62 | public int startTime; |
63 | public bool responseSent; | ||
63 | public string uri; | 64 | public string uri; |
64 | } | 65 | } |
65 | 66 | ||
@@ -76,7 +77,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
76 | new Dictionary<string, UrlData>(); | 77 | new Dictionary<string, UrlData>(); |
77 | 78 | ||
78 | 79 | ||
79 | private int m_TotalUrls = 100; | 80 | private int m_TotalUrls = 5000; |
80 | 81 | ||
81 | private IHttpServer m_HttpServer = null; | 82 | private IHttpServer m_HttpServer = null; |
82 | 83 | ||
@@ -142,7 +143,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
142 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); | 143 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); |
143 | return urlcode; | 144 | return urlcode; |
144 | } | 145 | } |
145 | string url = "http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString() + "/"; | 146 | string url = "http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString(); |
146 | 147 | ||
147 | UrlData urlData = new UrlData(); | 148 | UrlData urlData = new UrlData(); |
148 | urlData.hostID = host.UUID; | 149 | urlData.hostID = host.UUID; |
@@ -152,10 +153,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
152 | urlData.urlcode = urlcode; | 153 | urlData.urlcode = urlcode; |
153 | urlData.requests = new Dictionary<UUID, RequestData>(); | 154 | urlData.requests = new Dictionary<UUID, RequestData>(); |
154 | 155 | ||
155 | |||
156 | m_UrlMap[url] = urlData; | 156 | m_UrlMap[url] = urlData; |
157 | 157 | ||
158 | string uri = "/lslhttp/" + urlcode.ToString() + "/"; | 158 | string uri = "/lslhttp/" + urlcode.ToString(); |
159 | 159 | ||
160 | m_HttpServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll, | 160 | m_HttpServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll, |
161 | new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, | 161 | new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, |
@@ -200,10 +200,14 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
200 | if (m_RequestMap.ContainsKey(request)) | 200 | if (m_RequestMap.ContainsKey(request)) |
201 | { | 201 | { |
202 | UrlData urlData = m_RequestMap[request]; | 202 | UrlData urlData = m_RequestMap[request]; |
203 | urlData.requests[request].responseCode = status; | 203 | if (!urlData.requests[request].responseSent) |
204 | urlData.requests[request].responseBody = body; | 204 | { |
205 | //urlData.requests[request].ev.Set(); | 205 | urlData.requests[request].responseCode = status; |
206 | urlData.requests[request].requestDone =true; | 206 | urlData.requests[request].responseBody = body; |
207 | //urlData.requests[request].ev.Set(); | ||
208 | urlData.requests[request].requestDone = true; | ||
209 | urlData.requests[request].responseSent = true; | ||
210 | } | ||
207 | } | 211 | } |
208 | else | 212 | else |
209 | { | 213 | { |
@@ -386,6 +390,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
386 | 390 | ||
387 | return response; | 391 | return response; |
388 | } | 392 | } |
393 | |||
389 | public void HttpRequestHandler(UUID requestID, Hashtable request) | 394 | public void HttpRequestHandler(UUID requestID, Hashtable request) |
390 | { | 395 | { |
391 | lock (request) | 396 | lock (request) |
@@ -400,8 +405,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
400 | 405 | ||
401 | int pos1 = uri.IndexOf("/");// /lslhttp | 406 | int pos1 = uri.IndexOf("/");// /lslhttp |
402 | int pos2 = uri.IndexOf("/", pos1 + 1);// /lslhttp/ | 407 | int pos2 = uri.IndexOf("/", pos1 + 1);// /lslhttp/ |
403 | int pos3 = uri.IndexOf("/", pos2 + 1);// /lslhttp/<UUID>/ | 408 | int pos3 = pos2 + 37; // /lslhttp/urlcode |
404 | string uri_tmp = uri.Substring(0, pos3 + 1); | 409 | string uri_tmp = uri.Substring(0, pos3); |
405 | //HTTP server code doesn't provide us with QueryStrings | 410 | //HTTP server code doesn't provide us with QueryStrings |
406 | string pathInfo; | 411 | string pathInfo; |
407 | string queryString; | 412 | string queryString; |
@@ -439,7 +444,14 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
439 | if (request.ContainsKey(key)) | 444 | if (request.ContainsKey(key)) |
440 | { | 445 | { |
441 | string val = (String)request[key]; | 446 | string val = (String)request[key]; |
442 | queryString = queryString + key + "=" + val + "&"; | 447 | if (key != "") |
448 | { | ||
449 | queryString = queryString + key + "=" + val + "&"; | ||
450 | } | ||
451 | else | ||
452 | { | ||
453 | queryString = queryString + val + "&"; | ||
454 | } | ||
443 | } | 455 | } |
444 | } | 456 | } |
445 | if (queryString.Length > 1) | 457 | if (queryString.Length > 1) |