diff options
author | Tom | 2011-05-26 03:42:01 -0700 |
---|---|---|
committer | Tom | 2011-05-26 03:42:01 -0700 |
commit | b000d9ba724ae12ae27c49dd94e36d4592bd6c26 (patch) | |
tree | 75ed29bca15665bd73a98a9b363bc0a122b5d050 | |
parent | If a response cannot be obtained (the script has no handler) return a more fr... (diff) | |
download | opensim-SC-b000d9ba724ae12ae27c49dd94e36d4592bd6c26.zip opensim-SC-b000d9ba724ae12ae27c49dd94e36d4592bd6c26.tar.gz opensim-SC-b000d9ba724ae12ae27c49dd94e36d4592bd6c26.tar.bz2 opensim-SC-b000d9ba724ae12ae27c49dd94e36d4592bd6c26.tar.xz |
Some additional protection, it seems that responsedata needs to be locked, but I can't immediately see where it's being accessed from another thread. For now, this will protect the server
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | 15 |
2 files changed, 27 insertions, 7 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 36c6c75..c12d666 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -1523,11 +1523,20 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1523 | } | 1523 | } |
1524 | else | 1524 | else |
1525 | { | 1525 | { |
1526 | 1526 | try | |
1527 | //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); | 1527 | { |
1528 | responsecode = (int)responsedata["int_response_code"]; | 1528 | //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); |
1529 | responseString = (string)responsedata["str_response_string"]; | 1529 | responsecode = (int)responsedata["int_response_code"]; |
1530 | contentType = (string)responsedata["content_type"]; | 1530 | responseString = (string)responsedata["str_response_string"]; |
1531 | contentType = (string)responsedata["content_type"]; | ||
1532 | } | ||
1533 | catch | ||
1534 | { | ||
1535 | responsecode = 500; | ||
1536 | responseString = "No response could be obtained"; | ||
1537 | contentType = "text/plain"; | ||
1538 | responsedata = new Hashtable(); | ||
1539 | } | ||
1531 | } | 1540 | } |
1532 | 1541 | ||
1533 | if (responsedata.ContainsKey("error_status_text")) | 1542 | if (responsedata.ContainsKey("error_status_text")) |
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index f6351ff..b6af1f2 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | |||
@@ -491,10 +491,21 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
491 | pathInfo = uri.Substring(pos3); | 491 | pathInfo = uri.Substring(pos3); |
492 | 492 | ||
493 | UrlData url = null; | 493 | UrlData url = null; |
494 | string urlkey; | ||
494 | if (!is_ssl) | 495 | if (!is_ssl) |
495 | url = m_UrlMap["http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + uri_tmp]; | 496 | urlkey = "http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + uri_tmp; |
497 | //m_UrlMap[]; | ||
496 | else | 498 | else |
497 | url = m_UrlMap["https://" + m_ExternalHostNameForLSL + ":" + m_HttpsServer.Port.ToString() + uri_tmp]; | 499 | urlkey = "https://" + m_ExternalHostNameForLSL + ":" + m_HttpsServer.Port.ToString() + uri_tmp; |
500 | |||
501 | if (m_UrlMap.ContainsKey(urlkey)) | ||
502 | { | ||
503 | url = m_UrlMap[urlkey]; | ||
504 | } | ||
505 | else | ||
506 | { | ||
507 | m_log.Warn("[HttpRequestHandler]: http-in request failed; no such url: "+urlkey.ToString()); | ||
508 | } | ||
498 | 509 | ||
499 | //for llGetHttpHeader support we need to store original URI here | 510 | //for llGetHttpHeader support we need to store original URI here |
500 | //to make x-path-info / x-query-string / x-script-url / x-remote-ip headers | 511 | //to make x-path-info / x-query-string / x-script-url / x-remote-ip headers |