diff options
Diffstat (limited to 'OpenSim/Framework/Servers')
7 files changed, 180 insertions, 83 deletions
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 4ab6908..bfd67c7 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs | |||
@@ -130,7 +130,17 @@ namespace OpenSim.Framework.Servers | |||
130 | /// Performs initialisation of the scene, such as loading configuration from disk. | 130 | /// Performs initialisation of the scene, such as loading configuration from disk. |
131 | /// </summary> | 131 | /// </summary> |
132 | public virtual void Startup() | 132 | public virtual void Startup() |
133 | { | 133 | { |
134 | m_log.Info("[STARTUP]: Beginning startup processing"); | ||
135 | |||
136 | m_log.Info("[STARTUP]: Careminster version: " + m_version + Environment.NewLine); | ||
137 | // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and | ||
138 | // the clr version number doesn't match the project version number under Mono. | ||
139 | //m_log.Info("[STARTUP]: Virtual machine runtime version: " + Environment.Version + Environment.NewLine); | ||
140 | m_log.InfoFormat( | ||
141 | "[STARTUP]: Operating system version: {0}, .NET platform {1}, {2}-bit\n", | ||
142 | Environment.OSVersion, Environment.OSVersion.Platform, Util.Is64BitProcess() ? "64" : "32"); | ||
143 | |||
134 | StartupSpecific(); | 144 | StartupSpecific(); |
135 | 145 | ||
136 | TimeSpan timeTaken = DateTime.Now - m_startuptime; | 146 | TimeSpan timeTaken = DateTime.Now - m_startuptime; |
@@ -159,4 +169,4 @@ namespace OpenSim.Framework.Servers | |||
159 | } | 169 | } |
160 | } | 170 | } |
161 | } | 171 | } |
162 | } \ No newline at end of file | 172 | } |
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index c4e569d..f4b4156 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -401,6 +401,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
401 | StreamReader reader = new StreamReader(requestStream, encoding); | 401 | StreamReader reader = new StreamReader(requestStream, encoding); |
402 | 402 | ||
403 | string requestBody = reader.ReadToEnd(); | 403 | string requestBody = reader.ReadToEnd(); |
404 | reader.Close(); | ||
404 | 405 | ||
405 | Hashtable keysvals = new Hashtable(); | 406 | Hashtable keysvals = new Hashtable(); |
406 | Hashtable headervals = new Hashtable(); | 407 | Hashtable headervals = new Hashtable(); |
@@ -740,7 +741,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
740 | // Every month or so this will wrap and give bad numbers, not really a problem | 741 | // Every month or so this will wrap and give bad numbers, not really a problem |
741 | // since its just for reporting | 742 | // since its just for reporting |
742 | int tickdiff = requestEndTick - requestStartTick; | 743 | int tickdiff = requestEndTick - requestStartTick; |
743 | if (tickdiff > 3000 && requestHandler != null && requestHandler.Name != "GetTexture") | 744 | if (tickdiff > 3000 && (requestHandler == null || requestHandler.Name == null || requestHandler.Name != "GetTexture")) |
744 | { | 745 | { |
745 | m_log.InfoFormat( | 746 | m_log.InfoFormat( |
746 | "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms", | 747 | "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms", |
@@ -1661,10 +1662,40 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1661 | 1662 | ||
1662 | internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) | 1663 | internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) |
1663 | { | 1664 | { |
1664 | //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); | 1665 | int responsecode; |
1665 | int responsecode = (int)responsedata["int_response_code"]; | 1666 | string responseString = String.Empty; |
1666 | string responseString = (string)responsedata["str_response_string"]; | 1667 | byte[] responseData = null; |
1667 | string contentType = (string)responsedata["content_type"]; | 1668 | string contentType; |
1669 | |||
1670 | if (responsedata == null) | ||
1671 | { | ||
1672 | responsecode = 500; | ||
1673 | responseString = "No response could be obtained"; | ||
1674 | contentType = "text/plain"; | ||
1675 | responsedata = new Hashtable(); | ||
1676 | } | ||
1677 | else | ||
1678 | { | ||
1679 | try | ||
1680 | { | ||
1681 | //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); | ||
1682 | responsecode = (int)responsedata["int_response_code"]; | ||
1683 | if (responsedata["bin_response_data"] != null) | ||
1684 | responseData = (byte[])responsedata["bin_response_data"]; | ||
1685 | else | ||
1686 | responseString = (string)responsedata["str_response_string"]; | ||
1687 | contentType = (string)responsedata["content_type"]; | ||
1688 | if (responseString == null) | ||
1689 | responseString = String.Empty; | ||
1690 | } | ||
1691 | catch | ||
1692 | { | ||
1693 | responsecode = 500; | ||
1694 | responseString = "No response could be obtained"; | ||
1695 | contentType = "text/plain"; | ||
1696 | responsedata = new Hashtable(); | ||
1697 | } | ||
1698 | } | ||
1668 | 1699 | ||
1669 | if (responsedata.ContainsKey("error_status_text")) | 1700 | if (responsedata.ContainsKey("error_status_text")) |
1670 | { | 1701 | { |
@@ -1709,25 +1740,40 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1709 | 1740 | ||
1710 | response.AddHeader("Content-Type", contentType); | 1741 | response.AddHeader("Content-Type", contentType); |
1711 | 1742 | ||
1743 | if (responsedata.ContainsKey("headers")) | ||
1744 | { | ||
1745 | Hashtable headerdata = (Hashtable)responsedata["headers"]; | ||
1746 | |||
1747 | foreach (string header in headerdata.Keys) | ||
1748 | response.AddHeader(header, (string)headerdata[header]); | ||
1749 | } | ||
1750 | |||
1712 | byte[] buffer; | 1751 | byte[] buffer; |
1713 | 1752 | ||
1714 | if (!(contentType.Contains("image") | 1753 | if (responseData != null) |
1715 | || contentType.Contains("x-shockwave-flash") | ||
1716 | || contentType.Contains("application/x-oar") | ||
1717 | || contentType.Contains("application/vnd.ll.mesh"))) | ||
1718 | { | 1754 | { |
1719 | // Text | 1755 | buffer = responseData; |
1720 | buffer = Encoding.UTF8.GetBytes(responseString); | ||
1721 | } | 1756 | } |
1722 | else | 1757 | else |
1723 | { | 1758 | { |
1724 | // Binary! | 1759 | if (!(contentType.Contains("image") |
1725 | buffer = Convert.FromBase64String(responseString); | 1760 | || contentType.Contains("x-shockwave-flash") |
1726 | } | 1761 | || contentType.Contains("application/x-oar") |
1762 | || contentType.Contains("application/vnd.ll.mesh"))) | ||
1763 | { | ||
1764 | // Text | ||
1765 | buffer = Encoding.UTF8.GetBytes(responseString); | ||
1766 | } | ||
1767 | else | ||
1768 | { | ||
1769 | // Binary! | ||
1770 | buffer = Convert.FromBase64String(responseString); | ||
1771 | } | ||
1727 | 1772 | ||
1728 | response.SendChunked = false; | 1773 | response.SendChunked = false; |
1729 | response.ContentLength64 = buffer.Length; | 1774 | response.ContentLength64 = buffer.Length; |
1730 | response.ContentEncoding = Encoding.UTF8; | 1775 | response.ContentEncoding = Encoding.UTF8; |
1776 | } | ||
1731 | 1777 | ||
1732 | return buffer; | 1778 | return buffer; |
1733 | } | 1779 | } |
@@ -1808,7 +1854,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1808 | m_httpListener2.Start(64); | 1854 | m_httpListener2.Start(64); |
1809 | 1855 | ||
1810 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events | 1856 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events |
1811 | m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); | 1857 | m_PollServiceManager = new PollServiceRequestManager(this, 4, 25000); |
1812 | m_PollServiceManager.Start(); | 1858 | m_PollServiceManager.Start(); |
1813 | HTTPDRunning = true; | 1859 | HTTPDRunning = true; |
1814 | 1860 | ||
@@ -1858,7 +1904,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1858 | 1904 | ||
1859 | public void httpServerException(object source, Exception exception) | 1905 | public void httpServerException(object source, Exception exception) |
1860 | { | 1906 | { |
1861 | m_log.Error(String.Format("[BASE HTTP SERVER]: {0} had an exception: {1} ", source.ToString(), exception.Message), exception); | 1907 | if (source.ToString() == "HttpServer.HttpListener" && exception.ToString().StartsWith("Mono.Security.Protocol.Tls.TlsException")) |
1908 | return; | ||
1909 | m_log.ErrorFormat("[BASE HTTP SERVER]: {0} had an exception {1}", source.ToString(), exception.ToString()); | ||
1862 | /* | 1910 | /* |
1863 | if (HTTPDRunning)// && NotSocketErrors > 5) | 1911 | if (HTTPDRunning)// && NotSocketErrors > 5) |
1864 | { | 1912 | { |
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs index 9477100..3fd3bf7 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs | |||
@@ -52,7 +52,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
52 | { | 52 | { |
53 | LongPoll = 0, | 53 | LongPoll = 0, |
54 | LslHttp = 1, | 54 | LslHttp = 1, |
55 | Inventory = 2 | 55 | Inventory = 2, |
56 | Texture = 3, | ||
57 | Mesh = 4 | ||
56 | } | 58 | } |
57 | 59 | ||
58 | public string Url { get; set; } | 60 | public string Url { get; set; } |
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 6aa5907..44f7045 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -47,17 +47,18 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
47 | private readonly BaseHttpServer m_server; | 47 | private readonly BaseHttpServer m_server; |
48 | 48 | ||
49 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); | 49 | private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); |
50 | private static List<PollServiceHttpRequest> m_longPollRequests = new List<PollServiceHttpRequest>(); | 50 | private static Queue<PollServiceHttpRequest> m_slowRequests = new Queue<PollServiceHttpRequest>(); |
51 | private static Queue<PollServiceHttpRequest> m_retryRequests = new Queue<PollServiceHttpRequest>(); | ||
51 | 52 | ||
52 | private uint m_WorkerThreadCount = 0; | 53 | private uint m_WorkerThreadCount = 0; |
53 | private Thread[] m_workerThreads; | 54 | private Thread[] m_workerThreads; |
55 | private Thread m_retrysThread; | ||
54 | 56 | ||
55 | private bool m_running = true; | 57 | private bool m_running = true; |
58 | private int slowCount = 0; | ||
56 | 59 | ||
57 | private SmartThreadPool m_threadPool = new SmartThreadPool(20000, 12, 2); | 60 | private SmartThreadPool m_threadPool = new SmartThreadPool(20000, 12, 2); |
58 | 61 | ||
59 | // private int m_timeout = 1000; // increase timeout 250; now use the event one | ||
60 | |||
61 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) | 62 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) |
62 | { | 63 | { |
63 | m_server = pSrv; | 64 | m_server = pSrv; |
@@ -81,9 +82,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
81 | int.MaxValue); | 82 | int.MaxValue); |
82 | } | 83 | } |
83 | 84 | ||
84 | Watchdog.StartThread( | 85 | m_retrysThread = Watchdog.StartThread( |
85 | this.CheckLongPollThreads, | 86 | this.CheckRetries, |
86 | string.Format("LongPollServiceWatcherThread:{0}", m_server.Port), | 87 | string.Format("PollServiceWatcherThread:{0}", m_server.Port), |
87 | ThreadPriority.Normal, | 88 | ThreadPriority.Normal, |
88 | false, | 89 | false, |
89 | true, | 90 | true, |
@@ -95,15 +96,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
95 | { | 96 | { |
96 | if (m_running) | 97 | if (m_running) |
97 | { | 98 | { |
98 | // delay the enqueueing for 100ms. There's no need to have the event | 99 | lock (m_retryRequests) |
99 | // actively on the queue | 100 | m_retryRequests.Enqueue(req); |
100 | Timer t = new Timer(self => { | ||
101 | ((Timer)self).Dispose(); | ||
102 | m_requests.Enqueue(req); | ||
103 | }); | ||
104 | |||
105 | t.Change(100, Timeout.Infinite); | ||
106 | |||
107 | } | 101 | } |
108 | } | 102 | } |
109 | 103 | ||
@@ -111,47 +105,39 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
111 | { | 105 | { |
112 | if (m_running) | 106 | if (m_running) |
113 | { | 107 | { |
114 | if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LongPoll) | 108 | if (req.PollServiceArgs.Type != PollServiceEventArgs.EventType.LongPoll) |
115 | { | 109 | { |
116 | lock (m_longPollRequests) | 110 | m_requests.Enqueue(req); |
117 | m_longPollRequests.Add(req); | ||
118 | } | 111 | } |
119 | else | 112 | else |
120 | m_requests.Enqueue(req); | 113 | { |
114 | lock (m_slowRequests) | ||
115 | m_slowRequests.Enqueue(req); | ||
116 | } | ||
121 | } | 117 | } |
122 | } | 118 | } |
123 | 119 | ||
124 | private void CheckLongPollThreads() | 120 | private void CheckRetries() |
125 | { | 121 | { |
126 | // The only purpose of this thread is to check the EQs for events. | ||
127 | // If there are events, that thread will be placed in the "ready-to-serve" queue, m_requests. | ||
128 | // If there are no events, that thread will be back to its "waiting" queue, m_longPollRequests. | ||
129 | // All other types of tasks (Inventory handlers, http-in, etc) don't have the long-poll nature, | ||
130 | // so if they aren't ready to be served by a worker thread (no events), they are placed | ||
131 | // directly back in the "ready-to-serve" queue by the worker thread. | ||
132 | while (m_running) | 122 | while (m_running) |
133 | { | 123 | { |
134 | Thread.Sleep(500); | 124 | Thread.Sleep(100); // let the world move .. back to faster rate |
135 | Watchdog.UpdateThread(); | 125 | Watchdog.UpdateThread(); |
136 | 126 | lock (m_retryRequests) | |
137 | // List<PollServiceHttpRequest> not_ready = new List<PollServiceHttpRequest>(); | ||
138 | lock (m_longPollRequests) | ||
139 | { | 127 | { |
140 | if (m_longPollRequests.Count > 0 && m_running) | 128 | while (m_retryRequests.Count > 0 && m_running) |
141 | { | 129 | m_requests.Enqueue(m_retryRequests.Dequeue()); |
142 | List<PollServiceHttpRequest> ready = m_longPollRequests.FindAll(req => | 130 | } |
143 | (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id) || // there are events in this EQ | 131 | slowCount++; |
144 | (Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) // no events, but timeout | 132 | if (slowCount >= 10) |
145 | ); | 133 | { |
146 | 134 | slowCount = 0; | |
147 | ready.ForEach(req => | ||
148 | { | ||
149 | m_requests.Enqueue(req); | ||
150 | m_longPollRequests.Remove(req); | ||
151 | }); | ||
152 | 135 | ||
136 | lock (m_slowRequests) | ||
137 | { | ||
138 | while (m_slowRequests.Count > 0 && m_running) | ||
139 | m_requests.Enqueue(m_slowRequests.Dequeue()); | ||
153 | } | 140 | } |
154 | |||
155 | } | 141 | } |
156 | } | 142 | } |
157 | } | 143 | } |
@@ -159,18 +145,30 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
159 | public void Stop() | 145 | public void Stop() |
160 | { | 146 | { |
161 | m_running = false; | 147 | m_running = false; |
162 | // m_timeout = -10000; // cause all to expire | ||
163 | Thread.Sleep(1000); // let the world move | 148 | Thread.Sleep(1000); // let the world move |
164 | 149 | ||
165 | foreach (Thread t in m_workerThreads) | 150 | foreach (Thread t in m_workerThreads) |
166 | Watchdog.AbortThread(t.ManagedThreadId); | 151 | Watchdog.AbortThread(t.ManagedThreadId); |
167 | 152 | ||
153 | try | ||
154 | { | ||
155 | foreach (PollServiceHttpRequest req in m_retryRequests) | ||
156 | { | ||
157 | DoHTTPGruntWork(m_server,req, | ||
158 | req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id)); | ||
159 | } | ||
160 | } | ||
161 | catch | ||
162 | { | ||
163 | } | ||
164 | |||
168 | PollServiceHttpRequest wreq; | 165 | PollServiceHttpRequest wreq; |
166 | m_retryRequests.Clear(); | ||
169 | 167 | ||
170 | lock (m_longPollRequests) | 168 | lock (m_slowRequests) |
171 | { | 169 | { |
172 | if (m_longPollRequests.Count > 0 && m_running) | 170 | while (m_slowRequests.Count > 0 && m_running) |
173 | m_longPollRequests.ForEach(req => m_requests.Enqueue(req)); | 171 | m_requests.Enqueue(m_slowRequests.Dequeue()); |
174 | } | 172 | } |
175 | 173 | ||
176 | while (m_requests.Count() > 0) | 174 | while (m_requests.Count() > 0) |
@@ -178,15 +176,14 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
178 | try | 176 | try |
179 | { | 177 | { |
180 | wreq = m_requests.Dequeue(0); | 178 | wreq = m_requests.Dequeue(0); |
181 | wreq.DoHTTPGruntWork( | 179 | DoHTTPGruntWork(m_server,wreq, |
182 | m_server, wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id)); | 180 | wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id)); |
183 | } | 181 | } |
184 | catch | 182 | catch |
185 | { | 183 | { |
186 | } | 184 | } |
187 | } | 185 | } |
188 | 186 | ||
189 | m_longPollRequests.Clear(); | ||
190 | m_requests.Clear(); | 187 | m_requests.Clear(); |
191 | } | 188 | } |
192 | 189 | ||
@@ -197,7 +194,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
197 | while (m_running) | 194 | while (m_running) |
198 | { | 195 | { |
199 | PollServiceHttpRequest req = m_requests.Dequeue(5000); | 196 | PollServiceHttpRequest req = m_requests.Dequeue(5000); |
200 | //m_log.WarnFormat("[YYY]: Dequeued {0}", (req == null ? "null" : req.PollServiceArgs.Type.ToString())); | ||
201 | 197 | ||
202 | Watchdog.UpdateThread(); | 198 | Watchdog.UpdateThread(); |
203 | if (req != null) | 199 | if (req != null) |
@@ -215,7 +211,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
215 | { | 211 | { |
216 | try | 212 | try |
217 | { | 213 | { |
218 | req.DoHTTPGruntWork(m_server, responsedata); | 214 | DoHTTPGruntWork(m_server, req, responsedata); |
219 | } | 215 | } |
220 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream | 216 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream |
221 | { | 217 | { |
@@ -228,7 +224,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
228 | { | 224 | { |
229 | try | 225 | try |
230 | { | 226 | { |
231 | req.DoHTTPGruntWork(m_server, responsedata); | 227 | DoHTTPGruntWork(m_server, req, responsedata); |
232 | } | 228 | } |
233 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream | 229 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream |
234 | { | 230 | { |
@@ -243,8 +239,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
243 | { | 239 | { |
244 | if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) | 240 | if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms) |
245 | { | 241 | { |
246 | req.DoHTTPGruntWork( | 242 | DoHTTPGruntWork(m_server, req, |
247 | m_server, req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id)); | 243 | req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id)); |
248 | } | 244 | } |
249 | else | 245 | else |
250 | { | 246 | { |
@@ -259,5 +255,42 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
259 | } | 255 | } |
260 | } | 256 | } |
261 | } | 257 | } |
258 | |||
259 | // DoHTTPGruntWork changed, not sending response | ||
260 | // do the same work around as core | ||
261 | |||
262 | internal static void DoHTTPGruntWork(BaseHttpServer server, PollServiceHttpRequest req, Hashtable responsedata) | ||
263 | { | ||
264 | OSHttpResponse response | ||
265 | = new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext); | ||
266 | |||
267 | byte[] buffer = server.DoHTTPGruntWork(responsedata, response); | ||
268 | |||
269 | response.SendChunked = false; | ||
270 | response.ContentLength64 = buffer.Length; | ||
271 | response.ContentEncoding = Encoding.UTF8; | ||
272 | |||
273 | try | ||
274 | { | ||
275 | response.OutputStream.Write(buffer, 0, buffer.Length); | ||
276 | } | ||
277 | catch (Exception ex) | ||
278 | { | ||
279 | m_log.Warn(string.Format("[POLL SERVICE WORKER THREAD]: Error ", ex)); | ||
280 | } | ||
281 | finally | ||
282 | { | ||
283 | try | ||
284 | { | ||
285 | response.OutputStream.Flush(); | ||
286 | response.Send(); | ||
287 | } | ||
288 | catch (Exception e) | ||
289 | { | ||
290 | m_log.Warn(String.Format("[POLL SERVICE WORKER THREAD]: Error ", e)); | ||
291 | } | ||
292 | } | ||
293 | } | ||
262 | } | 294 | } |
263 | } \ No newline at end of file | 295 | } |
296 | |||
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs index c258ff6..7108314 100644 --- a/OpenSim/Framework/Servers/ServerBase.cs +++ b/OpenSim/Framework/Servers/ServerBase.cs | |||
@@ -769,7 +769,7 @@ namespace OpenSim.Framework.Servers | |||
769 | } | 769 | } |
770 | } | 770 | } |
771 | 771 | ||
772 | protected string GetVersionText() | 772 | public string GetVersionText() |
773 | { | 773 | { |
774 | return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion); | 774 | return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion); |
775 | } | 775 | } |
@@ -942,4 +942,4 @@ namespace OpenSim.Framework.Servers | |||
942 | /// </summary> | 942 | /// </summary> |
943 | protected virtual void ShutdownSpecific() {} | 943 | protected virtual void ShutdownSpecific() {} |
944 | } | 944 | } |
945 | } \ No newline at end of file | 945 | } |
diff --git a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs index 5b912b4..deae45c 100644 --- a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs +++ b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs | |||
@@ -81,6 +81,10 @@ namespace OpenSim.Framework.Servers.Tests | |||
81 | /// </summary> | 81 | /// </summary> |
82 | public event EventHandler<RequestEventArgs> RequestReceived = delegate { }; | 82 | public event EventHandler<RequestEventArgs> RequestReceived = delegate { }; |
83 | 83 | ||
84 | public bool CanSend { get { return true; } } | ||
85 | public string RemoteEndPoint { get { return ""; } } | ||
86 | public string RemoteEndPointAddress { get { return ""; } } | ||
87 | public string RemoteEndPointPort { get { return ""; } } | ||
84 | } | 88 | } |
85 | 89 | ||
86 | public class TestHttpRequest: IHttpRequest | 90 | public class TestHttpRequest: IHttpRequest |
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs index 80568e0..737c14d 100644 --- a/OpenSim/Framework/Servers/VersionInfo.cs +++ b/OpenSim/Framework/Servers/VersionInfo.cs | |||
@@ -29,11 +29,11 @@ namespace OpenSim | |||
29 | { | 29 | { |
30 | public class VersionInfo | 30 | public class VersionInfo |
31 | { | 31 | { |
32 | private const string VERSION_NUMBER = "0.7.6"; | 32 | private const string VERSION_NUMBER = "0.7.6CM"; |
33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; | 33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; |
34 | 34 | ||
35 | public enum Flavour | 35 | public enum Flavour |
36 | { | 36 | { |
37 | Unknown, | 37 | Unknown, |
38 | Dev, | 38 | Dev, |
39 | RC1, | 39 | RC1, |
@@ -50,7 +50,7 @@ namespace OpenSim | |||
50 | 50 | ||
51 | public static string GetVersionString(string versionNumber, Flavour flavour) | 51 | public static string GetVersionString(string versionNumber, Flavour flavour) |
52 | { | 52 | { |
53 | string versionString = "OpenSim " + versionNumber + " " + flavour; | 53 | string versionString = "Careminster " + versionNumber + " " + flavour; |
54 | return versionString.PadRight(VERSIONINFO_VERSION_LENGTH); | 54 | return versionString.PadRight(VERSIONINFO_VERSION_LENGTH); |
55 | } | 55 | } |
56 | 56 | ||