Cleaning up some of the CAPS functions, Asset uploads now use the new LLSDStreamhandler system.

afrisby
MW 2007-07-12 13:09:39 +00:00
parent 17ddb8b493
commit 27c595c007
7 changed files with 97 additions and 91 deletions

View File

@ -174,8 +174,8 @@ namespace OpenSim.Framework.Interfaces
void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint); 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, 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, 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, LLQuaternion rotation, 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, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID);
void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation);
void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items); void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items);

View File

@ -48,8 +48,8 @@ namespace OpenSim.Region.Capabilities
private string m_requestPath = "0000/"; private string m_requestPath = "0000/";
private string m_mapLayerPath = "0001/"; private string m_mapLayerPath = "0001/";
private string m_newInventory = "0002/"; private string m_newInventory = "0002/";
private string m_requestTexture = "0003/"; // private string m_requestTexture = "0003/";
private string eventQueue = "0100/"; //private string eventQueue = "0100/";
private BaseHttpServer httpListener; private BaseHttpServer httpListener;
private LLUUID agentID; private LLUUID agentID;
private AssetCache assetCache; private AssetCache assetCache;
@ -74,17 +74,12 @@ namespace OpenSim.Region.Capabilities
Console.WriteLine("registering CAPS handlers"); Console.WriteLine("registering CAPS handlers");
string capsBase = "/CAPS/" + m_capsObjectPath; string capsBase = "/CAPS/" + m_capsObjectPath;
httpListener.AddStreamHandler(new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer ));
AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer); httpListener.AddStreamHandler( new LLSDStreamhandler<LLSDAssetUploadRequest, LLSDAssetUploadResponse>("POST", capsBase + m_newInventory, this.NewAgentInventoryRequest));
// httpListener.AddStreamHandler(
// new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer ));
AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest); AddLegacyCapsHandler(httpListener, m_requestPath, CapsRequest);
AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory); // AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue);
AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); // AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture);
AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture);
} }
[Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")] [Obsolete("Use BaseHttpServer.AddStreamHandler(new LLSDStreamHandler( LLSDMethod delegate )) instead.")]
@ -103,9 +98,7 @@ namespace OpenSim.Region.Capabilities
/// <returns></returns> /// <returns></returns>
public string CapsRequest(string request, string path, string param) public string CapsRequest(string request, string path, string param)
{ {
// Console.WriteLine("Caps Request " + request); string result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities());
string result = "";
result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities());
return result; return result;
} }
@ -117,55 +110,33 @@ namespace OpenSim.Region.Capabilities
{ {
LLSDCapsDetails caps = new LLSDCapsDetails(); LLSDCapsDetails caps = new LLSDCapsDetails();
string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath;
caps.MapLayer = capsBaseUrl + m_mapLayerPath; caps.MapLayer = capsBaseUrl + m_mapLayerPath;
caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; caps.NewFileAgentInventory = capsBaseUrl + m_newInventory;
return caps; return caps;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="mapReq"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <returns></returns> /// <returns></returns>
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) public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq)
{ {
Console.WriteLine("Map request " + mapReq.Flags);
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); mapResponse.LayerData.Array.Add(this.GetLLSDMapLayerResponse());
return mapResponse; return mapResponse;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
protected LLSDMapLayer BuildLLSDMapLayerResponse() protected LLSDMapLayer GetLLSDMapLayerResponse()
{ {
LLSDMapLayer mapLayer = new LLSDMapLayer(); LLSDMapLayer mapLayer = new LLSDMapLayer();
mapLayer.Right = 5000; mapLayer.Right = 5000;
mapLayer.Top = 5000; mapLayer.Top = 5000;
mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006");
return mapLayer; return mapLayer;
} }
@ -182,6 +153,7 @@ namespace OpenSim.Region.Capabilities
return ""; return "";
} }
#region EventQueue (Currently not enabled)
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -240,36 +212,29 @@ namespace OpenSim.Region.Capabilities
eventQueueCount++; eventQueueCount++;
return res; return res;
} }
#endregion
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="llsdRequest"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <returns></returns> /// <returns></returns>
public string NewAgentInventory(string request, string path, string param) public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest)
{ {
//Console.WriteLine("received upload request:"+ request); string capsBase = "/CAPS/" + m_capsObjectPath;
string res = "";
LLUUID newAsset = LLUUID.Random(); LLUUID newAsset = LLUUID.Random();
LLUUID newInvItem = LLUUID.Random(); LLUUID newInvItem = LLUUID.Random();
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); 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)); 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; LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse();
//Console.WriteLine("uploader url is " + uploaderURL); uploadResponse.uploader = uploaderURL;
res += "<llsd><map>"; uploadResponse.state = "upload";
res += "<key>uploader</key><string>" + uploaderURL + "</string>"; uploader.OnUpLoad += this.UploadCompleteHandler;
//res += "<key>success</key><boolean>true</boolean>"; return uploadResponse;
res += "<key>state</key><string>upload</string>";
res += "</map></llsd>";
uploader.OnUpLoad += this.UploadHandler;
return res;
} }
/// <summary> /// <summary>
@ -278,9 +243,8 @@ namespace OpenSim.Region.Capabilities
/// <param name="assetID"></param> /// <param name="assetID"></param>
/// <param name="inventoryItem"></param> /// <param name="inventoryItem"></param>
/// <param name="data"></param> /// <param name="data"></param>
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; AssetBase asset;
asset = new AssetBase(); asset = new AssetBase();
asset.FullID = assetID; asset.FullID = assetID;
@ -299,42 +263,45 @@ namespace OpenSim.Region.Capabilities
private LLUUID newAssetID; private LLUUID newAssetID;
private LLUUID inventoryItemID; private LLUUID inventoryItemID;
private BaseHttpServer httpListener; private BaseHttpServer httpListener;
/// <summary>
///
/// </summary>
/// <param name="assetID"></param>
/// <param name="inventoryItem"></param>
/// <param name="path"></param>
/// <param name="httpServer"></param>
public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer)
{ {
newAssetID = assetID; newAssetID = assetID;
inventoryItemID = inventoryItem; inventoryItemID = inventoryItem;
uploaderPath = path; uploaderPath = path;
httpListener = httpServer; httpListener = httpServer;
} }
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <returns></returns>
public string uploaderCaps(byte[] data, string path, string param) 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; LLUUID inv = this.inventoryItemID;
string res = ""; string res = "";
res += "<llsd><map>"; LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete();
res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>"; uploadComplete.new_asset = newAssetID.ToStringHyphenated();
res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>"; uploadComplete.new_inventory_item = inv;
res += "<key>state</key><string>complete</string>"; uploadComplete.state = "complete";
res += "</map></llsd>"; res = LLSDHelpers.SerialiseLLSDReply(uploadComplete);
// Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); httpListener.RemoveStreamHandler("POST", uploaderPath);
httpListener.RemoveStreamHandler("POST", "/CAPS/" + uploaderPath);
if (OnUpLoad != null) if (OnUpLoad != null)
{ {
OnUpLoad(newAssetID, inv, data); OnUpLoad(newAssetID, inv, data);
} }
/*
FileStream fs = File.Create("upload.jp2");
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(data);
bw.Close();
fs.Close();*/
return res; return res;
} }
} }

View File

@ -30,13 +30,13 @@ using libsecondlife;
namespace OpenSim.Region.Capabilities namespace OpenSim.Region.Capabilities
{ {
[LLSDType("MAP")] [LLSDType("MAP")]
public class LLSDUploadReply public class LLSDAssetUploadComplete
{ {
public string new_asset = ""; public string new_asset = "";
public LLUUID new_inventory_item = LLUUID.Zero; public LLUUID new_inventory_item = LLUUID.Zero;
public string state = ""; public string state = "";
public LLSDUploadReply() public LLSDAssetUploadComplete()
{ {
} }

View File

@ -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()
{
}
}
}

View File

@ -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()
{
}
}
}

View File

@ -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(); ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.RegionHandle = regionHandle;
outPacket.RegionData.TimeDilation = timeDilation; outPacket.RegionData.TimeDilation = timeDilation;
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; 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].ID = localID;
outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].FullID = objectID;
outPacket.ObjectData[0].OwnerID = ownerID; outPacket.ObjectData[0].OwnerID = ownerID;
@ -785,13 +785,13 @@ namespace OpenSim.Region.ClientStack
OutPacket(outPacket); 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(); ObjectUpdatePacket outPacket = new ObjectUpdatePacket();
outPacket.RegionData.RegionHandle = regionHandle; outPacket.RegionData.RegionHandle = regionHandle;
outPacket.RegionData.TimeDilation = timeDilation; outPacket.RegionData.TimeDilation = timeDilation;
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; 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].ID = localID;
outPacket.ObjectData[0].FullID = objectID; outPacket.ObjectData[0].FullID = objectID;
outPacket.ObjectData[0].OwnerID = ownerID; outPacket.ObjectData[0].OwnerID = ownerID;
@ -996,12 +996,12 @@ namespace OpenSim.Region.ClientStack
/// </summary> /// </summary>
/// <param name="primData"></param> /// <param name="primData"></param>
/// <returns></returns> /// <returns></returns>
protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimitiveBaseShape primShape, LLUUID textureID, uint flags) protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimitiveBaseShape primShape, uint flags)
{ {
ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock();
this.SetDefaultPrimPacketValues(objupdate); this.SetDefaultPrimPacketValues(objupdate);
objupdate.UpdateFlags = flags; objupdate.UpdateFlags = flags;
this.SetPrimPacketShapeData(objupdate, primShape, textureID); this.SetPrimPacketShapeData(objupdate, primShape);
return objupdate; return objupdate;
} }
@ -1040,7 +1040,7 @@ namespace OpenSim.Region.ClientStack
objectData.PathTwistBegin = primData.PathTwistBegin; 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; objectData.TextureEntry = primData.TextureEntry;

View File

@ -542,7 +542,7 @@ namespace OpenSim.Region.Environment.Scenes
LLQuaternion lRot; LLQuaternion lRot;
lRot = new LLQuaternion(this.Rotation.x, this.Rotation.y, this.Rotation.z, this.Rotation.w); 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);
} }
/// <summary> /// <summary>