aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorlbsa712007-07-04 14:12:32 +0000
committerlbsa712007-07-04 14:12:32 +0000
commit6a2588454a1ac4bb484ad0b9ee648e9ac156f8db (patch)
treefd4e0d33f65e36365d15d991f95d323e6d15e8b1 /OpenSim
parent* Added StreamHandler support (diff)
downloadopensim-SC-6a2588454a1ac4bb484ad0b9ee648e9ac156f8db.zip
opensim-SC-6a2588454a1ac4bb484ad0b9ee648e9ac156f8db.tar.gz
opensim-SC-6a2588454a1ac4bb484ad0b9ee648e9ac156f8db.tar.bz2
opensim-SC-6a2588454a1ac4bb484ad0b9ee648e9ac156f8db.tar.xz
* Removed AssetHttpServer, using BaseHttpServer instead
* Removed legacy REST handling * Created two custom IStreamHandlers for asset up/download * Removed quite a lot of double and triple encodings, trying to work towards binary only and direct write into storage. * Introduced BaseStreamHandler with GetParam() and some other goodies
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs163
-rw-r--r--OpenSim/Framework/Servers/BaseStreamHandler.cs40
-rw-r--r--OpenSim/Framework/Servers/IStreamHandler.cs3
-rw-r--r--OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj3
-rw-r--r--OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build1
-rw-r--r--OpenSim/Framework/Servers/RestStreamHandler.cs30
-rw-r--r--OpenSim/Grid/AssetServer/AssetHttpServer.cs125
-rw-r--r--OpenSim/Grid/AssetServer/Main.cs169
-rw-r--r--OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj3
-rw-r--r--OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.exe.build1
-rw-r--r--OpenSim/Grid/GridServer/Main.cs29
-rw-r--r--OpenSim/Grid/UserServer/Main.cs4
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs94
-rw-r--r--OpenSim/Region/Capabilities/Caps.cs11
14 files changed, 341 insertions, 335 deletions
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
index 9831108..aed538b 100644
--- a/OpenSim/Framework/Servers/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -42,48 +42,56 @@ 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>(); 45 //protected Dictionary<string, RestMethodEntry> m_restHandlers = new Dictionary<string, RestMethodEntry>();
46 protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>(); 46 protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>();
47 protected Dictionary<string, IStreamHandler> m_streamHandlers = new Dictionary<string, IStreamHandler>(); 47 protected Dictionary<string, IStreamHandler> m_streamHandlers = new Dictionary<string, IStreamHandler>();
48 protected int m_port; 48 protected int m_port;
49 protected bool firstcaps = true; 49 protected bool m_firstcaps = true;
50 50
51 public BaseHttpServer(int port) 51 public BaseHttpServer(int port)
52 { 52 {
53 m_port = port; 53 m_port = port;
54 } 54 }
55 55
56 public void AddStreamHandler( string path, IStreamHandler handler) 56 public void AddStreamHandler( IStreamHandler handler)
57 { 57 {
58 string handlerKey = handler.HttpMethod + ":" + path; 58 string httpMethod = handler.HttpMethod;
59 string path = handler.Path;
60
61 string handlerKey = GetHandlerKey(httpMethod, path);
59 m_streamHandlers.Add(handlerKey, handler); 62 m_streamHandlers.Add(handlerKey, handler);
60 } 63 }
61 64
62 public bool AddRestHandler(string method, string path, RestMethod handler) 65 private static string GetHandlerKey(string httpMethod, string path)
63 { 66 {
64 //Console.WriteLine("adding new REST handler for path " + path); 67 return httpMethod + ":" + path;
65 string methodKey = String.Format("{0}: {1}", method, path);
66
67 if (!this.m_restHandlers.ContainsKey(methodKey))
68 {
69 this.m_restHandlers.Add(methodKey, new RestMethodEntry(path, handler));
70 return true;
71 }
72
73 //must already have a handler for that path so return false
74 return false;
75 } 68 }
76 69
77 public bool RemoveRestHandler(string method, string path) 70 //public bool AddRestHandler(string method, string path, RestMethod handler)
78 { 71 //{
79 string methodKey = String.Format("{0}: {1}", method, path); 72 // //Console.WriteLine("adding new REST handler for path " + path);
80 if (this.m_restHandlers.ContainsKey(methodKey)) 73 // string methodKey = String.Format("{0}: {1}", method, path);
81 { 74
82 this.m_restHandlers.Remove(methodKey); 75 // if (!this.m_restHandlers.ContainsKey(methodKey))
83 return true; 76 // {
84 } 77 // this.m_restHandlers.Add(methodKey, new RestMethodEntry(path, handler));
85 return false; 78 // return true;
86 } 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 //}
87 95
88 public bool AddXmlRPCHandler(string method, XmlRpcMethod handler) 96 public bool AddXmlRPCHandler(string method, XmlRpcMethod handler)
89 { 97 {
@@ -119,40 +127,40 @@ namespace OpenSim.Framework.Servers
119 return XmlRpcResponseSerializer.Singleton.Serialize(response); 127 return XmlRpcResponseSerializer.Singleton.Serialize(response);
120 } 128 }
121 129
122 protected virtual string ParseREST(string request, string path, string method) 130 //protected virtual string ParseREST(string request, string path, string method)
123 { 131 //{
124 string response; 132 // string response;
125 133
126 string requestKey = String.Format("{0}: {1}", method, path); 134 // string requestKey = String.Format("{0}: {1}", method, path);
127 135
128 string bestMatch = String.Empty; 136 // string bestMatch = String.Empty;
129 foreach (string currentKey in m_restHandlers.Keys) 137 // foreach (string currentKey in m_restHandlers.Keys)
130 { 138 // {
131 if (requestKey.StartsWith(currentKey)) 139 // if (requestKey.StartsWith(currentKey))
132 { 140 // {
133 if (currentKey.Length > bestMatch.Length) 141 // if (currentKey.Length > bestMatch.Length)
134 { 142 // {
135 bestMatch = currentKey; 143 // bestMatch = currentKey;
136 } 144 // }
137 } 145 // }
138 } 146 // }
139 147
140 RestMethodEntry restMethodEntry; 148 // RestMethodEntry restMethodEntry;
141 if (m_restHandlers.TryGetValue(bestMatch, out restMethodEntry)) 149 // if (m_restHandlers.TryGetValue(bestMatch, out restMethodEntry))
142 { 150 // {
143 RestMethod restMethod = restMethodEntry.RestMethod; 151 // RestMethod restMethod = restMethodEntry.RestMethod;
144 152
145 string param = path.Substring(restMethodEntry.Path.Length); 153 // string param = path.Substring(restMethodEntry.Path.Length);
146 response = restMethod(request, path, param); 154 // response = restMethod(request, path, param);
147 155
148 } 156 // }
149 else 157 // else
150 { 158 // {
151 response = String.Empty; 159 // response = String.Empty;
152 } 160 // }
153 161
154 return response; 162 // return response;
155 } 163 //}
156 164
157 165
158 protected virtual string ParseXMLRPC(string requestBody) 166 protected virtual string ParseXMLRPC(string requestBody)
@@ -179,13 +187,13 @@ namespace OpenSim.Framework.Servers
179 response.SendChunked = false; 187 response.SendChunked = false;
180 188
181 string path = request.RawUrl; 189 string path = request.RawUrl;
182 string handlerKey = request.HttpMethod + ":" + path; 190 string handlerKey = GetHandlerKey( request.HttpMethod, path );
183 191
184 IStreamHandler streamHandler; 192 IStreamHandler streamHandler;
185 193
186 if (TryGetStreamHandler( handlerKey, out streamHandler)) 194 if (TryGetStreamHandler( handlerKey, out streamHandler))
187 { 195 {
188 byte[] buffer = streamHandler.Handle(path, request.InputStream ); 196 byte[] buffer = streamHandler.Handle(path, request.InputStream);
189 request.InputStream.Close(); 197 request.InputStream.Close();
190 198
191 response.ContentType = streamHandler.ContentType; 199 response.ContentType = streamHandler.ContentType;
@@ -253,25 +261,25 @@ namespace OpenSim.Framework.Servers
253 response.AddHeader("Content-type", "text/xml"); 261 response.AddHeader("Content-type", "text/xml");
254 break; 262 break;
255 263
256 case "application/xml": 264 //case "application/xml":
257 case "application/octet-stream": 265 //case "application/octet-stream":
258 // probably LLSD we hope, otherwise it should be ignored by the parser 266 // // probably LLSD we hope, otherwise it should be ignored by the parser
259 // responseString = ParseLLSDXML(requestBody); 267 // // responseString = ParseLLSDXML(requestBody);
260 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); 268 // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
261 response.AddHeader("Content-type", "application/xml"); 269 // response.AddHeader("Content-type", "application/xml");
262 break; 270 // break;
263 271
264 case "application/x-www-form-urlencoded": 272 //case "application/x-www-form-urlencoded":
265 // a form data POST so send to the REST parser 273 // // a form data POST so send to the REST parser
266 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); 274 // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
267 response.AddHeader("Content-type", "text/html"); 275 // response.AddHeader("Content-type", "text/html");
268 break; 276 // break;
269 277
270 case null: 278 //case null:
271 // must be REST or invalid crap, so pass to the REST parser 279 // // must be REST or invalid crap, so pass to the REST parser
272 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); 280 // responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
273 response.AddHeader("Content-type", "text/html"); 281 // response.AddHeader("Content-type", "text/html");
274 break; 282 // break;
275 283
276 } 284 }
277 285
@@ -318,5 +326,10 @@ namespace OpenSim.Framework.Servers
318 } 326 }
319 } 327 }
320 328
329
330 public void RemoveStreamHandler(string httpMethod, string path)
331 {
332 m_streamHandlers.Remove(GetHandlerKey(httpMethod, path));
333 }
321 } 334 }
322} 335}
diff --git a/OpenSim/Framework/Servers/BaseStreamHandler.cs b/OpenSim/Framework/Servers/BaseStreamHandler.cs
new file mode 100644
index 0000000..95e9707
--- /dev/null
+++ b/OpenSim/Framework/Servers/BaseStreamHandler.cs
@@ -0,0 +1,40 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace OpenSim.Framework.Servers
7{
8 public abstract class BaseStreamHandler : IStreamHandler
9 {
10 public string ContentType
11 {
12 get { return "application/xml"; }
13 }
14
15 private string m_httpMethod;
16 public string HttpMethod
17 {
18 get { return m_httpMethod; }
19 }
20
21 private string m_path;
22 public string Path
23 {
24 get { return m_path; }
25 }
26
27 protected string GetParam( string path )
28 {
29 return path.Substring( m_path.Length );
30 }
31
32 public abstract byte[] Handle(string path, Stream request);
33
34 protected BaseStreamHandler(string path, string httpMethod )
35 {
36 m_httpMethod = httpMethod;
37 m_path = path;
38 }
39 }
40}
diff --git a/OpenSim/Framework/Servers/IStreamHandler.cs b/OpenSim/Framework/Servers/IStreamHandler.cs
index bc76e9c..6cab40d 100644
--- a/OpenSim/Framework/Servers/IStreamHandler.cs
+++ b/OpenSim/Framework/Servers/IStreamHandler.cs
@@ -15,5 +15,8 @@ namespace OpenSim.Framework.Servers
15 15
16 // Return required http method 16 // Return required http method
17 string HttpMethod { get;} 17 string HttpMethod { get;}
18
19 // Return path
20 string Path { get; }
18 } 21 }
19} 22}
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj
index 555bd5d..4eb9844 100644
--- a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj
+++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj
@@ -93,6 +93,9 @@
93 <Compile Include="BaseHttpServer.cs"> 93 <Compile Include="BaseHttpServer.cs">
94 <SubType>Code</SubType> 94 <SubType>Code</SubType>
95 </Compile> 95 </Compile>
96 <Compile Include="BaseStreamHandler.cs">
97 <SubType>Code</SubType>
98 </Compile>
96 <Compile Include="CheckSumServer.cs"> 99 <Compile Include="CheckSumServer.cs">
97 <SubType>Code</SubType> 100 <SubType>Code</SubType>
98 </Compile> 101 </Compile>
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build
index a3d140f..5e96ef1 100644
--- a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build
+++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.dll.build
@@ -12,6 +12,7 @@
12 </resources> 12 </resources>
13 <sources failonempty="true"> 13 <sources failonempty="true">
14 <include name="BaseHttpServer.cs" /> 14 <include name="BaseHttpServer.cs" />
15 <include name="BaseStreamHandler.cs" />
15 <include name="CheckSumServer.cs" /> 16 <include name="CheckSumServer.cs" />
16 <include name="ILlsdMethodHandler.cs" /> 17 <include name="ILlsdMethodHandler.cs" />
17 <include name="IStreamHandler.cs" /> 18 <include name="IStreamHandler.cs" />
diff --git a/OpenSim/Framework/Servers/RestStreamHandler.cs b/OpenSim/Framework/Servers/RestStreamHandler.cs
index 64d6ea3..7ca369d 100644
--- a/OpenSim/Framework/Servers/RestStreamHandler.cs
+++ b/OpenSim/Framework/Servers/RestStreamHandler.cs
@@ -5,41 +5,27 @@ using System.IO;
5 5
6namespace OpenSim.Framework.Servers 6namespace OpenSim.Framework.Servers
7{ 7{
8 public class RestStreamHandler : IStreamHandler 8 public class RestStreamHandler : BaseStreamHandler
9 { 9 {
10 RestMethod m_restMethod; 10 RestMethod m_restMethod;
11 11
12 private string m_contentType; 12 override public byte[] Handle(string path, Stream request )
13 public string ContentType
14 {
15 get { return m_contentType; }
16 }
17
18 private string m_httpMethod;
19 public string HttpMethod
20 {
21 get { return m_httpMethod; }
22 }
23
24
25 public byte[] Handle(string path, Stream request )
26 { 13 {
27 Encoding encoding = Encoding.UTF8; 14 Encoding encoding = Encoding.UTF8;
28 StreamReader reader = new StreamReader(request, encoding); 15 StreamReader streamReader = new StreamReader(request, encoding);
29 16
30 string requestBody = reader.ReadToEnd(); 17 string requestBody = streamReader.ReadToEnd();
31 reader.Close(); 18 streamReader.Close();
32 19
33 string responseString = m_restMethod(requestBody, path, m_httpMethod); 20 string param = GetParam(path);
21 string responseString = m_restMethod(requestBody, path, param );
34 22
35 return Encoding.UTF8.GetBytes(responseString); 23 return Encoding.UTF8.GetBytes(responseString);
36 } 24 }
37 25
38 public RestStreamHandler(RestMethod restMethod, string httpMethod, string contentType) 26 public RestStreamHandler(string httpMethod, string path, RestMethod restMethod) : base( path, httpMethod )
39 { 27 {
40 m_restMethod = restMethod; 28 m_restMethod = restMethod;
41 m_httpMethod = httpMethod;
42 m_contentType = contentType;
43 } 29 }
44 } 30 }
45} 31}
diff --git a/OpenSim/Grid/AssetServer/AssetHttpServer.cs b/OpenSim/Grid/AssetServer/AssetHttpServer.cs
deleted file mode 100644
index 9546891..0000000
--- a/OpenSim/Grid/AssetServer/AssetHttpServer.cs
+++ /dev/null
@@ -1,125 +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*/
28using System;
29using System.IO;
30using System.Net;
31using System.Text;
32using System.Text.RegularExpressions;
33using OpenSim.Framework.Servers;
34
35namespace OpenSim.Grid.AssetServer
36{
37 /// <summary>
38 /// An HTTP server for sending assets
39 /// </summary>
40 public class AssetHttpServer :BaseHttpServer
41 {
42 /// <summary>
43 /// Creates the new asset server
44 /// </summary>
45 /// <param name="port">Port to initalise on</param>
46 public AssetHttpServer(int port)
47 : base(port)
48 {
49 }
50
51 /// <summary>
52 /// Handles an HTTP request
53 /// </summary>
54 /// <param name="stateinfo">HTTP State Info</param>
55 public override void HandleRequest(Object stateinfo)
56 {
57 try
58 {
59 HttpListenerContext context = (HttpListenerContext)stateinfo;
60
61 HttpListenerRequest request = context.Request;
62 HttpListenerResponse response = context.Response;
63
64 response.KeepAlive = false;
65 response.SendChunked = false;
66
67 Stream body = request.InputStream;
68 Encoding encoding = Encoding.UTF8;
69 StreamReader reader = new StreamReader(body, encoding);
70
71 string requestBody = reader.ReadToEnd();
72 body.Close();
73 reader.Close();
74
75 //Console.WriteLine(request.HttpMethod + " " + request.RawUrl + " Http/" + request.ProtocolVersion.ToString() + " content type: " + request.ContentType);
76 //Console.WriteLine(requestBody);
77
78 string responseString = "";
79 switch (request.ContentType)
80 {
81 case "text/xml":
82 // must be XML-RPC, so pass to the XML-RPC parser
83
84 responseString = ParseXMLRPC(requestBody);
85 responseString = Regex.Replace(responseString, "utf-16", "utf-8");
86
87 response.AddHeader("Content-type", "text/xml");
88 break;
89
90 case "application/xml":
91 // probably LLSD we hope, otherwise it should be ignored by the parser
92 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
93 response.AddHeader("Content-type", "application/xml");
94 break;
95
96 case "application/x-www-form-urlencoded":
97 // a form data POST so send to the REST parser
98 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
99 response.AddHeader("Content-type", "text/plain");
100 break;
101
102 case null:
103 // must be REST or invalid crap, so pass to the REST parser
104 responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod);
105 response.AddHeader("Content-type", "text/plain");
106 break;
107
108 }
109
110 Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
111 byte[] buffer = Windows1252Encoding.GetBytes(responseString);
112 Stream output = response.OutputStream;
113 response.SendChunked = false;
114 response.ContentLength64 = buffer.Length;
115 output.Write(buffer, 0, buffer.Length);
116 output.Close();
117 }
118 catch (Exception e)
119 {
120 Console.WriteLine(e.ToString());
121 }
122 }
123
124 }
125}
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index 112d72f..3e302d8 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -33,13 +33,14 @@ using Db4objects.Db4o;
33using libsecondlife; 33using libsecondlife;
34using OpenSim.Framework.Console; 34using OpenSim.Framework.Console;
35using OpenSim.Framework.Types; 35using OpenSim.Framework.Types;
36using OpenSim.Framework.Servers;
36 37
37namespace OpenSim.Grid.AssetServer 38namespace OpenSim.Grid.AssetServer
38{ 39{
39 /// <summary> 40 /// <summary>
40 /// An asset server 41 /// An asset server
41 /// </summary> 42 /// </summary>
42 public class OpenAsset_Main : conscmd_callback 43 public class OpenAsset_Main : conscmd_callback
43 { 44 {
44 private IObjectContainer db; 45 private IObjectContainer db;
45 46
@@ -76,58 +77,60 @@ namespace OpenSim.Grid.AssetServer
76 77
77 public void Startup() 78 public void Startup()
78 { 79 {
79 m_console.Verbose( "Main.cs:Startup() - Setting up asset DB"); 80 m_console.Verbose("Main.cs:Startup() - Setting up asset DB");
80 setupDB(); 81 setupDB();
81 82
82 m_console.Verbose( "Main.cs:Startup() - Starting HTTP process"); 83 m_console.Verbose("Main.cs:Startup() - Starting HTTP process");
83 AssetHttpServer httpServer = new AssetHttpServer(8003); 84 BaseHttpServer httpServer = new BaseHttpServer(8003);
84 85
86 httpServer.AddStreamHandler( new GetAssetStreamHandler(this));
87 httpServer.AddStreamHandler(new PostAssetStreamHandler( this ));
85 88
86 httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod); 89 //httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod);
87 httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod); 90 //httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod);
88 91
89 httpServer.Start(); 92 httpServer.Start();
90 93
91 } 94 }
92 95
93 public string assetPostMethod(string requestBody, string path, string param) 96 //public string AssetPostMethod(string requestBody, string path, string param)
94 { 97 //{
95 AssetBase asset = new AssetBase(); 98 // AssetBase asset = new AssetBase();
96 asset.Name = ""; 99 // asset.Name = "";
97 asset.FullID = new LLUUID(param); 100 // asset.FullID = new LLUUID(param);
98 Encoding Windows1252Encoding = Encoding.GetEncoding(1252); 101 // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
99 byte[] buffer = Windows1252Encoding.GetBytes(requestBody); 102 // byte[] buffer = Windows1252Encoding.GetBytes(requestBody);
100 asset.Data = buffer; 103 // asset.Data = buffer;
101 AssetStorage store = new AssetStorage(); 104 // AssetStorage store = new AssetStorage();
102 store.Data = asset.Data; 105 // store.Data = asset.Data;
103 store.Name = asset.Name; 106 // store.Name = asset.Name;
104 store.UUID = asset.FullID; 107 // store.UUID = asset.FullID;
105 db.Set(store); 108 // db.Set(store);
106 db.Commit(); 109 // db.Commit();
107 return ""; 110 // return "";
108 } 111 //}
109 112
110 public string assetGetMethod(string request, string path, string param) 113 //public string AssetGetMethod(string request, string path, string param)
111 { 114 //{
112 Console.WriteLine("got a request " + param); 115 // Console.WriteLine("got a request " + param);
113 byte[] assetdata = getAssetData(new LLUUID(param), false); 116 // byte[] assetdata = GetAssetData(new LLUUID(param), false);
114 if (assetdata != null) 117 // if (assetdata != null)
115 { 118 // {
116 Encoding Windows1252Encoding = Encoding.GetEncoding(1252); 119 // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
117 string ret = Windows1252Encoding.GetString(assetdata); 120 // string ret = Windows1252Encoding.GetString(assetdata);
118 //string ret = System.Text.Encoding.Unicode.GetString(assetdata); 121 // //string ret = System.Text.Encoding.Unicode.GetString(assetdata);
119 122
120 return ret; 123 // return ret;
121 124
122 } 125 // }
123 else 126 // else
124 { 127 // {
125 return ""; 128 // return "";
126 } 129 // }
127 130
128 } 131 //}
129 132
130 public byte[] getAssetData(LLUUID assetID, bool isTexture) 133 public byte[] GetAssetData(LLUUID assetID, bool isTexture)
131 { 134 {
132 bool found = false; 135 bool found = false;
133 AssetStorage foundAsset = null; 136 AssetStorage foundAsset = null;
@@ -155,7 +158,7 @@ namespace OpenSim.Grid.AssetServer
155 try 158 try
156 { 159 {
157 db = Db4oFactory.OpenFile("assets.yap"); 160 db = Db4oFactory.OpenFile("assets.yap");
158 MainLog.Instance.Verbose( "Main.cs:setupDB() - creation"); 161 MainLog.Instance.Verbose("Main.cs:setupDB() - creation");
159 } 162 }
160 catch (Exception e) 163 catch (Exception e)
161 { 164 {
@@ -305,6 +308,21 @@ namespace OpenSim.Grid.AssetServer
305 return config; 308 return config;
306 }*/ 309 }*/
307 310
311 public void CreateAsset(LLUUID assetId, byte[] assetData)
312 {
313 AssetBase asset = new AssetBase();
314 asset.Name = "";
315 asset.FullID = assetId;
316 asset.Data = assetData;
317
318 AssetStorage store = new AssetStorage();
319 store.Data = asset.Data;
320 store.Name = asset.Name;
321 store.UUID = asset.FullID;
322 db.Set(store);
323 db.Commit();
324 }
325
308 public void RunCmd(string cmd, string[] cmdparams) 326 public void RunCmd(string cmd, string[] cmdparams)
309 { 327 {
310 switch (cmd) 328 switch (cmd)
@@ -324,4 +342,65 @@ namespace OpenSim.Grid.AssetServer
324 { 342 {
325 } 343 }
326 } 344 }
345
346 public class GetAssetStreamHandler : BaseStreamHandler
347 {
348 OpenAsset_Main m_assetManager;
349
350 override public byte[] Handle(string path, Stream request)
351 {
352 string param = GetParam(path);
353
354 byte[] assetdata = m_assetManager.GetAssetData(new LLUUID(param), false);
355 if (assetdata != null)
356 {
357 return assetdata;
358 }
359 else
360 {
361 return new byte[]{};
362 }
363 }
364
365 public GetAssetStreamHandler(OpenAsset_Main assetManager):base( "/assets/", "GET")
366 {
367 m_assetManager = assetManager;
368 }
369 }
370
371 public class PostAssetStreamHandler : BaseStreamHandler
372 {
373 OpenAsset_Main m_assetManager;
374
375 override public byte[] Handle(string path, Stream request)
376 {
377 string param = GetParam(path);
378 LLUUID assetId = new LLUUID(param);
379 byte[] txBuffer = new byte[4096];
380
381 using( BinaryReader binReader = new BinaryReader( request ) )
382 {
383 using (MemoryStream memoryStream = new MemoryStream(4096))
384 {
385 int count;
386 while ((count = binReader.Read(txBuffer, 0, 4096)) > 0)
387 {
388 memoryStream.Write(txBuffer, 0, count);
389 }
390
391 byte[] assetData = memoryStream.ToArray();
392
393 m_assetManager.CreateAsset(assetId, assetData);
394 }
395 }
396
397 return new byte[]{};
398 }
399
400 public PostAssetStreamHandler( OpenAsset_Main assetManager )
401 : base("/assets/", "POST")
402 {
403 m_assetManager = assetManager;
404 }
405 }
327} 406}
diff --git a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj
index caebca3..5ba4642 100644
--- a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj
+++ b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj
@@ -98,9 +98,6 @@
98 <ItemGroup> 98 <ItemGroup>
99 </ItemGroup> 99 </ItemGroup>
100 <ItemGroup> 100 <ItemGroup>
101 <Compile Include="AssetHttpServer.cs">
102 <SubType>Code</SubType>
103 </Compile>
104 <Compile Include="Main.cs"> 101 <Compile Include="Main.cs">
105 <SubType>Code</SubType> 102 <SubType>Code</SubType>
106 </Compile> 103 </Compile>
diff --git a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.exe.build b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.exe.build
index 88724f6..a922fe7 100644
--- a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.exe.build
+++ b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.exe.build
@@ -11,7 +11,6 @@
11 <resources prefix="OpenSim.Grid.AssetServer" dynamicprefix="true" > 11 <resources prefix="OpenSim.Grid.AssetServer" dynamicprefix="true" >
12 </resources> 12 </resources>
13 <sources failonempty="true"> 13 <sources failonempty="true">
14 <include name="AssetHttpServer.cs" />
15 <include name="Main.cs" /> 14 <include name="Main.cs" />
16 <include name="Properties/AssemblyInfo.cs" /> 15 <include name="Properties/AssemblyInfo.cs" />
17 </sources> 16 </sources>
diff --git a/OpenSim/Grid/GridServer/Main.cs b/OpenSim/Grid/GridServer/Main.cs
index 2e76cee..a990ff7 100644
--- a/OpenSim/Grid/GridServer/Main.cs
+++ b/OpenSim/Grid/GridServer/Main.cs
@@ -127,25 +127,16 @@ namespace OpenSim.Grid.GridServer
127 httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcSimulatorLoginMethod); 127 httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcSimulatorLoginMethod);
128 httpServer.AddXmlRPCHandler("map_block", m_gridManager.XmlRpcMapBlockMethod); 128 httpServer.AddXmlRPCHandler("map_block", m_gridManager.XmlRpcMapBlockMethod);
129 129
130 httpServer.AddRestHandler("GET", "/sims/", m_gridManager.RestGetSimMethod); 130 httpServer.AddStreamHandler(new RestStreamHandler("GET", "/sims/", m_gridManager.RestGetSimMethod ));
131 httpServer.AddRestHandler("POST", "/sims/", m_gridManager.RestSetSimMethod); 131 httpServer.AddStreamHandler(new RestStreamHandler("POST", "/sims/", m_gridManager.RestSetSimMethod ));
132 httpServer.AddRestHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod); 132
133 httpServer.AddRestHandler("POST", "/regions/", m_gridManager.RestSetRegionMethod); 133 httpServer.AddStreamHandler( new RestStreamHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod ));
134 134 httpServer.AddStreamHandler( new RestStreamHandler("POST","/regions/", m_gridManager.RestSetRegionMethod ));
135 135
136 // lbsa71 : This code snippet taken from old http server. 136 //httpServer.AddRestHandler("GET", "/sims/", m_gridManager.RestGetSimMethod);
137 // I have no idea what this was supposed to do - looks like an infinite recursion to me. 137 //httpServer.AddRestHandler("POST", "/sims/", m_gridManager.RestSetSimMethod);
138 // case "regions": 138 //httpServer.AddRestHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod);
139 //// DIRTY HACK ALERT 139 //httpServer.AddRestHandler("POST", "/regions/", m_gridManager.RestSetRegionMethod);
140 //Console.Notice("/regions/ accessed");
141 //TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle((ulong)Convert.ToUInt64(rest_params[1]));
142 //respstring = ParseREST("/regions/" + rest_params[1], requestBody, HTTPmethod);
143 //break;
144
145 // lbsa71 : I guess these were never used?
146 //Listener.Prefixes.Add("http://+:8001/gods/");
147 //Listener.Prefixes.Add("http://+:8001/highestuuid/");
148 //Listener.Prefixes.Add("http://+:8001/uuidblocks/");
149 140
150 httpServer.Start(); 141 httpServer.Start();
151 142
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index 5560e7d..30465a3 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -105,8 +105,8 @@ namespace OpenSim.Grid.UserServer
105 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName); 105 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
106 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID); 106 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID);
107 107
108 httpServer.AddRestHandler("DELETE", "/usersessions/", m_userManager.RestDeleteUserSessionMethod); 108 httpServer.AddStreamHandler( new RestStreamHandler("DELETE", "/usersessions/", m_userManager.RestDeleteUserSessionMethod ));
109 109
110 httpServer.Start(); 110 httpServer.Start();
111 m_console.Status("Userserver 0.3 - Startup complete"); 111 m_console.Status("Userserver 0.3 - Startup complete");
112 } 112 }
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index eaa067b..e2486bd 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -44,6 +44,7 @@ using OpenSim.Region.ClientStack;
44using OpenSim.Region.Communications.Local; 44using OpenSim.Region.Communications.Local;
45using OpenSim.Region.Communications.OGS1; 45using OpenSim.Region.Communications.OGS1;
46using OpenSim.Region.Environment.Scenes; 46using OpenSim.Region.Environment.Scenes;
47using System.Text;
47 48
48namespace OpenSim 49namespace OpenSim
49{ 50{
@@ -51,7 +52,7 @@ namespace OpenSim
51 public class OpenSimMain : RegionApplicationBase, conscmd_callback 52 public class OpenSimMain : RegionApplicationBase, conscmd_callback
52 { 53 {
53 protected CommunicationsManager commsManager; 54 protected CommunicationsManager commsManager;
54 // private CheckSumServer checkServer; 55 // private CheckSumServer checkServer;
55 56
56 private bool m_silent; 57 private bool m_silent;
57 private string m_logFilename = "region-console-" + Guid.NewGuid().ToString() + ".log"; 58 private string m_logFilename = "region-console-" + Guid.NewGuid().ToString() + ".log";
@@ -84,10 +85,10 @@ namespace OpenSim
84 m_log = new LogBase(m_logFilename, "Region", this, m_silent); 85 m_log = new LogBase(m_logFilename, "Region", this, m_silent);
85 MainLog.Instance = m_log; 86 MainLog.Instance = m_log;
86 87
87 m_log.Verbose( "Main.cs:Startup() - Loading configuration"); 88 m_log.Verbose("Main.cs:Startup() - Loading configuration");
88 this.serversData.InitConfig(this.m_sandbox, this.localConfig); 89 this.serversData.InitConfig(this.m_sandbox, this.localConfig);
89 this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change 90 this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change
90 91
91 ScenePresence.LoadTextureFile("avatar-texture.dat"); 92 ScenePresence.LoadTextureFile("avatar-texture.dat");
92 93
93 ClientView.TerrainManager = new TerrainManager(new SecondLife()); 94 ClientView.TerrainManager = new TerrainManager(new SecondLife());
@@ -95,8 +96,8 @@ namespace OpenSim
95 if (m_sandbox) 96 if (m_sandbox)
96 { 97 {
97 this.SetupLocalGridServers(); 98 this.SetupLocalGridServers();
98 // this.checkServer = new CheckSumServer(12036); 99 // this.checkServer = new CheckSumServer(12036);
99 // this.checkServer.ServerListener(); 100 // this.checkServer.ServerListener();
100 this.commsManager = new CommunicationsLocal(this.serversData); 101 this.commsManager = new CommunicationsLocal(this.serversData);
101 } 102 }
102 else 103 else
@@ -114,7 +115,7 @@ namespace OpenSim
114 115
115 this.SetupWorld(); 116 this.SetupWorld();
116 117
117 m_log.Verbose( "Main.cs:Startup() - Initialising HTTP server"); 118 m_log.Verbose("Main.cs:Startup() - Initialising HTTP server");
118 119
119 120
120 121
@@ -124,7 +125,7 @@ namespace OpenSim
124 } 125 }
125 126
126 //Start http server 127 //Start http server
127 m_log.Verbose( "Main.cs:Startup() - Starting HTTP server"); 128 m_log.Verbose("Main.cs:Startup() - Starting HTTP server");
128 httpServer.Start(); 129 httpServer.Start();
129 130
130 // Start UDP servers 131 // Start UDP servers
@@ -145,7 +146,7 @@ namespace OpenSim
145 } 146 }
146 catch (Exception e) 147 catch (Exception e)
147 { 148 {
148 m_log.Error( e.Message + "\nSorry, could not setup local cache"); 149 m_log.Error(e.Message + "\nSorry, could not setup local cache");
149 Environment.Exit(1); 150 Environment.Exit(1);
150 } 151 }
151 152
@@ -160,7 +161,7 @@ namespace OpenSim
160 } 161 }
161 catch (Exception e) 162 catch (Exception e)
162 { 163 {
163 m_log.Error( e.Message + "\nSorry, could not setup remote cache"); 164 m_log.Error(e.Message + "\nSorry, could not setup remote cache");
164 Environment.Exit(1); 165 Environment.Exit(1);
165 } 166 }
166 } 167 }
@@ -226,7 +227,7 @@ namespace OpenSim
226 LocalWorld.LoadStorageDLL("OpenSim.Region.Storage.LocalStorageDb4o.dll"); //all these dll names shouldn't be hard coded. 227 LocalWorld.LoadStorageDLL("OpenSim.Region.Storage.LocalStorageDb4o.dll"); //all these dll names shouldn't be hard coded.
227 LocalWorld.LoadWorldMap(); 228 LocalWorld.LoadWorldMap();
228 229
229 m_log.Verbose( "Main.cs:Startup() - Starting up messaging system"); 230 m_log.Verbose("Main.cs:Startup() - Starting up messaging system");
230 LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine); 231 LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine);
231 LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D()); 232 LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D());
232 LocalWorld.LoadPrimsFromStorage(); 233 LocalWorld.LoadPrimsFromStorage();
@@ -244,21 +245,36 @@ namespace OpenSim
244 } 245 }
245 } 246 }
246 247
247 protected override void SetupHttpListener() 248 private class SimStatusHandler : IStreamHandler
248 { 249 {
249 httpServer = new BaseHttpServer(this.serversData.HttpListenerPort); //regionData[0].IPListenPort); 250 public byte[] Handle(string path, Stream request)
251 {
252 return Encoding.UTF8.GetBytes("OK");
253 }
250 254
251 if (!this.m_sandbox) 255 public string ContentType
252 { 256 {
257 get { return "text/plain"; }
258 }
253 259
254 // we are in Grid mode so set a XmlRpc handler to handle "expect_user" calls from the user server 260 public string HttpMethod
261 {
262 get { return "GET"; }
263 }
264
265 public string Path
266 {
267 get { return "/simstatus/"; }
268 }
269 }
255 270
271 protected override void SetupHttpListener()
272 {
273 httpServer = new BaseHttpServer(this.serversData.HttpListenerPort); //regionData[0].IPListenPort);
256 274
257 httpServer.AddRestHandler("GET", "/simstatus/", 275 if (!this.m_sandbox)
258 delegate(string request, string path, string param) 276 {
259 { 277 httpServer.AddStreamHandler( new SimStatusHandler() );
260 return "OK";
261 });
262 } 278 }
263 } 279 }
264 280
@@ -340,7 +356,7 @@ namespace OpenSim
340 switch (attri) 356 switch (attri)
341 { 357 {
342 default: 358 default:
343 m_log.Warn( "Main.cs: SetupFromConfig() - Invalid value for PhysicsEngine attribute, terminating"); 359 m_log.Warn("Main.cs: SetupFromConfig() - Invalid value for PhysicsEngine attribute, terminating");
344 Environment.Exit(1); 360 Environment.Exit(1);
345 break; 361 break;
346 362
@@ -376,11 +392,11 @@ namespace OpenSim
376 /// </summary> 392 /// </summary>
377 public virtual void Shutdown() 393 public virtual void Shutdown()
378 { 394 {
379 m_log.Verbose( "Main.cs:Shutdown() - Closing all threads"); 395 m_log.Verbose("Main.cs:Shutdown() - Closing all threads");
380 m_log.Verbose( "Main.cs:Shutdown() - Killing listener thread"); 396 m_log.Verbose("Main.cs:Shutdown() - Killing listener thread");
381 m_log.Verbose( "Main.cs:Shutdown() - Killing clients"); 397 m_log.Verbose("Main.cs:Shutdown() - Killing clients");
382 // IMPLEMENT THIS 398 // IMPLEMENT THIS
383 m_log.Verbose( "Main.cs:Shutdown() - Closing console and terminating"); 399 m_log.Verbose("Main.cs:Shutdown() - Closing console and terminating");
384 for (int i = 0; i < m_localWorld.Count; i++) 400 for (int i = 0; i < m_localWorld.Count; i++)
385 { 401 {
386 ((Scene)m_localWorld[i]).Close(); 402 ((Scene)m_localWorld[i]).Close();
@@ -400,8 +416,8 @@ namespace OpenSim
400 switch (command) 416 switch (command)
401 { 417 {
402 case "help": 418 case "help":
403 m_log.Error( "show users - show info about connected users"); 419 m_log.Error("show users - show info about connected users");
404 m_log.Error( "shutdown - disconnect all clients and shutdown"); 420 m_log.Error("shutdown - disconnect all clients and shutdown");
405 break; 421 break;
406 422
407 case "show": 423 case "show":
@@ -415,7 +431,7 @@ namespace OpenSim
415 string result = ""; 431 string result = "";
416 for (int i = 0; i < m_localWorld.Count; i++) 432 for (int i = 0; i < m_localWorld.Count; i++)
417 { 433 {
418 if (!((Scene)m_localWorld[i]).Terrain.RunTerrainCmd(cmdparams, ref result,m_localWorld[i].RegionInfo.RegionName)) 434 if (!((Scene)m_localWorld[i]).Terrain.RunTerrainCmd(cmdparams, ref result, m_localWorld[i].RegionInfo.RegionName))
419 { 435 {
420 m_log.Error(result); 436 m_log.Error(result);
421 } 437 }
@@ -427,7 +443,7 @@ namespace OpenSim
427 break; 443 break;
428 444
429 default: 445 default:
430 m_log.Error( "Unknown command"); 446 m_log.Error("Unknown command");
431 break; 447 break;
432 } 448 }
433 } 449 }
@@ -441,22 +457,22 @@ namespace OpenSim
441 switch (ShowWhat) 457 switch (ShowWhat)
442 { 458 {
443 case "uptime": 459 case "uptime":
444 m_log.Error( "OpenSim has been running since " + startuptime.ToString()); 460 m_log.Error("OpenSim has been running since " + startuptime.ToString());
445 m_log.Error( "That is " + (DateTime.Now - startuptime).ToString()); 461 m_log.Error("That is " + (DateTime.Now - startuptime).ToString());
446 break; 462 break;
447 case "users": 463 case "users":
448 ScenePresence TempAv; 464 ScenePresence TempAv;
449 m_log.Error( String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}{6,-16}", "Firstname", "Lastname", "Agent ID", "Session ID", "Circuit", "IP","World")); 465 m_log.Error(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}{6,-16}", "Firstname", "Lastname", "Agent ID", "Session ID", "Circuit", "IP", "World"));
450 for (int i = 0; i < m_localWorld.Count; i++) 466 for (int i = 0; i < m_localWorld.Count; i++)
451 { 467 {
452 foreach (libsecondlife.LLUUID UUID in ((Scene)m_localWorld[i]).Entities.Keys) 468 foreach (libsecondlife.LLUUID UUID in ((Scene)m_localWorld[i]).Entities.Keys)
453 { 469 {
454 if (((Scene)m_localWorld[i]).Entities[UUID].ToString() == "OpenSim.world.Avatar") 470 if (((Scene)m_localWorld[i]).Entities[UUID].ToString() == "OpenSim.world.Avatar")
455 { 471 {
456 TempAv = (ScenePresence)((Scene)m_localWorld[i]).Entities[UUID]; 472 TempAv = (ScenePresence)((Scene)m_localWorld[i]).Entities[UUID];
457 m_log.Error(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}{6,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.AgentId, "Unknown", "Unknown"), ((Scene)m_localWorld[i]).RegionInfo.RegionName); 473 m_log.Error(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}{6,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.AgentId, "Unknown", "Unknown"), ((Scene)m_localWorld[i]).RegionInfo.RegionName);
458 } 474 }
459 } 475 }
460 } 476 }
461 break; 477 break;
462 } 478 }
diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs
index 0f6c471..1d07683 100644
--- a/OpenSim/Region/Capabilities/Caps.cs
+++ b/OpenSim/Region/Capabilities/Caps.cs
@@ -82,7 +82,7 @@ namespace OpenSim.Region.Capabilities
82 private void AddCapsHandler( BaseHttpServer httpListener, string path, RestMethod restMethod ) 82 private void AddCapsHandler( BaseHttpServer httpListener, string path, RestMethod restMethod )
83 { 83 {
84 string capsBase = "/CAPS/" + m_capsObjectPath; 84 string capsBase = "/CAPS/" + m_capsObjectPath;
85 httpListener.AddStreamHandler(capsBase + path, new RestStreamHandler(restMethod, "POST", "application/xml")); 85 httpListener.AddStreamHandler(new RestStreamHandler("POST", capsBase + path, restMethod));
86 } 86 }
87 87
88 /// <summary> 88 /// <summary>
@@ -211,9 +211,11 @@ namespace OpenSim.Region.Capabilities
211 string res = ""; 211 string res = "";
212 LLUUID newAsset = LLUUID.Random(); 212 LLUUID newAsset = LLUUID.Random();
213 LLUUID newInvItem = LLUUID.Random(); 213 LLUUID newInvItem = LLUUID.Random();
214 string uploaderPath = m_capsObjectPath + Util.RandomClass.Next(5000, 8000).ToString("0000"); 214 string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
215 AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); 215 AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener);
216 httpListener.AddRestHandler("POST", "/CAPS/" + uploaderPath, uploader.uploaderCaps); 216
217 AddCapsHandler( httpListener, uploaderPath, uploader.uploaderCaps);
218
217 string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + uploaderPath; 219 string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + uploaderPath;
218 //Console.WriteLine("uploader url is " + uploaderURL); 220 //Console.WriteLine("uploader url is " + uploaderURL);
219 res += "<llsd><map>"; 221 res += "<llsd><map>";
@@ -269,7 +271,8 @@ namespace OpenSim.Region.Capabilities
269 res += "</map></llsd>"; 271 res += "</map></llsd>";
270 272
271 // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); 273 // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated());
272 httpListener.RemoveRestHandler("POST", "/CAPS/" + uploaderPath); 274 httpListener.RemoveStreamHandler("POST", "/CAPS/" + uploaderPath);
275
273 if (OnUpLoad != null) 276 if (OnUpLoad != null)
274 { 277 {
275 OnUpLoad(newAssetID, inv, data); 278 OnUpLoad(newAssetID, inv, data);