aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers/HttpServer
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-12-05 20:44:20 +0000
committerJustin Clark-Casey (justincc)2011-12-05 20:44:20 +0000
commit4567555c49cb560dd6f109bbfec42086af3de56f (patch)
treebfb0a6fd21d2070940399c0e36dc7d0de1e7eb0d /OpenSim/Framework/Servers/HttpServer
parentFor the GetTexture capability, if a data range is requested that covers the w... (diff)
downloadopensim-SC_OLD-4567555c49cb560dd6f109bbfec42086af3de56f.zip
opensim-SC_OLD-4567555c49cb560dd6f109bbfec42086af3de56f.tar.gz
opensim-SC_OLD-4567555c49cb560dd6f109bbfec42086af3de56f.tar.bz2
opensim-SC_OLD-4567555c49cb560dd6f109bbfec42086af3de56f.tar.xz
Implement IOSHttpRequest and IOSHttpResponse http interfaces and use instead of OSHttpRequest/OSHttpResponse.
This is required for the substitution of different HTTP servers or the newer HttpServer.dll without having to commit to a particular implementation. This is also required to write regression tests that involve the HTTP layer. If you need to recompile, all you need to do is replace OSHttpRequest/OSHttpResponse references with IOSHttpRequest/IOSHttpResponse.
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpRequest.cs59
-rw-r--r--OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpResponse.cs138
-rw-r--r--OpenSim/Framework/Servers/HttpServer/Interfaces/IStreamHandler.cs4
-rw-r--r--OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs3
-rw-r--r--OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs5
-rw-r--r--OpenSim/Framework/Servers/HttpServer/RestDeserialiseHandler.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/RestMethod.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/RestSessionService.cs4
-rw-r--r--OpenSim/Framework/Servers/HttpServer/RestStreamHandler.cs2
11 files changed, 209 insertions, 14 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
index 04943d1..f1cde74 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
@@ -32,7 +32,7 @@ namespace OpenSim.Framework.Servers.HttpServer
32 public abstract class BaseStreamHandler : BaseRequestHandler, IStreamedRequestHandler 32 public abstract class BaseStreamHandler : BaseRequestHandler, IStreamedRequestHandler
33 { 33 {
34 public abstract byte[] Handle(string path, Stream request, 34 public abstract byte[] Handle(string path, Stream request,
35 OSHttpRequest httpRequest, OSHttpResponse httpResponse); 35 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse);
36 36
37 protected BaseStreamHandler(string httpMethod, string path) : base(httpMethod, path) 37 protected BaseStreamHandler(string httpMethod, string path) : base(httpMethod, path)
38 { 38 {
diff --git a/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
index bae4e1b..1699233 100644
--- a/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
@@ -36,7 +36,7 @@ namespace OpenSim.Framework.Servers.HttpServer
36 { 36 {
37 private BinaryMethod m_method; 37 private BinaryMethod m_method;
38 38
39 public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) 39 public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
40 { 40 {
41 byte[] data = ReadFully(request); 41 byte[] data = ReadFully(request);
42 string param = GetParam(path); 42 string param = GetParam(path);
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpRequest.cs
new file mode 100644
index 0000000..caf0edd
--- /dev/null
+++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpRequest.cs
@@ -0,0 +1,59 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Specialized;
31using System.IO;
32using System.Net;
33using System.Text;
34using System.Web;
35
36namespace OpenSim.Framework.Servers.HttpServer
37{
38 public interface IOSHttpRequest
39 {
40 string[] AcceptTypes { get; }
41 Encoding ContentEncoding { get; }
42 long ContentLength { get; }
43 long ContentLength64 { get; }
44 string ContentType { get; }
45 HttpCookieCollection Cookies { get; }
46 bool HasEntityBody { get; }
47 NameValueCollection Headers { get; }
48 string HttpMethod { get; }
49 Stream InputStream { get; }
50 bool IsSecured { get; }
51 bool KeepAlive { get; }
52 NameValueCollection QueryString { get; }
53 Hashtable Query { get; }
54 string RawUrl { get; }
55 IPEndPoint RemoteIPEndPoint { get; }
56 Uri Url { get; }
57 string UserAgent { get; }
58 }
59} \ No newline at end of file
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpResponse.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpResponse.cs
new file mode 100644
index 0000000..33a1663
--- /dev/null
+++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IOSHttpResponse.cs
@@ -0,0 +1,138 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Specialized;
31using System.IO;
32using System.Net;
33using System.Text;
34using System.Web;
35
36namespace OpenSim.Framework.Servers.HttpServer
37{
38 public interface IOSHttpResponse
39 {
40 /// <summary>
41 /// Content type property.
42 /// </summary>
43 /// <remarks>
44 /// Setting this property will also set IsContentTypeSet to
45 /// true.
46 /// </remarks>
47 string ContentType { get; set; }
48
49 /// <summary>
50 /// Boolean property indicating whether the content type
51 /// property actively has been set.
52 /// </summary>
53 /// <remarks>
54 /// IsContentTypeSet will go away together with .NET base.
55 /// </remarks>
56 // public bool IsContentTypeSet
57 // {
58 // get { return _contentTypeSet; }
59 // }
60 // private bool _contentTypeSet;
61
62 /// <summary>
63 /// Length of the body content; 0 if there is no body.
64 /// </summary>
65 long ContentLength { get; set; }
66
67 /// <summary>
68 /// Alias for ContentLength.
69 /// </summary>
70 long ContentLength64 { get; set; }
71
72 /// <summary>
73 /// Encoding of the body content.
74 /// </summary>
75 Encoding ContentEncoding { get; set; }
76
77 bool KeepAlive { get; set; }
78
79 /// <summary>
80 /// Get or set the keep alive timeout property (default is
81 /// 20). Setting this to 0 also disables KeepAlive. Setting
82 /// this to something else but 0 also enable KeepAlive.
83 /// </summary>
84 int KeepAliveTimeout { get; set; }
85
86 /// <summary>
87 /// Return the output stream feeding the body.
88 /// </summary>
89 /// <remarks>
90 /// On its way out...
91 /// </remarks>
92 Stream OutputStream { get; }
93
94 string ProtocolVersion { get; set; }
95
96 /// <summary>
97 /// Return the output stream feeding the body.
98 /// </summary>
99 Stream Body { get; }
100
101 /// <summary>
102 /// Set a redirct location.
103 /// </summary>
104 string RedirectLocation { set; }
105
106 /// <summary>
107 /// Chunk transfers.
108 /// </summary>
109 bool SendChunked { get; set; }
110
111 /// <summary>
112 /// HTTP status code.
113 /// </summary>
114 int StatusCode { get; set; }
115
116 /// <summary>
117 /// HTTP status description.
118 /// </summary>
119 string StatusDescription { get; set; }
120
121 bool ReuseContext { get; set; }
122
123 /// <summary>
124 /// Add a header field and content to the response.
125 /// </summary>
126 /// <param name="key">string containing the header field
127 /// name</param>
128 /// <param name="value">string containing the header field
129 /// value</param>
130 void AddHeader(string key, string value);
131
132 /// <summary>
133 /// Send the response back to the remote client
134 /// </summary>
135 void Send();
136 }
137}
138
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IStreamHandler.cs
index 2e1bc0b..a449c2d 100644
--- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IStreamHandler.cs
@@ -45,13 +45,13 @@ namespace OpenSim.Framework.Servers.HttpServer
45 public interface IStreamedRequestHandler : IRequestHandler 45 public interface IStreamedRequestHandler : IRequestHandler
46 { 46 {
47 // Handle request stream, return byte array 47 // Handle request stream, return byte array
48 byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse); 48 byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse);
49 } 49 }
50 50
51 public interface IStreamHandler : IRequestHandler 51 public interface IStreamHandler : IRequestHandler
52 { 52 {
53 // Handle request stream, return byte array 53 // Handle request stream, return byte array
54 void Handle(string path, Stream request, Stream response, OSHttpRequest httpReqbuest, OSHttpResponse httpResponse); 54 void Handle(string path, Stream request, Stream response, IOSHttpRequest httpReqbuest, IOSHttpResponse httpResponse);
55 } 55 }
56 56
57 public interface IGenericHTTPHandler : IRequestHandler 57 public interface IGenericHTTPHandler : IRequestHandler
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
index e354dfb..fc8daf3 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
@@ -39,7 +39,7 @@ using log4net;
39 39
40namespace OpenSim.Framework.Servers.HttpServer 40namespace OpenSim.Framework.Servers.HttpServer
41{ 41{
42 public class OSHttpRequest 42 public class OSHttpRequest : IOSHttpRequest
43 { 43 {
44 private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 45
@@ -174,7 +174,6 @@ namespace OpenSim.Framework.Servers.HttpServer
174 } 174 }
175 private Dictionary<string, object> _whiteboard = new Dictionary<string, object>(); 175 private Dictionary<string, object> _whiteboard = new Dictionary<string, object>();
176 176
177
178 public OSHttpRequest() {} 177 public OSHttpRequest() {}
179 178
180 public OSHttpRequest(IHttpClientContext context, IHttpRequest req) 179 public OSHttpRequest(IHttpClientContext context, IHttpRequest req)
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
index 7029289..f9227ac 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
@@ -36,7 +36,7 @@ namespace OpenSim.Framework.Servers.HttpServer
36 /// OSHttpResponse is the OpenSim representation of an HTTP 36 /// OSHttpResponse is the OpenSim representation of an HTTP
37 /// response. 37 /// response.
38 /// </summary> 38 /// </summary>
39 public class OSHttpResponse 39 public class OSHttpResponse : IOSHttpResponse
40 { 40 {
41 /// <summary> 41 /// <summary>
42 /// Content type property. 42 /// Content type property.
@@ -275,7 +275,6 @@ namespace OpenSim.Framework.Servers.HttpServer
275 } 275 }
276 } 276 }
277 277
278
279 protected IHttpResponse _httpResponse; 278 protected IHttpResponse _httpResponse;
280 private IHttpClientContext _httpClientContext; 279 private IHttpClientContext _httpClientContext;
281 280
@@ -331,4 +330,4 @@ namespace OpenSim.Framework.Servers.HttpServer
331 } 330 }
332 331
333 } 332 }
334} 333} \ No newline at end of file
diff --git a/OpenSim/Framework/Servers/HttpServer/RestDeserialiseHandler.cs b/OpenSim/Framework/Servers/HttpServer/RestDeserialiseHandler.cs
index 3f2b265..a467a83 100644
--- a/OpenSim/Framework/Servers/HttpServer/RestDeserialiseHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/RestDeserialiseHandler.cs
@@ -45,7 +45,7 @@ namespace OpenSim.Framework.Servers.HttpServer
45 } 45 }
46 46
47 public void Handle(string path, Stream request, Stream responseStream, 47 public void Handle(string path, Stream request, Stream responseStream,
48 OSHttpRequest httpRequest, OSHttpResponse httpResponse) 48 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
49 { 49 {
50 TRequest deserial; 50 TRequest deserial;
51 using (XmlTextReader xmlReader = new XmlTextReader(request)) 51 using (XmlTextReader xmlReader = new XmlTextReader(request))
diff --git a/OpenSim/Framework/Servers/HttpServer/RestMethod.cs b/OpenSim/Framework/Servers/HttpServer/RestMethod.cs
index f97efbe..80bc7ef 100644
--- a/OpenSim/Framework/Servers/HttpServer/RestMethod.cs
+++ b/OpenSim/Framework/Servers/HttpServer/RestMethod.cs
@@ -28,5 +28,5 @@
28namespace OpenSim.Framework.Servers.HttpServer 28namespace OpenSim.Framework.Servers.HttpServer
29{ 29{
30 public delegate string RestMethod(string request, string path, string param, 30 public delegate string RestMethod(string request, string path, string param,
31 OSHttpRequest httpRequest, OSHttpResponse httpResponse); 31 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse);
32} 32}
diff --git a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
index 7ebb462..19c03a8 100644
--- a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
+++ b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
@@ -211,7 +211,7 @@ namespace OpenSim.Framework.Servers.HttpServer
211 } 211 }
212 212
213 public void Handle(string path, Stream request, Stream responseStream, 213 public void Handle(string path, Stream request, Stream responseStream,
214 OSHttpRequest httpRequest, OSHttpResponse httpResponse) 214 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
215 { 215 {
216 RestSessionObject<TRequest> deserial = default(RestSessionObject<TRequest>); 216 RestSessionObject<TRequest> deserial = default(RestSessionObject<TRequest>);
217 bool fail = false; 217 bool fail = false;
@@ -270,7 +270,7 @@ namespace OpenSim.Framework.Servers.HttpServer
270 } 270 }
271 271
272 public void Handle(string path, Stream request, Stream responseStream, 272 public void Handle(string path, Stream request, Stream responseStream,
273 OSHttpRequest httpRequest, OSHttpResponse httpResponse) 273 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
274 { 274 {
275 TRequest deserial = default(TRequest); 275 TRequest deserial = default(TRequest);
276 bool fail = false; 276 bool fail = false;
diff --git a/OpenSim/Framework/Servers/HttpServer/RestStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/RestStreamHandler.cs
index 2d43cd4..d2c4002 100644
--- a/OpenSim/Framework/Servers/HttpServer/RestStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/RestStreamHandler.cs
@@ -39,7 +39,7 @@ namespace OpenSim.Framework.Servers.HttpServer
39 get { return m_restMethod; } 39 get { return m_restMethod; }
40 } 40 }
41 41
42 public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) 42 public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
43 { 43 {
44 Encoding encoding = Encoding.UTF8; 44 Encoding encoding = Encoding.UTF8;
45 StreamReader streamReader = new StreamReader(request, encoding); 45 StreamReader streamReader = new StreamReader(request, encoding);