diff options
Diffstat (limited to 'OpenSim/Framework/Servers/OSHttpResponse.cs')
-rw-r--r-- | OpenSim/Framework/Servers/OSHttpResponse.cs | 200 |
1 files changed, 52 insertions, 148 deletions
diff --git a/OpenSim/Framework/Servers/OSHttpResponse.cs b/OpenSim/Framework/Servers/OSHttpResponse.cs index 24bf340..6b20bf3 100644 --- a/OpenSim/Framework/Servers/OSHttpResponse.cs +++ b/OpenSim/Framework/Servers/OSHttpResponse.cs | |||
@@ -38,19 +38,8 @@ namespace OpenSim.Framework.Servers | |||
38 | /// OSHttpResponse is the OpenSim representation of an HTTP | 38 | /// OSHttpResponse is the OpenSim representation of an HTTP |
39 | /// response. | 39 | /// response. |
40 | /// </summary> | 40 | /// </summary> |
41 | /// <remarks> | ||
42 | /// OSHttpResponse is currently dual "homed" in that it support | ||
43 | /// both the .NET HttpListenerResponse and the HttpServer | ||
44 | /// HttpResponse (similar to OSHttpRequest); this duality is only | ||
45 | /// temporary and the .NET usage will disappear once the switch to | ||
46 | /// HttpServer is completed. | ||
47 | /// </remarks> | ||
48 | public class OSHttpResponse | 41 | public class OSHttpResponse |
49 | { | 42 | { |
50 | |||
51 | // property code below is a bit messy, will all resolve to | ||
52 | // harmony once we've completed the switch | ||
53 | |||
54 | /// <summary> | 43 | /// <summary> |
55 | /// Content type property. | 44 | /// Content type property. |
56 | /// </summary> | 45 | /// </summary> |
@@ -62,22 +51,12 @@ namespace OpenSim.Framework.Servers | |||
62 | { | 51 | { |
63 | get | 52 | get |
64 | { | 53 | { |
65 | if (HttpServer) | 54 | return _httpResponse.ContentType; |
66 | return _httpResponse.ContentType; | ||
67 | else | ||
68 | return _httpListenerResponse.ContentType; | ||
69 | } | 55 | } |
56 | |||
70 | set | 57 | set |
71 | { | 58 | { |
72 | if (HttpServer) | 59 | _httpResponse.ContentType = value; |
73 | { | ||
74 | _httpResponse.ContentType = value; | ||
75 | } | ||
76 | else | ||
77 | { | ||
78 | _httpListenerResponse.ContentType = value; | ||
79 | _contentTypeSet = true; | ||
80 | } | ||
81 | } | 60 | } |
82 | } | 61 | } |
83 | 62 | ||
@@ -102,17 +81,12 @@ namespace OpenSim.Framework.Servers | |||
102 | { | 81 | { |
103 | get | 82 | get |
104 | { | 83 | { |
105 | if (HttpServer) | 84 | return _httpResponse.ContentLength; |
106 | return _httpResponse.ContentLength; | ||
107 | else | ||
108 | return _httpListenerResponse.ContentLength64; | ||
109 | } | 85 | } |
86 | |||
110 | set | 87 | set |
111 | { | 88 | { |
112 | if (HttpServer) | 89 | _httpResponse.ContentLength = value; |
113 | _httpResponse.ContentLength = value; | ||
114 | else | ||
115 | _httpListenerResponse.ContentLength64 = value; | ||
116 | } | 90 | } |
117 | } | 91 | } |
118 | 92 | ||
@@ -132,59 +106,55 @@ namespace OpenSim.Framework.Servers | |||
132 | { | 106 | { |
133 | get | 107 | get |
134 | { | 108 | { |
135 | if (HttpServer) | 109 | return _httpResponse.Encoding; |
136 | return _httpResponse.Encoding; | ||
137 | else | ||
138 | return _httpListenerResponse.ContentEncoding; | ||
139 | } | 110 | } |
140 | 111 | ||
141 | set | 112 | set |
142 | { | 113 | { |
143 | if (HttpServer) | 114 | _httpResponse.Encoding = value; |
144 | _httpResponse.Encoding = value; | ||
145 | else | ||
146 | _httpListenerResponse.ContentEncoding = value; | ||
147 | } | 115 | } |
148 | } | 116 | } |
149 | 117 | ||
150 | /// <summary> | 118 | public bool KeepAlive |
151 | /// Headers of the response. | ||
152 | /// </summary> | ||
153 | public WebHeaderCollection Headers | ||
154 | { | 119 | { |
155 | get | 120 | get |
121 | { | ||
122 | return _httpResponse.Connection == ConnectionType.KeepAlive; | ||
123 | } | ||
124 | |||
125 | set | ||
156 | { | 126 | { |
157 | if (HttpServer) | 127 | if (value) |
158 | return null; | 128 | _httpResponse.Connection = ConnectionType.KeepAlive; |
159 | else | 129 | else |
160 | return _httpListenerResponse.Headers; | 130 | _httpResponse.Connection = ConnectionType.Close; |
161 | } | 131 | } |
162 | } | 132 | } |
163 | 133 | ||
164 | /// <summary> | 134 | /// <summary> |
165 | /// Get or set the keep alive property. | 135 | /// Get or set the keep alive timeout property (default is |
136 | /// 20). Setting this to 0 also disables KeepAlive. Setting | ||
137 | /// this to something else but 0 also enable KeepAlive. | ||
166 | /// </summary> | 138 | /// </summary> |
167 | public bool KeepAlive | 139 | public int KeepAliveTimeout |
168 | { | 140 | { |
169 | get | 141 | get |
170 | { | 142 | { |
171 | if (HttpServer) | 143 | return _httpResponse.KeepAlive; |
172 | return _httpResponse.Connection == ConnectionType.KeepAlive; | ||
173 | else | ||
174 | return _httpListenerResponse.KeepAlive; | ||
175 | } | 144 | } |
176 | 145 | ||
177 | set | 146 | set |
178 | { | 147 | { |
179 | if (HttpServer) | 148 | if (value == 0) |
180 | { | 149 | { |
181 | if (value == true) | 150 | _httpResponse.Connection = ConnectionType.Close; |
182 | _httpResponse.Connection = ConnectionType.KeepAlive; | 151 | _httpResponse.KeepAlive = 0; |
183 | else | ||
184 | _httpResponse.Connection = ConnectionType.Close; | ||
185 | } | 152 | } |
186 | else | 153 | else |
187 | _httpListenerResponse.KeepAlive = value; | 154 | { |
155 | _httpResponse.Connection = ConnectionType.KeepAlive; | ||
156 | _httpResponse.KeepAlive = value; | ||
157 | } | ||
188 | } | 158 | } |
189 | } | 159 | } |
190 | 160 | ||
@@ -198,10 +168,7 @@ namespace OpenSim.Framework.Servers | |||
198 | { | 168 | { |
199 | get | 169 | get |
200 | { | 170 | { |
201 | if (HttpServer) | 171 | return _httpResponse.Body; |
202 | return _httpResponse.Body; | ||
203 | else | ||
204 | return _httpListenerResponse.OutputStream; | ||
205 | } | 172 | } |
206 | } | 173 | } |
207 | 174 | ||
@@ -209,18 +176,12 @@ namespace OpenSim.Framework.Servers | |||
209 | { | 176 | { |
210 | get | 177 | get |
211 | { | 178 | { |
212 | if (HttpServer) | 179 | return _httpResponse.ProtocolVersion; |
213 | return _httpResponse.ProtocolVersion; | ||
214 | else | ||
215 | return _httpListenerResponse.ProtocolVersion.ToString(); | ||
216 | } | 180 | } |
181 | |||
217 | set | 182 | set |
218 | { | 183 | { |
219 | if (HttpServer) | 184 | _httpResponse.ProtocolVersion = value; |
220 | _httpResponse.ProtocolVersion = value; | ||
221 | else | ||
222 | _httpListenerResponse.ProtocolVersion = new Version(value); ; | ||
223 | |||
224 | } | 185 | } |
225 | } | 186 | } |
226 | 187 | ||
@@ -231,9 +192,7 @@ namespace OpenSim.Framework.Servers | |||
231 | { | 192 | { |
232 | get | 193 | get |
233 | { | 194 | { |
234 | if (HttpServer) | 195 | return _httpResponse.Body; |
235 | return _httpResponse.Body; | ||
236 | throw new Exception("[OSHttpResponse] mixed .NET and HttpServer access"); | ||
237 | } | 196 | } |
238 | } | 197 | } |
239 | 198 | ||
@@ -245,10 +204,7 @@ namespace OpenSim.Framework.Servers | |||
245 | // get { return _redirectLocation; } | 204 | // get { return _redirectLocation; } |
246 | set | 205 | set |
247 | { | 206 | { |
248 | if (HttpServer) | 207 | _httpResponse.Redirect(value); |
249 | _httpResponse.Redirect(value); | ||
250 | else | ||
251 | _httpListenerResponse.RedirectLocation = value; | ||
252 | } | 208 | } |
253 | } | 209 | } |
254 | 210 | ||
@@ -260,18 +216,12 @@ namespace OpenSim.Framework.Servers | |||
260 | { | 216 | { |
261 | get | 217 | get |
262 | { | 218 | { |
263 | if (HttpServer) | ||
264 | return _httpResponse.Chunked; | 219 | return _httpResponse.Chunked; |
265 | else | ||
266 | return _httpListenerResponse.SendChunked; | ||
267 | } | 220 | } |
268 | 221 | ||
269 | set | 222 | set |
270 | { | 223 | { |
271 | if (HttpServer) | 224 | _httpResponse.Chunked = value; |
272 | _httpResponse.Chunked = value; | ||
273 | else | ||
274 | _httpListenerResponse.SendChunked = value; | ||
275 | } | 225 | } |
276 | } | 226 | } |
277 | 227 | ||
@@ -282,18 +232,12 @@ namespace OpenSim.Framework.Servers | |||
282 | { | 232 | { |
283 | get | 233 | get |
284 | { | 234 | { |
285 | if (HttpServer) | 235 | return (int)_httpResponse.Status; |
286 | return (int)_httpResponse.Status; | ||
287 | else | ||
288 | return _httpListenerResponse.StatusCode; | ||
289 | } | 236 | } |
290 | 237 | ||
291 | set | 238 | set |
292 | { | 239 | { |
293 | if (HttpServer) | 240 | _httpResponse.Status = (HttpStatusCode)value; |
294 | _httpResponse.Status = (HttpStatusCode)value; | ||
295 | else | ||
296 | _httpListenerResponse.StatusCode = value; | ||
297 | } | 241 | } |
298 | } | 242 | } |
299 | 243 | ||
@@ -305,64 +249,35 @@ namespace OpenSim.Framework.Servers | |||
305 | { | 249 | { |
306 | get | 250 | get |
307 | { | 251 | { |
308 | if (HttpServer) | 252 | return _httpResponse.Reason; |
309 | return _httpResponse.Reason; | ||
310 | else | ||
311 | return _httpListenerResponse.StatusDescription; | ||
312 | } | 253 | } |
313 | 254 | ||
314 | set | 255 | set |
315 | { | 256 | { |
316 | if (HttpServer) | 257 | _httpResponse.Reason = value; |
317 | _httpResponse.Reason = value; | ||
318 | else | ||
319 | _httpListenerResponse.StatusDescription = value; | ||
320 | } | 258 | } |
321 | } | 259 | } |
322 | 260 | ||
323 | 261 | ||
324 | internal bool HttpServer | 262 | protected IHttpResponse _httpResponse; |
325 | { | ||
326 | get { return null != _httpResponse; } | ||
327 | } | ||
328 | private HttpResponse _httpResponse; | ||
329 | private HttpListenerResponse _httpListenerResponse; | ||
330 | 263 | ||
331 | internal HttpResponse HttpResponse | 264 | public OSHttpResponse() {} |
332 | { | ||
333 | get { return _httpResponse; } | ||
334 | } | ||
335 | |||
336 | public OSHttpResponse() | ||
337 | { | ||
338 | } | ||
339 | 265 | ||
340 | /// <summary> | 266 | public OSHttpResponse(IHttpResponse resp) |
341 | /// Instantiate an OSHttpResponse object based on an | ||
342 | /// underlying .NET HttpListenerResponse. | ||
343 | /// </summary> | ||
344 | /// <remarks> | ||
345 | /// Almost deprecated; will go west to make once HttpServer | ||
346 | /// base takes over. | ||
347 | /// </remarks> | ||
348 | public OSHttpResponse(HttpListenerResponse resp) | ||
349 | { | ||
350 | _httpListenerResponse = resp; | ||
351 | } | ||
352 | public OSHttpResponse(HttpServer.HttpResponse resp) | ||
353 | { | 267 | { |
354 | _httpResponse = resp; | 268 | _httpResponse = resp; |
355 | } | 269 | } |
270 | |||
356 | /// <summary> | 271 | /// <summary> |
357 | /// Instantiate an OSHttpResponse object from an OSHttpRequest | 272 | /// Instantiate an OSHttpResponse object from an OSHttpRequest |
358 | /// object. | 273 | /// object. |
359 | /// </summary | 274 | /// </summary |
360 | /// <param name="req">Incoming OSHttpRequest to which we are | 275 | /// <param name="req">Incoming OSHttpRequest to which we are |
361 | /// replying</param> | 276 | /// replying</param> |
362 | // public OSHttpResponse(OSHttpRequest req) | 277 | public OSHttpResponse(OSHttpRequest req) |
363 | // { | 278 | { |
364 | // _httpResponse = new HttpResponse(req.HttpClientContext, req.HttpRequest); | 279 | _httpResponse = new HttpResponse(req.IHttpClientContext, req.IHttpRequest); |
365 | // } | 280 | } |
366 | 281 | ||
367 | /// <summary> | 282 | /// <summary> |
368 | /// Add a header field and content to the response. | 283 | /// Add a header field and content to the response. |
@@ -373,10 +288,7 @@ namespace OpenSim.Framework.Servers | |||
373 | /// value</param> | 288 | /// value</param> |
374 | public void AddHeader(string key, string value) | 289 | public void AddHeader(string key, string value) |
375 | { | 290 | { |
376 | if (HttpServer) | 291 | _httpResponse.AddHeader(key, value); |
377 | _httpResponse.AddHeader(key, value); | ||
378 | else | ||
379 | _httpListenerResponse.Headers.Add(key, value); | ||
380 | } | 292 | } |
381 | 293 | ||
382 | /// <summary> | 294 | /// <summary> |
@@ -384,16 +296,8 @@ namespace OpenSim.Framework.Servers | |||
384 | /// </summary> | 296 | /// </summary> |
385 | public void Send() | 297 | public void Send() |
386 | { | 298 | { |
387 | if (HttpServer) | 299 | _httpResponse.Body.Flush(); |
388 | { | 300 | _httpResponse.Send(); |
389 | _httpResponse.Body.Flush(); | ||
390 | _httpResponse.Send(); | ||
391 | |||
392 | } | ||
393 | else | ||
394 | { | ||
395 | OutputStream.Close(); | ||
396 | } | ||
397 | } | 301 | } |
398 | } | 302 | } |
399 | } | 303 | } |