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 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<InventoryItemBase> items);

View File

@ -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<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer ));
httpListener.AddStreamHandler(new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", capsBase + m_mapLayerPath, this.GetMapLayer ));
httpListener.AddStreamHandler( new LLSDStreamhandler<LLSDAssetUploadRequest, LLSDAssetUploadResponse>("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
/// <returns></returns>
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;
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <param name="mapReq"></param>
/// <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)
{
Console.WriteLine("Map request " + mapReq.Flags);
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse());
mapResponse.LayerData.Array.Add(this.GetLLSDMapLayerResponse());
return mapResponse;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
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)
/// <summary>
///
/// </summary>
@ -240,36 +212,29 @@ namespace OpenSim.Region.Capabilities
eventQueueCount++;
return res;
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <param name="llsdRequest"></param>
/// <returns></returns>
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 += "<llsd><map>";
res += "<key>uploader</key><string>" + uploaderURL + "</string>";
//res += "<key>success</key><boolean>true</boolean>";
res += "<key>state</key><string>upload</string>";
res += "</map></llsd>";
uploader.OnUpLoad += this.UploadHandler;
return res;
LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse();
uploadResponse.uploader = uploaderURL;
uploadResponse.state = "upload";
uploader.OnUpLoad += this.UploadCompleteHandler;
return uploadResponse;
}
/// <summary>
@ -278,9 +243,8 @@ namespace OpenSim.Region.Capabilities
/// <param name="assetID"></param>
/// <param name="inventoryItem"></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;
asset = new AssetBase();
asset.FullID = assetID;
@ -299,42 +263,45 @@ namespace OpenSim.Region.Capabilities
private LLUUID newAssetID;
private LLUUID inventoryItemID;
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)
{
newAssetID = assetID;
inventoryItemID = inventoryItem;
uploaderPath = path;
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)
{
//Encoding _enc = Encoding.UTF8;
//byte[] data = _enc.GetBytes(request);
//Console.WriteLine("recieved upload " + Util.FieldToString(data));
LLUUID inv = this.inventoryItemID;
string res = "";
res += "<llsd><map>";
res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>";
res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>";
res += "<key>state</key><string>complete</string>";
res += "</map></llsd>";
// 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;
}
}

View File

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

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();
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
/// </summary>
/// <param name="primData"></param>
/// <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();
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;

View File

@ -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);
}
/// <summary>