diff options
author | lbsa71 | 2007-07-04 16:28:59 +0000 |
---|---|---|
committer | lbsa71 | 2007-07-04 16:28:59 +0000 |
commit | 5c32b33a66fbdf371d53d85ee54ee8e837481570 (patch) | |
tree | 68121d2b62aa34e2f8e627823314460a19fe06f8 /OpenSim | |
parent | * Removed AssetHttpServer, using BaseHttpServer instead (diff) | |
download | opensim-SC-5c32b33a66fbdf371d53d85ee54ee8e837481570.zip opensim-SC-5c32b33a66fbdf371d53d85ee54ee8e837481570.tar.gz opensim-SC-5c32b33a66fbdf371d53d85ee54ee8e837481570.tar.bz2 opensim-SC-5c32b33a66fbdf371d53d85ee54ee8e837481570.tar.xz |
* re-fixed the utf-16 bug in xmlRpcResponse serialization
* added LLSDStreamHandler.cs to Caps (Haven't enabled it yet, though)
* removed last traces of old rest handling
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/Servers/BaseHttpServer.cs | 175 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/BaseStreamHandler.cs | 6 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/ILlsdMethodHandler.cs | 37 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/LlsdMethod.cs | 32 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj | 9 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build | 3 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/RestMethodEntry.cs | 27 | ||||
-rw-r--r-- | OpenSim/Framework/UserManager/LoginResponse.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/Capabilities/Caps.cs | 38 | ||||
-rw-r--r-- | OpenSim/Region/Capabilities/LLSDMethod.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/Capabilities/LLSDStreamHandler.cs | 40 | ||||
-rw-r--r-- | OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.csproj | 6 | ||||
-rw-r--r-- | OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.dll.build | 2 | ||||
-rw-r--r-- | OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs | 35 | ||||
-rw-r--r-- | OpenSim/Region/Examples/SimpleApp/Program.cs | 23 |
15 files changed, 123 insertions, 320 deletions
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs index aed538b..84af9f6 100644 --- a/OpenSim/Framework/Servers/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs | |||
@@ -42,7 +42,6 @@ namespace OpenSim.Framework.Servers | |||
42 | { | 42 | { |
43 | protected Thread m_workerThread; | 43 | protected Thread m_workerThread; |
44 | protected HttpListener m_httpListener; | 44 | protected HttpListener m_httpListener; |
45 | //protected Dictionary<string, RestMethodEntry> m_restHandlers = new Dictionary<string, RestMethodEntry>(); | ||
46 | protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>(); | 45 | protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>(); |
47 | protected Dictionary<string, IStreamHandler> m_streamHandlers = new Dictionary<string, IStreamHandler>(); | 46 | protected Dictionary<string, IStreamHandler> m_streamHandlers = new Dictionary<string, IStreamHandler>(); |
48 | protected int m_port; | 47 | protected int m_port; |
@@ -67,32 +66,6 @@ namespace OpenSim.Framework.Servers | |||
67 | return httpMethod + ":" + path; | 66 | return httpMethod + ":" + path; |
68 | } | 67 | } |
69 | 68 | ||
70 | //public bool AddRestHandler(string method, string path, RestMethod handler) | ||
71 | //{ | ||
72 | // //Console.WriteLine("adding new REST handler for path " + path); | ||
73 | // string methodKey = String.Format("{0}: {1}", method, path); | ||
74 | |||
75 | // if (!this.m_restHandlers.ContainsKey(methodKey)) | ||
76 | // { | ||
77 | // this.m_restHandlers.Add(methodKey, new RestMethodEntry(path, handler)); | ||
78 | // return true; | ||
79 | // } | ||
80 | |||
81 | // //must already have a handler for that path so return false | ||
82 | // return false; | ||
83 | //} | ||
84 | |||
85 | //public bool RemoveRestHandler(string method, string path) | ||
86 | //{ | ||
87 | // string methodKey = String.Format("{0}: {1}", method, path); | ||
88 | // if (this.m_restHandlers.ContainsKey(methodKey)) | ||
89 | // { | ||
90 | // this.m_restHandlers.Remove(methodKey); | ||
91 | // return true; | ||
92 | // } | ||
93 | // return false; | ||
94 | //} | ||
95 | |||
96 | public bool AddXmlRPCHandler(string method, XmlRpcMethod handler) | 69 | public bool AddXmlRPCHandler(string method, XmlRpcMethod handler) |
97 | { | 70 | { |
98 | if (!this.m_rpcHandlers.ContainsKey(method)) | 71 | if (!this.m_rpcHandlers.ContainsKey(method)) |
@@ -105,76 +78,6 @@ namespace OpenSim.Framework.Servers | |||
105 | return false; | 78 | return false; |
106 | } | 79 | } |
107 | 80 | ||
108 | protected virtual string ProcessXMLRPCMethod(string methodName, XmlRpcRequest request) | ||
109 | { | ||
110 | XmlRpcResponse response; | ||
111 | |||
112 | XmlRpcMethod method; | ||
113 | if (this.m_rpcHandlers.TryGetValue(methodName, out method)) | ||
114 | { | ||
115 | response = method(request); | ||
116 | } | ||
117 | else | ||
118 | { | ||
119 | response = new XmlRpcResponse(); | ||
120 | Hashtable unknownMethodError = new Hashtable(); | ||
121 | unknownMethodError["reason"] = "XmlRequest"; ; | ||
122 | unknownMethodError["message"] = "Unknown Rpc request"; | ||
123 | unknownMethodError["login"] = "false"; | ||
124 | response.Value = unknownMethodError; | ||
125 | } | ||
126 | |||
127 | return XmlRpcResponseSerializer.Singleton.Serialize(response); | ||
128 | } | ||
129 | |||
130 | //protected virtual string ParseREST(string request, string path, string method) | ||
131 | //{ | ||
132 | // string response; | ||
133 | |||
134 | // string requestKey = String.Format("{0}: {1}", method, path); | ||
135 | |||
136 | // string bestMatch = String.Empty; | ||
137 | // foreach (string currentKey in m_restHandlers.Keys) | ||
138 | // { | ||
139 | // if (requestKey.StartsWith(currentKey)) | ||
140 | // { | ||
141 | // if (currentKey.Length > bestMatch.Length) | ||
142 | // { | ||
143 | // bestMatch = currentKey; | ||
144 | // } | ||
145 | // } | ||
146 | // } | ||
147 | |||
148 | // RestMethodEntry restMethodEntry; | ||
149 | // if (m_restHandlers.TryGetValue(bestMatch, out restMethodEntry)) | ||
150 | // { | ||
151 | // RestMethod restMethod = restMethodEntry.RestMethod; | ||
152 | |||
153 | // string param = path.Substring(restMethodEntry.Path.Length); | ||
154 | // response = restMethod(request, path, param); | ||
155 | |||
156 | // } | ||
157 | // else | ||
158 | // { | ||
159 | // response = String.Empty; | ||
160 | // } | ||
161 | |||
162 | // return response; | ||
163 | //} | ||
164 | |||
165 | |||
166 | protected virtual string ParseXMLRPC(string requestBody) | ||
167 | { | ||
168 | string responseString = String.Empty; | ||
169 | |||
170 | XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); | ||
171 | |||
172 | string methodName = request.MethodName; | ||
173 | |||
174 | responseString = ProcessXMLRPCMethod(methodName, request); | ||
175 | |||
176 | return responseString; | ||
177 | } | ||
178 | 81 | ||
179 | public virtual void HandleRequest(Object stateinfo) | 82 | public virtual void HandleRequest(Object stateinfo) |
180 | { | 83 | { |
@@ -203,7 +106,7 @@ namespace OpenSim.Framework.Servers | |||
203 | } | 106 | } |
204 | else | 107 | else |
205 | { | 108 | { |
206 | HandleLegacyRequests(request, response); | 109 | HandleXmlRpcRequests(request, response); |
207 | } | 110 | } |
208 | } | 111 | } |
209 | 112 | ||
@@ -234,64 +137,54 @@ namespace OpenSim.Framework.Servers | |||
234 | } | 137 | } |
235 | } | 138 | } |
236 | 139 | ||
237 | private void HandleLegacyRequests(HttpListenerRequest request, HttpListenerResponse response) | 140 | private void HandleXmlRpcRequests(HttpListenerRequest request, HttpListenerResponse response) |
238 | { | 141 | { |
239 | Stream body = request.InputStream; | 142 | Stream requestStream = request.InputStream; |
240 | 143 | ||
241 | Encoding encoding = Encoding.UTF8; | 144 | Encoding encoding = Encoding.UTF8; |
242 | StreamReader reader = new StreamReader(body, encoding); | 145 | StreamReader reader = new StreamReader(requestStream, encoding); |
243 | 146 | ||
244 | string requestBody = reader.ReadToEnd(); | 147 | string requestBody = reader.ReadToEnd(); |
245 | body.Close(); | ||
246 | reader.Close(); | 148 | reader.Close(); |
149 | requestStream.Close(); | ||
247 | 150 | ||
248 | //Console.WriteLine(request.HttpMethod + " " + request.RawUrl + " Http/" + request.ProtocolVersion.ToString() + " content type: " + request.ContentType); | 151 | XmlRpcRequest xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); |
249 | //Console.WriteLine(requestBody); | ||
250 | 152 | ||
251 | string responseString = ""; | 153 | string methodName = xmlRprcRequest.MethodName; |
252 | // Console.WriteLine("new request " + request.ContentType +" at "+ request.RawUrl); | 154 | |
253 | switch (request.ContentType) | 155 | XmlRpcResponse xmlRpcResponse; |
254 | { | ||
255 | case "text/xml": | ||
256 | // must be XML-RPC, so pass to the XML-RPC parser | ||
257 | |||
258 | responseString = ParseXMLRPC(requestBody); | ||
259 | responseString = Regex.Replace(responseString, "utf-16", "utf-8"); | ||
260 | |||
261 | response.AddHeader("Content-type", "text/xml"); | ||
262 | break; | ||
263 | |||
264 | //case "application/xml": | ||
265 | //case "application/octet-stream": | ||
266 | // // probably LLSD we hope, otherwise it should be ignored by the parser | ||
267 | // // responseString = ParseLLSDXML(requestBody); | ||
268 | // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
269 | // response.AddHeader("Content-type", "application/xml"); | ||
270 | // break; | ||
271 | |||
272 | //case "application/x-www-form-urlencoded": | ||
273 | // // a form data POST so send to the REST parser | ||
274 | // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
275 | // response.AddHeader("Content-type", "text/html"); | ||
276 | // break; | ||
277 | |||
278 | //case null: | ||
279 | // // must be REST or invalid crap, so pass to the REST parser | ||
280 | // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
281 | // response.AddHeader("Content-type", "text/html"); | ||
282 | // break; | ||
283 | 156 | ||
157 | XmlRpcMethod method; | ||
158 | if (this.m_rpcHandlers.TryGetValue(methodName, out method)) | ||
159 | { | ||
160 | xmlRpcResponse = method(xmlRprcRequest); | ||
284 | } | 161 | } |
162 | else | ||
163 | { | ||
164 | xmlRpcResponse = new XmlRpcResponse(); | ||
165 | Hashtable unknownMethodError = new Hashtable(); | ||
166 | unknownMethodError["reason"] = "XmlRequest"; ; | ||
167 | unknownMethodError["message"] = "Unknown Rpc Request ["+methodName+"]"; | ||
168 | unknownMethodError["login"] = "false"; | ||
169 | xmlRpcResponse.Value = unknownMethodError; | ||
170 | } | ||
171 | |||
172 | response.AddHeader("Content-type", "text/xml"); | ||
285 | 173 | ||
174 | string responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse); | ||
175 | |||
176 | // This must be absolutely fuggliest hack in this project. Don't just stand there, DO SOMETHING! | ||
177 | responseString = Regex.Replace(responseString, "utf-16", "utf-8"); | ||
178 | |||
286 | byte[] buffer = Encoding.UTF8.GetBytes(responseString); | 179 | byte[] buffer = Encoding.UTF8.GetBytes(responseString); |
287 | Stream output = response.OutputStream; | 180 | |
181 | |||
288 | response.SendChunked = false; | 182 | response.SendChunked = false; |
289 | response.ContentLength64 = buffer.Length; | 183 | response.ContentLength64 = buffer.Length; |
184 | response.ContentEncoding = Encoding.UTF8; | ||
290 | 185 | ||
291 | 186 | response.OutputStream.Write(buffer, 0, buffer.Length); | |
292 | 187 | response.OutputStream.Close(); | |
293 | output.Write(buffer, 0, buffer.Length); | ||
294 | output.Close(); | ||
295 | } | 188 | } |
296 | 189 | ||
297 | public void Start() | 190 | public void Start() |
diff --git a/OpenSim/Framework/Servers/BaseStreamHandler.cs b/OpenSim/Framework/Servers/BaseStreamHandler.cs index 95e9707..5fcf678 100644 --- a/OpenSim/Framework/Servers/BaseStreamHandler.cs +++ b/OpenSim/Framework/Servers/BaseStreamHandler.cs | |||
@@ -7,19 +7,19 @@ namespace OpenSim.Framework.Servers | |||
7 | { | 7 | { |
8 | public abstract class BaseStreamHandler : IStreamHandler | 8 | public abstract class BaseStreamHandler : IStreamHandler |
9 | { | 9 | { |
10 | public string ContentType | 10 | virtual public string ContentType |
11 | { | 11 | { |
12 | get { return "application/xml"; } | 12 | get { return "application/xml"; } |
13 | } | 13 | } |
14 | 14 | ||
15 | private string m_httpMethod; | 15 | private string m_httpMethod; |
16 | public string HttpMethod | 16 | virtual public string HttpMethod |
17 | { | 17 | { |
18 | get { return m_httpMethod; } | 18 | get { return m_httpMethod; } |
19 | } | 19 | } |
20 | 20 | ||
21 | private string m_path; | 21 | private string m_path; |
22 | public string Path | 22 | virtual public string Path |
23 | { | 23 | { |
24 | get { return m_path; } | 24 | get { return m_path; } |
25 | } | 25 | } |
diff --git a/OpenSim/Framework/Servers/ILlsdMethodHandler.cs b/OpenSim/Framework/Servers/ILlsdMethodHandler.cs deleted file mode 100644 index 5382f2d..0000000 --- a/OpenSim/Framework/Servers/ILlsdMethodHandler.cs +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 | */ | ||
28 | |||
29 | namespace OpenSim.Framework.Servers | ||
30 | { | ||
31 | public interface ILlsdMethodHandler | ||
32 | { | ||
33 | string Handle(string request, string path); | ||
34 | } | ||
35 | |||
36 | |||
37 | } | ||
diff --git a/OpenSim/Framework/Servers/LlsdMethod.cs b/OpenSim/Framework/Servers/LlsdMethod.cs deleted file mode 100644 index d17fa38..0000000 --- a/OpenSim/Framework/Servers/LlsdMethod.cs +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.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 OpenSim 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 | */ | ||
28 | |||
29 | namespace OpenSim.Framework.Servers | ||
30 | { | ||
31 | public delegate TResponse LlsdMethod<TResponse, TRequest>( TRequest request ); | ||
32 | } | ||
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj index 4eb9844..cf2236a 100644 --- a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj +++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj | |||
@@ -99,21 +99,12 @@ | |||
99 | <Compile Include="CheckSumServer.cs"> | 99 | <Compile Include="CheckSumServer.cs"> |
100 | <SubType>Code</SubType> | 100 | <SubType>Code</SubType> |
101 | </Compile> | 101 | </Compile> |
102 | <Compile Include="ILlsdMethodHandler.cs"> | ||
103 | <SubType>Code</SubType> | ||
104 | </Compile> | ||
105 | <Compile Include="IStreamHandler.cs"> | 102 | <Compile Include="IStreamHandler.cs"> |
106 | <SubType>Code</SubType> | 103 | <SubType>Code</SubType> |
107 | </Compile> | 104 | </Compile> |
108 | <Compile Include="LlsdMethod.cs"> | ||
109 | <SubType>Code</SubType> | ||
110 | </Compile> | ||
111 | <Compile Include="RestMethod.cs"> | 105 | <Compile Include="RestMethod.cs"> |
112 | <SubType>Code</SubType> | 106 | <SubType>Code</SubType> |
113 | </Compile> | 107 | </Compile> |
114 | <Compile Include="RestMethodEntry.cs"> | ||
115 | <SubType>Code</SubType> | ||
116 | </Compile> | ||
117 | <Compile Include="RestStreamHandler.cs"> | 108 | <Compile Include="RestStreamHandler.cs"> |
118 | <SubType>Code</SubType> | 109 | <SubType>Code</SubType> |
119 | </Compile> | 110 | </Compile> |
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build index 5e96ef1..f837c22 100644 --- a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build +++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build | |||
@@ -14,11 +14,8 @@ | |||
14 | <include name="BaseHttpServer.cs" /> | 14 | <include name="BaseHttpServer.cs" /> |
15 | <include name="BaseStreamHandler.cs" /> | 15 | <include name="BaseStreamHandler.cs" /> |
16 | <include name="CheckSumServer.cs" /> | 16 | <include name="CheckSumServer.cs" /> |
17 | <include name="ILlsdMethodHandler.cs" /> | ||
18 | <include name="IStreamHandler.cs" /> | 17 | <include name="IStreamHandler.cs" /> |
19 | <include name="LlsdMethod.cs" /> | ||
20 | <include name="RestMethod.cs" /> | 18 | <include name="RestMethod.cs" /> |
21 | <include name="RestMethodEntry.cs" /> | ||
22 | <include name="RestStreamHandler.cs" /> | 19 | <include name="RestStreamHandler.cs" /> |
23 | <include name="UDPServerBase.cs" /> | 20 | <include name="UDPServerBase.cs" /> |
24 | <include name="XmlRpcMethod.cs" /> | 21 | <include name="XmlRpcMethod.cs" /> |
diff --git a/OpenSim/Framework/Servers/RestMethodEntry.cs b/OpenSim/Framework/Servers/RestMethodEntry.cs deleted file mode 100644 index ab926e0..0000000 --- a/OpenSim/Framework/Servers/RestMethodEntry.cs +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.Framework.Servers | ||
6 | { | ||
7 | public class RestMethodEntry | ||
8 | { | ||
9 | private string m_path; | ||
10 | public string Path | ||
11 | { | ||
12 | get { return m_path; } | ||
13 | } | ||
14 | |||
15 | private RestMethod m_restMethod; | ||
16 | public RestMethod RestMethod | ||
17 | { | ||
18 | get { return m_restMethod; } | ||
19 | } | ||
20 | |||
21 | public RestMethodEntry(string path, RestMethod restMethod) | ||
22 | { | ||
23 | m_path = path; | ||
24 | m_restMethod = restMethod; | ||
25 | } | ||
26 | } | ||
27 | } | ||
diff --git a/OpenSim/Framework/UserManager/LoginResponse.cs b/OpenSim/Framework/UserManager/LoginResponse.cs index 64504fa..abcbd48 100644 --- a/OpenSim/Framework/UserManager/LoginResponse.cs +++ b/OpenSim/Framework/UserManager/LoginResponse.cs | |||
@@ -222,7 +222,9 @@ namespace OpenSim.Framework.UserManagement | |||
222 | 222 | ||
223 | responseData["sim_port"] =(Int32) this.SimPort; | 223 | responseData["sim_port"] =(Int32) this.SimPort; |
224 | responseData["sim_ip"] = this.SimAddress; | 224 | responseData["sim_ip"] = this.SimAddress; |
225 | |||
225 | MainLog.Instance.Warn("SIM IP: " + responseData["sim_ip"] + "; SIM PORT: " + responseData["sim_port"]); | 226 | MainLog.Instance.Warn("SIM IP: " + responseData["sim_ip"] + "; SIM PORT: " + responseData["sim_port"]); |
227 | |||
226 | responseData["agent_id"] = this.AgentID.ToStringHyphenated(); | 228 | responseData["agent_id"] = this.AgentID.ToStringHyphenated(); |
227 | responseData["session_id"] = this.SessionID.ToStringHyphenated(); | 229 | responseData["session_id"] = this.SessionID.ToStringHyphenated(); |
228 | responseData["secure_session_id"] = this.SecureSessionID.ToStringHyphenated(); | 230 | responseData["secure_session_id"] = this.SecureSessionID.ToStringHyphenated(); |
diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs index 1d07683..70d601f 100644 --- a/OpenSim/Region/Capabilities/Caps.cs +++ b/OpenSim/Region/Capabilities/Caps.cs | |||
@@ -71,20 +71,33 @@ namespace OpenSim.Region.Capabilities | |||
71 | public void RegisterHandlers() | 71 | public void RegisterHandlers() |
72 | { | 72 | { |
73 | Console.WriteLine("registering CAPS handlers"); | 73 | Console.WriteLine("registering CAPS handlers"); |
74 | string capsBase = "/CAPS/" + m_capsObjectPath; | ||
75 | |||
76 | AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer); | ||
77 | |||
78 | //httpListener.AddStreamHandler( | ||
79 | // new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer )); | ||
74 | 80 | ||
75 | AddCapsHandler( httpListener, m_requestPath, CapsRequest); | 81 | AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest); |
76 | AddCapsHandler( httpListener, m_mapLayerPath, MapLayer); | 82 | AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory); |
77 | AddCapsHandler( httpListener, m_newInventory, NewAgentInventory); | 83 | AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); |
78 | AddCapsHandler( httpListener, eventQueue, ProcessEventQueue); | 84 | AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); |
79 | AddCapsHandler( httpListener, m_requestTexture, RequestTexture); | ||
80 | } | 85 | } |
81 | 86 | ||
82 | private void AddCapsHandler( BaseHttpServer httpListener, string path, RestMethod restMethod ) | 87 | public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq) |
88 | { | ||
89 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); | ||
90 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | ||
91 | return mapResponse; | ||
92 | } | ||
93 | |||
94 | [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")] | ||
95 | private void AddLegacyCapsHandler(BaseHttpServer httpListener, string path, RestMethod restMethod) | ||
83 | { | 96 | { |
84 | string capsBase = "/CAPS/" + m_capsObjectPath; | 97 | string capsBase = "/CAPS/" + m_capsObjectPath; |
85 | httpListener.AddStreamHandler(new RestStreamHandler("POST", capsBase + path, restMethod)); | 98 | httpListener.AddStreamHandler(new RestStreamHandler("POST", capsBase + path, restMethod)); |
86 | } | 99 | } |
87 | 100 | ||
88 | /// <summary> | 101 | /// <summary> |
89 | /// | 102 | /// |
90 | /// </summary> | 103 | /// </summary> |
@@ -125,17 +138,18 @@ namespace OpenSim.Region.Capabilities | |||
125 | public string MapLayer(string request, string path, string param) | 138 | public string MapLayer(string request, string path, string param) |
126 | { | 139 | { |
127 | Encoding _enc = Encoding.UTF8; | 140 | Encoding _enc = Encoding.UTF8; |
128 | Hashtable hash =(Hashtable) LLSD.LLSDDeserialize(_enc.GetBytes(request)); | 141 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes(request)); |
129 | LLSDMapRequest mapReq = new LLSDMapRequest(); | 142 | LLSDMapRequest mapReq = new LLSDMapRequest(); |
130 | LLSDHelpers.DeserialiseLLSDMap(hash, mapReq ); | 143 | LLSDHelpers.DeserialiseLLSDMap(hash, mapReq); |
131 | 144 | ||
132 | LLSDMapLayerResponse mapResponse= new LLSDMapLayerResponse(); | 145 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); |
133 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | 146 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); |
134 | string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); | 147 | string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); |
135 | 148 | ||
136 | return res; | 149 | return res; |
137 | } | 150 | } |
138 | 151 | ||
152 | |||
139 | /// <summary> | 153 | /// <summary> |
140 | /// | 154 | /// |
141 | /// </summary> | 155 | /// </summary> |
@@ -214,7 +228,7 @@ namespace OpenSim.Region.Capabilities | |||
214 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); | 228 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); |
215 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); | 229 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); |
216 | 230 | ||
217 | AddCapsHandler( httpListener, uploaderPath, uploader.uploaderCaps); | 231 | AddLegacyCapsHandler( httpListener, uploaderPath, uploader.uploaderCaps); |
218 | 232 | ||
219 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + uploaderPath; | 233 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + uploaderPath; |
220 | //Console.WriteLine("uploader url is " + uploaderURL); | 234 | //Console.WriteLine("uploader url is " + uploaderURL); |
diff --git a/OpenSim/Region/Capabilities/LLSDMethod.cs b/OpenSim/Region/Capabilities/LLSDMethod.cs new file mode 100644 index 0000000..5f42f44 --- /dev/null +++ b/OpenSim/Region/Capabilities/LLSDMethod.cs | |||
@@ -0,0 +1,8 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.Region.Capabilities | ||
6 | { | ||
7 | public delegate TResponse LLSDMethod<TRequest, TResponse>(TRequest request); | ||
8 | } | ||
diff --git a/OpenSim/Region/Capabilities/LLSDStreamHandler.cs b/OpenSim/Region/Capabilities/LLSDStreamHandler.cs new file mode 100644 index 0000000..ff63353 --- /dev/null +++ b/OpenSim/Region/Capabilities/LLSDStreamHandler.cs | |||
@@ -0,0 +1,40 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Servers; | ||
5 | using System.IO; | ||
6 | using System.Collections; | ||
7 | using libsecondlife; | ||
8 | |||
9 | namespace OpenSim.Region.Capabilities | ||
10 | { | ||
11 | public class LLSDStreamhandler<TRequest, TResponse> : BaseStreamHandler | ||
12 | where TRequest : new() | ||
13 | { | ||
14 | private LLSDMethod<TRequest, TResponse> m_method; | ||
15 | |||
16 | public LLSDStreamhandler(string httpMethod, string path, LLSDMethod<TRequest, TResponse> method) | ||
17 | : base(httpMethod, path) | ||
18 | { | ||
19 | m_method = method; | ||
20 | } | ||
21 | |||
22 | public override byte[] Handle(string path, Stream request) | ||
23 | { | ||
24 | Encoding encoding = Encoding.UTF8; | ||
25 | StreamReader streamReader = new StreamReader(request, encoding); | ||
26 | |||
27 | string requestBody = streamReader.ReadToEnd(); | ||
28 | streamReader.Close(); | ||
29 | |||
30 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(encoding.GetBytes(requestBody)); | ||
31 | TRequest llsdRequest = new TRequest(); | ||
32 | LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); | ||
33 | |||
34 | TResponse response = m_method(llsdRequest); | ||
35 | |||
36 | return encoding.GetBytes( LLSDHelpers.SerialiseLLSDReply(response) ); | ||
37 | |||
38 | } | ||
39 | } | ||
40 | } | ||
diff --git a/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.csproj b/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.csproj index 4667d52..4b672ae 100644 --- a/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.csproj +++ b/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.csproj | |||
@@ -123,6 +123,12 @@ | |||
123 | <Compile Include="LLSDMapRequest.cs"> | 123 | <Compile Include="LLSDMapRequest.cs"> |
124 | <SubType>Code</SubType> | 124 | <SubType>Code</SubType> |
125 | </Compile> | 125 | </Compile> |
126 | <Compile Include="LLSDMethod.cs"> | ||
127 | <SubType>Code</SubType> | ||
128 | </Compile> | ||
129 | <Compile Include="LLSDStreamHandler.cs"> | ||
130 | <SubType>Code</SubType> | ||
131 | </Compile> | ||
126 | <Compile Include="LLSDTest.cs"> | 132 | <Compile Include="LLSDTest.cs"> |
127 | <SubType>Code</SubType> | 133 | <SubType>Code</SubType> |
128 | </Compile> | 134 | </Compile> |
diff --git a/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.dll.build b/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.dll.build index a091b5c..1d552c2 100644 --- a/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.dll.build +++ b/OpenSim/Region/Capabilities/OpenSim.Region.Capabilities.dll.build | |||
@@ -20,6 +20,8 @@ | |||
20 | <include name="LLSDMapLayer.cs" /> | 20 | <include name="LLSDMapLayer.cs" /> |
21 | <include name="LLSDMapLayerResponse.cs" /> | 21 | <include name="LLSDMapLayerResponse.cs" /> |
22 | <include name="LLSDMapRequest.cs" /> | 22 | <include name="LLSDMapRequest.cs" /> |
23 | <include name="LLSDMethod.cs" /> | ||
24 | <include name="LLSDStreamHandler.cs" /> | ||
23 | <include name="LLSDTest.cs" /> | 25 | <include name="LLSDTest.cs" /> |
24 | <include name="LLSDType.cs" /> | 26 | <include name="LLSDType.cs" /> |
25 | <include name="LLSDUploadReply.cs" /> | 27 | <include name="LLSDUploadReply.cs" /> |
diff --git a/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs b/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs index f946482..d0ef2af 100644 --- a/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs +++ b/OpenSim/Region/Examples/SimpleApp/LlsdMethodEntry.cs | |||
@@ -2,40 +2,9 @@ using System.Collections; | |||
2 | using System.Text; | 2 | using System.Text; |
3 | using libsecondlife; | 3 | using libsecondlife; |
4 | using OpenSim.Region.Capabilities; | 4 | using OpenSim.Region.Capabilities; |
5 | using System.IO; | ||
5 | 6 | ||
6 | namespace OpenSim.Framework.Servers | 7 | namespace OpenSim.Framework.Servers |
7 | { | 8 | { |
8 | public class LlsdMethodEntry<TResponse, TRequest> : ILlsdMethodHandler | 9 | |
9 | where TRequest : new() | ||
10 | { | ||
11 | private LlsdMethod<TResponse, TRequest> m_method; | ||
12 | |||
13 | |||
14 | public LlsdMethodEntry( ) | ||
15 | { | ||
16 | |||
17 | } | ||
18 | |||
19 | public LlsdMethodEntry(LlsdMethod<TResponse, TRequest> method) | ||
20 | { | ||
21 | m_method = method; | ||
22 | } | ||
23 | |||
24 | #region ILlsdMethodHandler Members | ||
25 | |||
26 | public string Handle(string body, string path) | ||
27 | { | ||
28 | Encoding _enc = Encoding.UTF8; | ||
29 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes( body )); | ||
30 | TRequest request = new TRequest(); | ||
31 | |||
32 | LLSDHelpers.DeserialiseLLSDMap(hash, request ); | ||
33 | |||
34 | TResponse response = m_method(request); | ||
35 | |||
36 | return LLSDHelpers.SerialiseLLSDReply( response ); | ||
37 | } | ||
38 | |||
39 | #endregion | ||
40 | } | ||
41 | } | 10 | } |
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs index bc84c35..ad70df8 100644 --- a/OpenSim/Region/Examples/SimpleApp/Program.cs +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs | |||
@@ -60,8 +60,6 @@ namespace SimpleApp | |||
60 | 60 | ||
61 | httpServer.AddXmlRPCHandler("login_to_simulator", communicationsManager.UserServices.XmlRpcLoginMethod ); | 61 | httpServer.AddXmlRPCHandler("login_to_simulator", communicationsManager.UserServices.XmlRpcLoginMethod ); |
62 | 62 | ||
63 | RegisterLlsdHandler<LLSDMapLayerResponse, LLSDMapRequest>("/Caps/test/", LlsdMethodDemo); | ||
64 | |||
65 | httpServer.Start(); | 63 | httpServer.Start(); |
66 | 64 | ||
67 | m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit."); | 65 | m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit."); |
@@ -74,27 +72,6 @@ namespace SimpleApp | |||
74 | 72 | ||
75 | } | 73 | } |
76 | 74 | ||
77 | private LLSDMapLayerResponse LlsdMethodDemo(LLSDMapRequest request) | ||
78 | { | ||
79 | return new LLSDMapLayerResponse(); | ||
80 | } | ||
81 | |||
82 | ILlsdMethodHandler m_handler; | ||
83 | |||
84 | private void RegisterLlsdHandler<TResponse, TRequest>( string path, LlsdMethod<TResponse, TRequest> method ) | ||
85 | where TRequest : new() | ||
86 | { | ||
87 | // path should be handler key, but for now just conceptually store it. | ||
88 | m_handler = new LlsdMethodEntry<TResponse, TRequest>( method ); | ||
89 | } | ||
90 | |||
91 | private string ProcessLlsdMethod( string request,string path ) | ||
92 | { | ||
93 | LlsdMethodEntry<LLSDMapLayerResponse, LLSDMapRequest> concreteHandler = new LlsdMethodEntry<LLSDMapLayerResponse, LLSDMapRequest>( LlsdMethodDemo ); | ||
94 | |||
95 | return m_handler.Handle(request, path); | ||
96 | } | ||
97 | |||
98 | private bool AddNewSessionHandler(ulong regionHandle, Login loginData) | 75 | private bool AddNewSessionHandler(ulong regionHandle, Login loginData) |
99 | { | 76 | { |
100 | m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last); | 77 | m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last); |