diff options
Cleaning up some of the CAPS functions, Asset uploads now use the new LLSDStreamhandler system.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Capabilities/Caps.cs | 125 |
1 files changed, 46 insertions, 79 deletions
diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs index 6373f6e..7216691 100644 --- a/OpenSim/Region/Capabilities/Caps.cs +++ b/OpenSim/Region/Capabilities/Caps.cs | |||
@@ -48,8 +48,8 @@ namespace OpenSim.Region.Capabilities | |||
48 | private string m_requestPath = "0000/"; | 48 | private string m_requestPath = "0000/"; |
49 | private string m_mapLayerPath = "0001/"; | 49 | private string m_mapLayerPath = "0001/"; |
50 | private string m_newInventory = "0002/"; | 50 | private string m_newInventory = "0002/"; |
51 | private string m_requestTexture = "0003/"; | 51 | // private string m_requestTexture = "0003/"; |
52 | private string eventQueue = "0100/"; | 52 | //private string eventQueue = "0100/"; |
53 | private BaseHttpServer httpListener; | 53 | private BaseHttpServer httpListener; |
54 | private LLUUID agentID; | 54 | private LLUUID agentID; |
55 | private AssetCache assetCache; | 55 | private AssetCache assetCache; |
@@ -74,17 +74,12 @@ namespace OpenSim.Region.Capabilities | |||
74 | Console.WriteLine("registering CAPS handlers"); | 74 | Console.WriteLine("registering CAPS handlers"); |
75 | string capsBase = "/CAPS/" + m_capsObjectPath; | 75 | string capsBase = "/CAPS/" + m_capsObjectPath; |
76 | 76 | ||
77 | 77 | httpListener.AddStreamHandler(new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer )); | |
78 | AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer); | 78 | httpListener.AddStreamHandler( new LLSDStreamhandler<LLSDAssetUploadRequest, LLSDAssetUploadResponse>("POST", capsBase + m_newInventory, this.NewAgentInventoryRequest)); |
79 | |||
80 | // httpListener.AddStreamHandler( | ||
81 | // new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer )); | ||
82 | 79 | ||
83 | AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest); | 80 | AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest); |
84 | AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory); | 81 | // AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); |
85 | AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); | 82 | // AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); |
86 | AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); | ||
87 | |||
88 | } | 83 | } |
89 | 84 | ||
90 | [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")] | 85 | [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")] |
@@ -103,9 +98,7 @@ namespace OpenSim.Region.Capabilities | |||
103 | /// <returns></returns> | 98 | /// <returns></returns> |
104 | public string CapsRequest(string request, string path, string param) | 99 | public string CapsRequest(string request, string path, string param) |
105 | { | 100 | { |
106 | // Console.WriteLine("Caps Request " + request); | 101 | string result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); |
107 | string result = ""; | ||
108 | result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); | ||
109 | return result; | 102 | return result; |
110 | } | 103 | } |
111 | 104 | ||
@@ -117,55 +110,33 @@ namespace OpenSim.Region.Capabilities | |||
117 | { | 110 | { |
118 | LLSDCapsDetails caps = new LLSDCapsDetails(); | 111 | LLSDCapsDetails caps = new LLSDCapsDetails(); |
119 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; | 112 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; |
120 | |||
121 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; | 113 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; |
122 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; | 114 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; |
123 | |||
124 | return caps; | 115 | return caps; |
125 | } | 116 | } |
126 | 117 | ||
127 | /// <summary> | 118 | /// <summary> |
128 | /// | 119 | /// |
129 | /// </summary> | 120 | /// </summary> |
130 | /// <param name="request"></param> | 121 | /// <param name="mapReq"></param> |
131 | /// <param name="path"></param> | ||
132 | /// <param name="param"></param> | ||
133 | /// <returns></returns> | 122 | /// <returns></returns> |
134 | public string MapLayer(string request, string path, string param) | ||
135 | { | ||
136 | Console.WriteLine("map request: " + request); | ||
137 | Encoding _enc = Encoding.UTF8; | ||
138 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes(request)); | ||
139 | LLSDMapRequest mapReq = new LLSDMapRequest(); | ||
140 | LLSDHelpers.DeserialiseLLSDMap(hash, mapReq); | ||
141 | |||
142 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); | ||
143 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | ||
144 | string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); | ||
145 | |||
146 | return res; | ||
147 | } | ||
148 | |||
149 | public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq) | 123 | public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq) |
150 | { | 124 | { |
151 | Console.WriteLine("Map request " + mapReq.Flags); | ||
152 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); | 125 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); |
153 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | 126 | mapResponse.LayerData.Array.Add(this.GetLLSDMapLayerResponse()); |
154 | return mapResponse; | 127 | return mapResponse; |
155 | } | 128 | } |
156 | 129 | ||
157 | |||
158 | /// <summary> | 130 | /// <summary> |
159 | /// | 131 | /// |
160 | /// </summary> | 132 | /// </summary> |
161 | /// <returns></returns> | 133 | /// <returns></returns> |
162 | protected LLSDMapLayer BuildLLSDMapLayerResponse() | 134 | protected LLSDMapLayer GetLLSDMapLayerResponse() |
163 | { | 135 | { |
164 | LLSDMapLayer mapLayer = new LLSDMapLayer(); | 136 | LLSDMapLayer mapLayer = new LLSDMapLayer(); |
165 | mapLayer.Right = 5000; | 137 | mapLayer.Right = 5000; |
166 | mapLayer.Top = 5000; | 138 | mapLayer.Top = 5000; |
167 | mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); | 139 | mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); |
168 | |||
169 | return mapLayer; | 140 | return mapLayer; |
170 | } | 141 | } |
171 | 142 | ||
@@ -182,6 +153,7 @@ namespace OpenSim.Region.Capabilities | |||
182 | return ""; | 153 | return ""; |
183 | } | 154 | } |
184 | 155 | ||
156 | #region EventQueue (Currently not enabled) | ||
185 | /// <summary> | 157 | /// <summary> |
186 | /// | 158 | /// |
187 | /// </summary> | 159 | /// </summary> |
@@ -240,36 +212,29 @@ namespace OpenSim.Region.Capabilities | |||
240 | eventQueueCount++; | 212 | eventQueueCount++; |
241 | return res; | 213 | return res; |
242 | } | 214 | } |
243 | 215 | #endregion | |
216 | |||
244 | /// <summary> | 217 | /// <summary> |
245 | /// | 218 | /// |
246 | /// </summary> | 219 | /// </summary> |
247 | /// <param name="request"></param> | 220 | /// <param name="llsdRequest"></param> |
248 | /// <param name="path"></param> | ||
249 | /// <param name="param"></param> | ||
250 | /// <returns></returns> | 221 | /// <returns></returns> |
251 | public string NewAgentInventory(string request, string path, string param) | 222 | public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest) |
252 | { | 223 | { |
253 | //Console.WriteLine("received upload request:"+ request); | 224 | string capsBase = "/CAPS/" + m_capsObjectPath; |
254 | string res = ""; | ||
255 | LLUUID newAsset = LLUUID.Random(); | 225 | LLUUID newAsset = LLUUID.Random(); |
256 | LLUUID newInvItem = LLUUID.Random(); | 226 | LLUUID newInvItem = LLUUID.Random(); |
257 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); | 227 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); |
258 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); | ||
259 | 228 | ||
260 | string capsBase = "/CAPS/" + m_capsObjectPath; | 229 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, capsBase + uploaderPath, this.httpListener); |
261 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); | 230 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); |
262 | 231 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; | |
263 | 232 | ||
264 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath +uploaderPath; | 233 | LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); |
265 | //Console.WriteLine("uploader url is " + uploaderURL); | 234 | uploadResponse.uploader = uploaderURL; |
266 | res += "<llsd><map>"; | 235 | uploadResponse.state = "upload"; |
267 | res += "<key>uploader</key><string>" + uploaderURL + "</string>"; | 236 | uploader.OnUpLoad += this.UploadCompleteHandler; |
268 | //res += "<key>success</key><boolean>true</boolean>"; | 237 | return uploadResponse; |
269 | res += "<key>state</key><string>upload</string>"; | ||
270 | res += "</map></llsd>"; | ||
271 | uploader.OnUpLoad += this.UploadHandler; | ||
272 | return res; | ||
273 | } | 238 | } |
274 | 239 | ||
275 | /// <summary> | 240 | /// <summary> |
@@ -278,9 +243,8 @@ namespace OpenSim.Region.Capabilities | |||
278 | /// <param name="assetID"></param> | 243 | /// <param name="assetID"></param> |
279 | /// <param name="inventoryItem"></param> | 244 | /// <param name="inventoryItem"></param> |
280 | /// <param name="data"></param> | 245 | /// <param name="data"></param> |
281 | public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) | 246 | public void UploadCompleteHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) |
282 | { | 247 | { |
283 | // Console.WriteLine("upload handler called"); | ||
284 | AssetBase asset; | 248 | AssetBase asset; |
285 | asset = new AssetBase(); | 249 | asset = new AssetBase(); |
286 | asset.FullID = assetID; | 250 | asset.FullID = assetID; |
@@ -299,42 +263,45 @@ namespace OpenSim.Region.Capabilities | |||
299 | private LLUUID newAssetID; | 263 | private LLUUID newAssetID; |
300 | private LLUUID inventoryItemID; | 264 | private LLUUID inventoryItemID; |
301 | private BaseHttpServer httpListener; | 265 | private BaseHttpServer httpListener; |
266 | |||
267 | /// <summary> | ||
268 | /// | ||
269 | /// </summary> | ||
270 | /// <param name="assetID"></param> | ||
271 | /// <param name="inventoryItem"></param> | ||
272 | /// <param name="path"></param> | ||
273 | /// <param name="httpServer"></param> | ||
302 | public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) | 274 | public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) |
303 | { | 275 | { |
304 | newAssetID = assetID; | 276 | newAssetID = assetID; |
305 | inventoryItemID = inventoryItem; | 277 | inventoryItemID = inventoryItem; |
306 | uploaderPath = path; | 278 | uploaderPath = path; |
307 | httpListener = httpServer; | 279 | httpListener = httpServer; |
308 | |||
309 | } | 280 | } |
310 | 281 | ||
282 | /// <summary> | ||
283 | /// | ||
284 | /// </summary> | ||
285 | /// <param name="data"></param> | ||
286 | /// <param name="path"></param> | ||
287 | /// <param name="param"></param> | ||
288 | /// <returns></returns> | ||
311 | public string uploaderCaps(byte[] data, string path, string param) | 289 | public string uploaderCaps(byte[] data, string path, string param) |
312 | { | 290 | { |
313 | //Encoding _enc = Encoding.UTF8; | ||
314 | //byte[] data = _enc.GetBytes(request); | ||
315 | //Console.WriteLine("recieved upload " + Util.FieldToString(data)); | ||
316 | LLUUID inv = this.inventoryItemID; | 291 | LLUUID inv = this.inventoryItemID; |
317 | string res = ""; | 292 | string res = ""; |
318 | res += "<llsd><map>"; | 293 | LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); |
319 | res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>"; | 294 | uploadComplete.new_asset = newAssetID.ToStringHyphenated(); |
320 | res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>"; | 295 | uploadComplete.new_inventory_item = inv; |
321 | res += "<key>state</key><string>complete</string>"; | 296 | uploadComplete.state = "complete"; |
322 | res += "</map></llsd>"; | 297 | res = LLSDHelpers.SerialiseLLSDReply(uploadComplete); |
323 | 298 | ||
324 | // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); | 299 | httpListener.RemoveStreamHandler("POST", uploaderPath); |
325 | httpListener.RemoveStreamHandler("POST", "/CAPS/" + uploaderPath); | ||
326 | 300 | ||
327 | if (OnUpLoad != null) | 301 | if (OnUpLoad != null) |
328 | { | 302 | { |
329 | OnUpLoad(newAssetID, inv, data); | 303 | OnUpLoad(newAssetID, inv, data); |
330 | } | 304 | } |
331 | |||
332 | /* | ||
333 | FileStream fs = File.Create("upload.jp2"); | ||
334 | BinaryWriter bw = new BinaryWriter(fs); | ||
335 | bw.Write(data); | ||
336 | bw.Close(); | ||
337 | fs.Close();*/ | ||
338 | return res; | 305 | return res; |
339 | } | 306 | } |
340 | } | 307 | } |