diff options
Diffstat (limited to 'OpenSim')
4 files changed, 183 insertions, 81 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 4c9b19d..83cf904 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -44,11 +44,11 @@ using log4net; | |||
44 | using Nwc.XmlRpc; | 44 | using Nwc.XmlRpc; |
45 | using OpenMetaverse.StructuredData; | 45 | using OpenMetaverse.StructuredData; |
46 | using CoolHTTPListener = HttpServer.HttpListener; | 46 | using CoolHTTPListener = HttpServer.HttpListener; |
47 | using HttpListener = System.Net.HttpListener; | ||
48 | using LogPrio = HttpServer.LogPrio; | 47 | using LogPrio = HttpServer.LogPrio; |
49 | using OpenSim.Framework.Monitoring; | 48 | using OpenSim.Framework.Monitoring; |
50 | using System.IO.Compression; | 49 | using System.IO.Compression; |
51 | using System.Security.Cryptography; | 50 | using System.Security.Cryptography; |
51 | using OpenSim.Framework.Servers; | ||
52 | 52 | ||
53 | namespace OpenSim.Framework.Servers.HttpServer | 53 | namespace OpenSim.Framework.Servers.HttpServer |
54 | { | 54 | { |
@@ -57,6 +57,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
57 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 57 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
58 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); | 58 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); |
59 | private static Encoding UTF8NoBOM = new System.Text.UTF8Encoding(false); | 59 | private static Encoding UTF8NoBOM = new System.Text.UTF8Encoding(false); |
60 | public static PollServiceRequestManager m_pollServiceManager; | ||
61 | private static object m_generalLock = new object(); | ||
60 | 62 | ||
61 | /// <summary> | 63 | /// <summary> |
62 | /// This is a pending websocket request before it got an sucessful upgrade response. | 64 | /// This is a pending websocket request before it got an sucessful upgrade response. |
@@ -119,7 +121,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
119 | 121 | ||
120 | protected IPAddress m_listenIPAddress = IPAddress.Any; | 122 | protected IPAddress m_listenIPAddress = IPAddress.Any; |
121 | 123 | ||
122 | public PollServiceRequestManager PollServiceRequestManager { get; private set; } | ||
123 | 124 | ||
124 | public string Protocol | 125 | public string Protocol |
125 | { | 126 | { |
@@ -249,46 +250,46 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
249 | m_ssl = false; | 250 | m_ssl = false; |
250 | } | 251 | } |
251 | 252 | ||
252 | static bool MatchDNS (string hostname, string dns) | 253 | static bool MatchDNS(string hostname, string dns) |
253 | { | 254 | { |
254 | int indx = dns.IndexOf ('*'); | 255 | int indx = dns.IndexOf('*'); |
255 | if (indx == -1) | 256 | if (indx == -1) |
256 | return (String.Compare(hostname, dns, true, CultureInfo.InvariantCulture) == 0); | 257 | return (String.Compare(hostname, dns, true, CultureInfo.InvariantCulture) == 0); |
257 | 258 | ||
258 | int dnslen = dns.Length; | 259 | int dnslen = dns.Length; |
259 | dnslen--; | 260 | dnslen--; |
260 | if(indx == dnslen) | 261 | if (indx == dnslen) |
261 | return true; // just * ? | 262 | return true; // just * ? |
262 | 263 | ||
263 | if(indx > dnslen - 2) | 264 | if (indx > dnslen - 2) |
264 | return false; // 2 short ? | 265 | return false; // 2 short ? |
265 | 266 | ||
266 | if (dns[indx + 1] != '.') | 267 | if (dns[indx + 1] != '.') |
267 | return false; | 268 | return false; |
268 | 269 | ||
269 | int indx2 = dns.IndexOf ('*', indx + 1); | 270 | int indx2 = dns.IndexOf('*', indx + 1); |
270 | if (indx2 != -1) | 271 | if (indx2 != -1) |
271 | return false; // there can only be one; | 272 | return false; // there can only be one; |
272 | 273 | ||
273 | string end = dns.Substring(indx + 1); | 274 | string end = dns.Substring(indx + 1); |
274 | int hostlen = hostname.Length; | 275 | int hostlen = hostname.Length; |
275 | int endlen = end.Length; | 276 | int endlen = end.Length; |
276 | int length = hostlen - endlen; | 277 | int length = hostlen - endlen; |
277 | if (length <= 0) | 278 | if (length <= 0) |
278 | return false; | 279 | return false; |
279 | 280 | ||
280 | if (String.Compare(hostname, length, end, 0, endlen, true, CultureInfo.InvariantCulture) != 0) | 281 | if (String.Compare(hostname, length, end, 0, endlen, true, CultureInfo.InvariantCulture) != 0) |
281 | return false; | 282 | return false; |
282 | 283 | ||
283 | if (indx == 0) | 284 | if (indx == 0) |
284 | { | 285 | { |
285 | indx2 = hostname.IndexOf ('.'); | 286 | indx2 = hostname.IndexOf('.'); |
286 | return ((indx2 == -1) || (indx2 >= length)); | 287 | return ((indx2 == -1) || (indx2 >= length)); |
287 | } | 288 | } |
288 | 289 | ||
289 | string start = dns.Substring (0, indx); | 290 | string start = dns.Substring(0, indx); |
290 | return (String.Compare (hostname, 0, start, 0, start.Length, true, CultureInfo.InvariantCulture) == 0); | 291 | return (String.Compare(hostname, 0, start, 0, start.Length, true, CultureInfo.InvariantCulture) == 0); |
291 | } | 292 | } |
292 | 293 | ||
293 | public bool CheckSSLCertHost(string hostname) | 294 | public bool CheckSSLCertHost(string hostname) |
294 | { | 295 | { |
@@ -527,7 +528,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
527 | public void OnRequest(object source, RequestEventArgs args) | 528 | public void OnRequest(object source, RequestEventArgs args) |
528 | { | 529 | { |
529 | RequestNumber++; | 530 | RequestNumber++; |
530 | |||
531 | try | 531 | try |
532 | { | 532 | { |
533 | IHttpClientContext context = (IHttpClientContext)source; | 533 | IHttpClientContext context = (IHttpClientContext)source; |
@@ -576,7 +576,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
576 | psEvArgs.Request(psreq.RequestID, keysvals); | 576 | psEvArgs.Request(psreq.RequestID, keysvals); |
577 | } | 577 | } |
578 | 578 | ||
579 | PollServiceRequestManager.Enqueue(psreq); | 579 | m_pollServiceManager.Enqueue(psreq); |
580 | } | 580 | } |
581 | else | 581 | else |
582 | { | 582 | { |
@@ -616,16 +616,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
616 | request.AcceptTypes[i] = string.Empty; | 616 | request.AcceptTypes[i] = string.Empty; |
617 | } | 617 | } |
618 | 618 | ||
619 | // public void ConvertIHttpClientContextToOSHttp(object stateinfo) | ||
620 | // { | ||
621 | // HttpServerContextObj objstate = (HttpServerContextObj)stateinfo; | ||
622 | |||
623 | // OSHttpRequest request = objstate.oreq; | ||
624 | // OSHttpResponse resp = objstate.oresp; | ||
625 | |||
626 | // HandleRequest(request,resp); | ||
627 | // } | ||
628 | |||
629 | /// <summary> | 619 | /// <summary> |
630 | /// This methods is the start of incoming HTTP request handling. | 620 | /// This methods is the start of incoming HTTP request handling. |
631 | /// </summary> | 621 | /// </summary> |
@@ -2036,7 +2026,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
2036 | 2026 | ||
2037 | public void Start() | 2027 | public void Start() |
2038 | { | 2028 | { |
2039 | Start(true,true); | 2029 | Start(true, true); |
2040 | } | 2030 | } |
2041 | 2031 | ||
2042 | /// <summary> | 2032 | /// <summary> |
@@ -2085,11 +2075,14 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
2085 | //m_httpListener.Start(); | 2075 | //m_httpListener.Start(); |
2086 | m_httpListener2.Start(64); | 2076 | m_httpListener2.Start(64); |
2087 | 2077 | ||
2088 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events | 2078 | lock(m_generalLock) |
2089 | if(runPool) | ||
2090 | { | 2079 | { |
2091 | PollServiceRequestManager = new PollServiceRequestManager(this, performPollResponsesAsync, 2, 25000); | 2080 | if (runPool) |
2092 | PollServiceRequestManager.Start(); | 2081 | { |
2082 | if(m_pollServiceManager == null) | ||
2083 | m_pollServiceManager = new PollServiceRequestManager(performPollResponsesAsync, 2, 25000); | ||
2084 | m_pollServiceManager.Start(); | ||
2085 | } | ||
2093 | } | 2086 | } |
2094 | 2087 | ||
2095 | HTTPDRunning = true; | 2088 | HTTPDRunning = true; |
@@ -2143,27 +2136,22 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
2143 | if (source.ToString() == "HttpServer.HttpListener" && exception.ToString().StartsWith("Mono.Security.Protocol.Tls.TlsException")) | 2136 | if (source.ToString() == "HttpServer.HttpListener" && exception.ToString().StartsWith("Mono.Security.Protocol.Tls.TlsException")) |
2144 | return; | 2137 | return; |
2145 | m_log.ErrorFormat("[BASE HTTP SERVER]: {0} had an exception {1}", source.ToString(), exception.ToString()); | 2138 | m_log.ErrorFormat("[BASE HTTP SERVER]: {0} had an exception {1}", source.ToString(), exception.ToString()); |
2146 | /* | ||
2147 | if (HTTPDRunning)// && NotSocketErrors > 5) | ||
2148 | { | ||
2149 | Stop(); | ||
2150 | Thread.Sleep(200); | ||
2151 | StartHTTP(); | ||
2152 | m_log.Warn("[HTTPSERVER]: Died. Trying to kick....."); | ||
2153 | } | ||
2154 | */ | ||
2155 | } | 2139 | } |
2156 | 2140 | ||
2157 | public void Stop() | 2141 | public void Stop(bool stopPool = false) |
2158 | { | 2142 | { |
2159 | HTTPDRunning = false; | 2143 | HTTPDRunning = false; |
2160 | 2144 | ||
2145 | |||
2161 | StatsManager.DeregisterStat(m_requestsProcessedStat); | 2146 | StatsManager.DeregisterStat(m_requestsProcessedStat); |
2162 | 2147 | ||
2163 | try | 2148 | try |
2164 | { | 2149 | { |
2165 | if(PollServiceRequestManager != null) | 2150 | lock(m_generalLock) |
2166 | PollServiceRequestManager.Stop(); | 2151 | { |
2152 | if (stopPool && m_pollServiceManager != null) | ||
2153 | m_pollServiceManager.Stop(); | ||
2154 | } | ||
2167 | 2155 | ||
2168 | m_httpListener2.ExceptionThrown -= httpServerException; | 2156 | m_httpListener2.ExceptionThrown -= httpServerException; |
2169 | //m_httpListener2.DisconnectHandler = null; | 2157 | //m_httpListener2.DisconnectHandler = null; |
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceHttpRequest.cs index 04eb8de..beeef70 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceHttpRequest.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceHttpRequest.cs | |||
@@ -79,12 +79,12 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
79 | contextHash = HttpContext.contextID; | 79 | contextHash = HttpContext.contextID; |
80 | } | 80 | } |
81 | 81 | ||
82 | internal void DoHTTPGruntWork(BaseHttpServer server, Hashtable responsedata) | 82 | internal void DoHTTPGruntWork(Hashtable responsedata) |
83 | { | 83 | { |
84 | OSHttpResponse response | 84 | OSHttpResponse response |
85 | = new OSHttpResponse(new HttpResponse(HttpContext, Request), HttpContext); | 85 | = new OSHttpResponse(new HttpResponse(HttpContext, Request), HttpContext); |
86 | 86 | ||
87 | byte[] buffer = server.DoHTTPGruntWork(responsedata, response); | 87 | byte[] buffer = srvDoHTTPGruntWork(responsedata, response); |
88 | 88 | ||
89 | if(Request.Body.CanRead) | 89 | if(Request.Body.CanRead) |
90 | Request.Body.Dispose(); | 90 | Request.Body.Dispose(); |
@@ -114,7 +114,119 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
114 | PollServiceArgs.RequestsHandled++; | 114 | PollServiceArgs.RequestsHandled++; |
115 | } | 115 | } |
116 | 116 | ||
117 | internal void DoHTTPstop(BaseHttpServer server) | 117 | internal byte[] srvDoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) |
118 | { | ||
119 | int responsecode; | ||
120 | string responseString = String.Empty; | ||
121 | byte[] responseData = null; | ||
122 | string contentType; | ||
123 | |||
124 | if (responsedata == null) | ||
125 | { | ||
126 | responsecode = 500; | ||
127 | responseString = "No response could be obtained"; | ||
128 | contentType = "text/plain"; | ||
129 | responsedata = new Hashtable(); | ||
130 | } | ||
131 | else | ||
132 | { | ||
133 | try | ||
134 | { | ||
135 | //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); | ||
136 | responsecode = (int)responsedata["int_response_code"]; | ||
137 | if (responsedata["bin_response_data"] != null) | ||
138 | responseData = (byte[])responsedata["bin_response_data"]; | ||
139 | else | ||
140 | responseString = (string)responsedata["str_response_string"]; | ||
141 | contentType = (string)responsedata["content_type"]; | ||
142 | if (responseString == null) | ||
143 | responseString = String.Empty; | ||
144 | } | ||
145 | catch | ||
146 | { | ||
147 | responsecode = 500; | ||
148 | responseString = "No response could be obtained"; | ||
149 | contentType = "text/plain"; | ||
150 | responsedata = new Hashtable(); | ||
151 | } | ||
152 | } | ||
153 | |||
154 | if (responsedata.ContainsKey("error_status_text")) | ||
155 | { | ||
156 | response.StatusDescription = (string)responsedata["error_status_text"]; | ||
157 | } | ||
158 | if (responsedata.ContainsKey("http_protocol_version")) | ||
159 | { | ||
160 | response.ProtocolVersion = (string)responsedata["http_protocol_version"]; | ||
161 | } | ||
162 | |||
163 | if (responsedata.ContainsKey("keepalive")) | ||
164 | { | ||
165 | bool keepalive = (bool)responsedata["keepalive"]; | ||
166 | response.KeepAlive = keepalive; | ||
167 | } | ||
168 | |||
169 | // Cross-Origin Resource Sharing with simple requests | ||
170 | if (responsedata.ContainsKey("access_control_allow_origin")) | ||
171 | response.AddHeader("Access-Control-Allow-Origin", (string)responsedata["access_control_allow_origin"]); | ||
172 | |||
173 | //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this | ||
174 | //and should check for NullReferenceExceptions | ||
175 | |||
176 | if (string.IsNullOrEmpty(contentType)) | ||
177 | { | ||
178 | contentType = "text/html"; | ||
179 | } | ||
180 | |||
181 | // The client ignores anything but 200 here for web login, so ensure that this is 200 for that | ||
182 | |||
183 | response.StatusCode = responsecode; | ||
184 | |||
185 | if (responsecode == (int)OSHttpStatusCode.RedirectMovedPermanently) | ||
186 | { | ||
187 | response.RedirectLocation = (string)responsedata["str_redirect_location"]; | ||
188 | response.StatusCode = responsecode; | ||
189 | } | ||
190 | |||
191 | response.AddHeader("Content-Type", contentType); | ||
192 | if (responsedata.ContainsKey("headers")) | ||
193 | { | ||
194 | Hashtable headerdata = (Hashtable)responsedata["headers"]; | ||
195 | |||
196 | foreach (string header in headerdata.Keys) | ||
197 | response.AddHeader(header, headerdata[header].ToString()); | ||
198 | } | ||
199 | |||
200 | byte[] buffer; | ||
201 | |||
202 | if (responseData != null) | ||
203 | { | ||
204 | buffer = responseData; | ||
205 | } | ||
206 | else | ||
207 | { | ||
208 | if (!(contentType.Contains("image") | ||
209 | || contentType.Contains("x-shockwave-flash") | ||
210 | || contentType.Contains("application/x-oar") | ||
211 | || contentType.Contains("application/vnd.ll.mesh"))) | ||
212 | { | ||
213 | // Text | ||
214 | buffer = Encoding.UTF8.GetBytes(responseString); | ||
215 | } | ||
216 | else | ||
217 | { | ||
218 | // Binary! | ||
219 | buffer = Convert.FromBase64String(responseString); | ||
220 | } | ||
221 | |||
222 | response.SendChunked = false; | ||
223 | response.ContentLength64 = buffer.Length; | ||
224 | response.ContentEncoding = Encoding.UTF8; | ||
225 | } | ||
226 | |||
227 | return buffer; | ||
228 | } | ||
229 | internal void DoHTTPstop() | ||
118 | { | 230 | { |
119 | OSHttpResponse response | 231 | OSHttpResponse response |
120 | = new OSHttpResponse(new HttpResponse(HttpContext, Request), HttpContext); | 232 | = new OSHttpResponse(new HttpResponse(HttpContext, Request), HttpContext); |
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index ec16d7c..b9ac155 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -41,8 +41,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
41 | { | 41 | { |
42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
43 | 43 | ||
44 | private readonly BaseHttpServer m_server; | ||
45 | |||
46 | private Dictionary<int, Queue<PollServiceHttpRequest>> m_bycontext; | 44 | private Dictionary<int, Queue<PollServiceHttpRequest>> m_bycontext; |
47 | private BlockingCollection<PollServiceHttpRequest> m_requests = new BlockingCollection<PollServiceHttpRequest>(); | 45 | private BlockingCollection<PollServiceHttpRequest> m_requests = new BlockingCollection<PollServiceHttpRequest>(); |
48 | private ConcurrentQueue<PollServiceHttpRequest> m_retryRequests = new ConcurrentQueue<PollServiceHttpRequest>(); | 46 | private ConcurrentQueue<PollServiceHttpRequest> m_retryRequests = new ConcurrentQueue<PollServiceHttpRequest>(); |
@@ -56,9 +54,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
56 | private SmartThreadPool m_threadPool; | 54 | private SmartThreadPool m_threadPool; |
57 | 55 | ||
58 | public PollServiceRequestManager( | 56 | public PollServiceRequestManager( |
59 | BaseHttpServer pSrv, bool performResponsesAsync, uint pWorkerThreadCount, int pTimeout) | 57 | bool performResponsesAsync, uint pWorkerThreadCount, int pTimeout) |
60 | { | 58 | { |
61 | m_server = pSrv; | ||
62 | m_WorkerThreadCount = pWorkerThreadCount; | 59 | m_WorkerThreadCount = pWorkerThreadCount; |
63 | m_workerThreads = new Thread[m_WorkerThreadCount]; | 60 | m_workerThreads = new Thread[m_WorkerThreadCount]; |
64 | 61 | ||
@@ -77,6 +74,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
77 | 74 | ||
78 | public void Start() | 75 | public void Start() |
79 | { | 76 | { |
77 | if(m_running) | ||
78 | return; | ||
80 | m_running = true; | 79 | m_running = true; |
81 | m_threadPool.Start(); | 80 | m_threadPool.Start(); |
82 | //startup worker threads | 81 | //startup worker threads |
@@ -85,7 +84,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
85 | m_workerThreads[i] | 84 | m_workerThreads[i] |
86 | = WorkManager.StartThread( | 85 | = WorkManager.StartThread( |
87 | PoolWorkerJob, | 86 | PoolWorkerJob, |
88 | string.Format("PollServiceWorkerThread {0}:{1}", i, m_server.Port), | 87 | string.Format("PollServiceWorkerThread {0}", i), |
89 | ThreadPriority.Normal, | 88 | ThreadPriority.Normal, |
90 | true, | 89 | true, |
91 | false, | 90 | false, |
@@ -95,7 +94,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
95 | 94 | ||
96 | m_retrysThread = WorkManager.StartThread( | 95 | m_retrysThread = WorkManager.StartThread( |
97 | this.CheckRetries, | 96 | this.CheckRetries, |
98 | string.Format("PollServiceWatcherThread:{0}", m_server.Port), | 97 | string.Format("PollServiceWatcherThread"), |
99 | ThreadPriority.Normal, | 98 | ThreadPriority.Normal, |
100 | true, | 99 | true, |
101 | true, | 100 | true, |
@@ -183,6 +182,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
183 | 182 | ||
184 | public void Stop() | 183 | public void Stop() |
185 | { | 184 | { |
185 | if(!m_running) | ||
186 | return; | ||
187 | |||
186 | m_running = false; | 188 | m_running = false; |
187 | 189 | ||
188 | Thread.Sleep(100); // let the world move | 190 | Thread.Sleep(100); // let the world move |
@@ -202,7 +204,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
202 | try | 204 | try |
203 | { | 205 | { |
204 | while(m_retryRequests.TryDequeue(out req)) | 206 | while(m_retryRequests.TryDequeue(out req)) |
205 | req.DoHTTPstop(m_server); | 207 | req.DoHTTPstop(); |
206 | } | 208 | } |
207 | catch | 209 | catch |
208 | { | 210 | { |
@@ -211,7 +213,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
211 | try | 213 | try |
212 | { | 214 | { |
213 | while(m_requests.TryTake(out req, 0)) | 215 | while(m_requests.TryTake(out req, 0)) |
214 | req.DoHTTPstop(m_server); | 216 | req.DoHTTPstop(); |
215 | } | 217 | } |
216 | catch | 218 | catch |
217 | { | 219 | { |
@@ -266,7 +268,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
266 | try | 268 | try |
267 | { | 269 | { |
268 | Hashtable responsedata = nreq.PollServiceArgs.GetEvents(nreq.RequestID, nreq.PollServiceArgs.Id); | 270 | Hashtable responsedata = nreq.PollServiceArgs.GetEvents(nreq.RequestID, nreq.PollServiceArgs.Id); |
269 | nreq.DoHTTPGruntWork(m_server, responsedata); | 271 | nreq.DoHTTPGruntWork(responsedata); |
270 | } | 272 | } |
271 | catch (ObjectDisposedException) { } | 273 | catch (ObjectDisposedException) { } |
272 | finally | 274 | finally |
@@ -286,8 +288,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
286 | { | 288 | { |
287 | try | 289 | try |
288 | { | 290 | { |
289 | nreq.DoHTTPGruntWork(m_server, | 291 | nreq.DoHTTPGruntWork(nreq.PollServiceArgs.NoEvents(nreq.RequestID, nreq.PollServiceArgs.Id)); |
290 | nreq.PollServiceArgs.NoEvents(nreq.RequestID, nreq.PollServiceArgs.Id)); | ||
291 | } | 292 | } |
292 | catch (ObjectDisposedException) {} | 293 | catch (ObjectDisposedException) {} |
293 | finally | 294 | finally |
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs index 523ccba..6a9be12 100644 --- a/OpenSim/Framework/Servers/MainServer.cs +++ b/OpenSim/Framework/Servers/MainServer.cs | |||
@@ -87,14 +87,15 @@ namespace OpenSim.Framework.Servers | |||
87 | set | 87 | set |
88 | { | 88 | { |
89 | lock (m_Servers) | 89 | lock (m_Servers) |
90 | { | ||
90 | if (!m_Servers.ContainsValue(value)) | 91 | if (!m_Servers.ContainsValue(value)) |
91 | throw new Exception("HTTP server must already have been registered to be set as the main instance"); | 92 | throw new Exception("HTTP server must already have been registered to be set as the main instance"); |
92 | 93 | ||
93 | instance = value; | 94 | instance = value; |
95 | } | ||
94 | } | 96 | } |
95 | } | 97 | } |
96 | 98 | ||
97 | |||
98 | public static BaseHttpServer UnSecureInstance | 99 | public static BaseHttpServer UnSecureInstance |
99 | { | 100 | { |
100 | get { return unsecureinstance; } | 101 | get { return unsecureinstance; } |
@@ -372,14 +373,14 @@ namespace OpenSim.Framework.Servers | |||
372 | 373 | ||
373 | public static void Stop() | 374 | public static void Stop() |
374 | { | 375 | { |
376 | PollServiceRequestManager pool = null; | ||
375 | lock (m_Servers) | 377 | lock (m_Servers) |
376 | { | 378 | { |
377 | foreach (BaseHttpServer httpServer in m_Servers.Values) | 379 | foreach (BaseHttpServer httpServer in m_Servers.Values) |
378 | { | 380 | { |
379 | httpServer.Stop(); | 381 | httpServer.Stop(true); |
380 | } | 382 | } |
381 | } | 383 | } |
382 | } | 384 | } |
383 | |||
384 | } | 385 | } |
385 | } \ No newline at end of file | 386 | } \ No newline at end of file |