From 27c595c00744b9601a49b64f74b686f838e7209e Mon Sep 17 00:00:00 2001 From: MW Date: Thu, 12 Jul 2007 13:09:39 +0000 Subject: [PATCH] Cleaning up some of the CAPS functions, Asset uploads now use the new LLSDStreamhandler system. --- .../General/Interfaces/IClientAPI.cs | 4 +- OpenSim/Region/Capabilities/Caps.cs | 125 +++++++----------- ...oadReply.cs => LLSDAssetUploadComplete.cs} | 4 +- .../Capabilities/LLSDAssetUploadRequest.cs | 21 +++ .../Capabilities/LLSDAssetUploadResponse.cs | 18 +++ OpenSim/Region/ClientStack/ClientView.API.cs | 14 +- .../Region/Environment/Scenes/Primitive.cs | 2 +- 7 files changed, 97 insertions(+), 91 deletions(-) rename OpenSim/Region/Capabilities/{LLSDUploadReply.cs => LLSDAssetUploadComplete.cs} (93%) create mode 100644 OpenSim/Region/Capabilities/LLSDAssetUploadRequest.cs create mode 100644 OpenSim/Region/Capabilities/LLSDAssetUploadResponse.cs diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index fe1e9dc320..d409ebe76e 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs @@ -174,8 +174,8 @@ namespace OpenSim.Framework.Interfaces void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID , uint flags); void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags); - void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); - void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); + void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); + void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items); diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs index 6373f6e470..7216691e25 100644 --- a/OpenSim/Region/Capabilities/Caps.cs +++ b/OpenSim/Region/Capabilities/Caps.cs @@ -48,8 +48,8 @@ namespace OpenSim.Region.Capabilities private string m_requestPath = "0000/"; private string m_mapLayerPath = "0001/"; private string m_newInventory = "0002/"; - private string m_requestTexture = "0003/"; - private string eventQueue = "0100/"; + // private string m_requestTexture = "0003/"; + //private string eventQueue = "0100/"; private BaseHttpServer httpListener; private LLUUID agentID; private AssetCache assetCache; @@ -74,17 +74,12 @@ namespace OpenSim.Region.Capabilities Console.WriteLine("registering CAPS handlers"); string capsBase = "/CAPS/" + m_capsObjectPath; - - AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer); - - // httpListener.AddStreamHandler( - // new LLSDStreamhandler("POST", capsBase + m_mapLayerPath, this.GetMapLayer )); + httpListener.AddStreamHandler(new LLSDStreamhandler("POST", capsBase + m_mapLayerPath, this.GetMapLayer )); + httpListener.AddStreamHandler( new LLSDStreamhandler("POST", capsBase + m_newInventory, this.NewAgentInventoryRequest)); AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest); - AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory); - AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); - AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); - + // AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); + // AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); } [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")] @@ -103,9 +98,7 @@ namespace OpenSim.Region.Capabilities /// public string CapsRequest(string request, string path, string param) { - // Console.WriteLine("Caps Request " + request); - string result = ""; - result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); + string result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); return result; } @@ -117,55 +110,33 @@ namespace OpenSim.Region.Capabilities { LLSDCapsDetails caps = new LLSDCapsDetails(); string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; - caps.MapLayer = capsBaseUrl + m_mapLayerPath; caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; - return caps; } /// /// /// - /// - /// - /// + /// /// - public string MapLayer(string request, string path, string param) - { - Console.WriteLine("map request: " + request); - Encoding _enc = Encoding.UTF8; - Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes(request)); - LLSDMapRequest mapReq = new LLSDMapRequest(); - LLSDHelpers.DeserialiseLLSDMap(hash, mapReq); - - LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); - mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); - string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); - - return res; - } - public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq) { - Console.WriteLine("Map request " + mapReq.Flags); LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); - mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); + mapResponse.LayerData.Array.Add(this.GetLLSDMapLayerResponse()); return mapResponse; } - /// /// /// /// - protected LLSDMapLayer BuildLLSDMapLayerResponse() + protected LLSDMapLayer GetLLSDMapLayerResponse() { LLSDMapLayer mapLayer = new LLSDMapLayer(); mapLayer.Right = 5000; mapLayer.Top = 5000; mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); - return mapLayer; } @@ -182,6 +153,7 @@ namespace OpenSim.Region.Capabilities return ""; } + #region EventQueue (Currently not enabled) /// /// /// @@ -240,36 +212,29 @@ namespace OpenSim.Region.Capabilities eventQueueCount++; return res; } - + #endregion + /// /// /// - /// - /// - /// + /// /// - public string NewAgentInventory(string request, string path, string param) + public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest) { - //Console.WriteLine("received upload request:"+ request); - string res = ""; + string capsBase = "/CAPS/" + m_capsObjectPath; LLUUID newAsset = LLUUID.Random(); LLUUID newInvItem = LLUUID.Random(); string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); - AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); - string capsBase = "/CAPS/" + m_capsObjectPath; + AssetUploader uploader = new AssetUploader(newAsset, newInvItem, capsBase + uploaderPath, this.httpListener); httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); - + string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; - string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath +uploaderPath; - //Console.WriteLine("uploader url is " + uploaderURL); - res += ""; - res += "uploader" + uploaderURL + ""; - //res += "successtrue"; - res += "stateupload"; - res += ""; - uploader.OnUpLoad += this.UploadHandler; - return res; + LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); + uploadResponse.uploader = uploaderURL; + uploadResponse.state = "upload"; + uploader.OnUpLoad += this.UploadCompleteHandler; + return uploadResponse; } /// @@ -278,9 +243,8 @@ namespace OpenSim.Region.Capabilities /// /// /// - public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) + public void UploadCompleteHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) { - // Console.WriteLine("upload handler called"); AssetBase asset; asset = new AssetBase(); asset.FullID = assetID; @@ -299,42 +263,45 @@ namespace OpenSim.Region.Capabilities private LLUUID newAssetID; private LLUUID inventoryItemID; private BaseHttpServer httpListener; + + /// + /// + /// + /// + /// + /// + /// public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) { newAssetID = assetID; inventoryItemID = inventoryItem; uploaderPath = path; httpListener = httpServer; - } + /// + /// + /// + /// + /// + /// + /// public string uploaderCaps(byte[] data, string path, string param) { - //Encoding _enc = Encoding.UTF8; - //byte[] data = _enc.GetBytes(request); - //Console.WriteLine("recieved upload " + Util.FieldToString(data)); LLUUID inv = this.inventoryItemID; string res = ""; - res += ""; - res += "new_asset" + newAssetID.ToStringHyphenated() + ""; - res += "new_inventory_item" + inv.ToStringHyphenated() + ""; - res += "statecomplete"; - res += ""; - - // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); - httpListener.RemoveStreamHandler("POST", "/CAPS/" + uploaderPath); + LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); + uploadComplete.new_asset = newAssetID.ToStringHyphenated(); + uploadComplete.new_inventory_item = inv; + uploadComplete.state = "complete"; + res = LLSDHelpers.SerialiseLLSDReply(uploadComplete); + + httpListener.RemoveStreamHandler("POST", uploaderPath); if (OnUpLoad != null) { OnUpLoad(newAssetID, inv, data); } - - /* - FileStream fs = File.Create("upload.jp2"); - BinaryWriter bw = new BinaryWriter(fs); - bw.Write(data); - bw.Close(); - fs.Close();*/ return res; } } diff --git a/OpenSim/Region/Capabilities/LLSDUploadReply.cs b/OpenSim/Region/Capabilities/LLSDAssetUploadComplete.cs similarity index 93% rename from OpenSim/Region/Capabilities/LLSDUploadReply.cs rename to OpenSim/Region/Capabilities/LLSDAssetUploadComplete.cs index 023a056b8f..1b78353a5b 100644 --- a/OpenSim/Region/Capabilities/LLSDUploadReply.cs +++ b/OpenSim/Region/Capabilities/LLSDAssetUploadComplete.cs @@ -30,13 +30,13 @@ using libsecondlife; namespace OpenSim.Region.Capabilities { [LLSDType("MAP")] - public class LLSDUploadReply + public class LLSDAssetUploadComplete { public string new_asset = ""; public LLUUID new_inventory_item = LLUUID.Zero; public string state = ""; - public LLSDUploadReply() + public LLSDAssetUploadComplete() { } diff --git a/OpenSim/Region/Capabilities/LLSDAssetUploadRequest.cs b/OpenSim/Region/Capabilities/LLSDAssetUploadRequest.cs new file mode 100644 index 0000000000..7ef77cbfa7 --- /dev/null +++ b/OpenSim/Region/Capabilities/LLSDAssetUploadRequest.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; +using libsecondlife; + +namespace OpenSim.Region.Capabilities +{ + [LLSDMap] + public class LLSDAssetUploadRequest + { + public string asset_type = ""; + public string description = ""; + public LLUUID folder_id = LLUUID.Zero; + public string inventory_type = ""; + public string name = ""; + + public LLSDAssetUploadRequest() + { + } + } +} diff --git a/OpenSim/Region/Capabilities/LLSDAssetUploadResponse.cs b/OpenSim/Region/Capabilities/LLSDAssetUploadResponse.cs new file mode 100644 index 0000000000..1a620aed3b --- /dev/null +++ b/OpenSim/Region/Capabilities/LLSDAssetUploadResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenSim.Region.Capabilities +{ + [LLSDMap] + public class LLSDAssetUploadResponse + { + public string uploader = ""; + public string state = ""; + + public LLSDAssetUploadResponse() + { + + } + } +} diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index b9eba3a45f..e88995fc96 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -766,13 +766,13 @@ namespace OpenSim.Region.ClientStack } - public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) + public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) { ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.TimeDilation = timeDilation; outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; - outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, textureID, flags); + outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, flags); outPacket.ObjectData[0].ID = localID; outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].OwnerID = ownerID; @@ -785,13 +785,13 @@ namespace OpenSim.Region.ClientStack OutPacket(outPacket); } - public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) + public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) { ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.TimeDilation = timeDilation; outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; - outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, textureID, flags); + outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primShape, flags); outPacket.ObjectData[0].ID = localID; outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].OwnerID = ownerID; @@ -996,12 +996,12 @@ namespace OpenSim.Region.ClientStack /// /// /// - protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimitiveBaseShape primShape, LLUUID textureID, uint flags) + protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimitiveBaseShape primShape, uint flags) { ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); this.SetDefaultPrimPacketValues(objupdate); objupdate.UpdateFlags = flags; - this.SetPrimPacketShapeData(objupdate, primShape, textureID); + this.SetPrimPacketShapeData(objupdate, primShape); return objupdate; } @@ -1040,7 +1040,7 @@ namespace OpenSim.Region.ClientStack objectData.PathTwistBegin = primData.PathTwistBegin; } - protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimitiveBaseShape primData, LLUUID textureID) + protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimitiveBaseShape primData) { objectData.TextureEntry = primData.TextureEntry; diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs index d28e480bca..5cb2930daa 100644 --- a/OpenSim/Region/Environment/Scenes/Primitive.cs +++ b/OpenSim/Region/Environment/Scenes/Primitive.cs @@ -542,7 +542,7 @@ namespace OpenSim.Region.Environment.Scenes LLQuaternion lRot; lRot = new LLQuaternion(this.Rotation.x, this.Rotation.y, this.Rotation.z, this.Rotation.w); - remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.m_Shape, lPos, lRot, new LLUUID("00000000-0000-0000-9999-000000000005"), this.m_flags, this.uuid, this.OwnerID, this.Text, this.ParentID); + remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.m_Shape, lPos, lRot, this.m_flags, this.uuid, this.OwnerID, this.Text, this.ParentID); } ///