diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetHandlers.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetHandlers.cs index 3b89ddc..d06257a 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetHandlers.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetHandlers.cs @@ -425,6 +425,59 @@ namespace OpenSim.Region.ClientStack.Linden Enqueue(EndEventToBytes(sb), avatarID); } + public void SendBulkUpdateInventoryItem(InventoryItemBase item, UUID avatarID, UUID? transationID = null) + { + const uint FULL_MASK_PERMISSIONS = (uint)0x7ffffff; + + osUTF8 sb = StartEvent("BulkUpdateInventory"); + LLSDxmlEncode2.AddArray("AgentData", sb); + LLSDxmlEncode2.AddMap(sb); + LLSDxmlEncode2.AddElem("AgentID", avatarID, sb); + LLSDxmlEncode2.AddElem("TransactionID", transationID ?? UUID.Random(), sb); + LLSDxmlEncode2.AddEndMapAndArray(sb); + + LLSDxmlEncode2.AddRawElem("<key>FolderData</key><array><map><key>FolderID</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>Name</key><string></string><key>ParentID</key><uuid>00000000-0000-0000-0000-000000000000</uuid ><key>Type</key ><integer>-1</integer></map ></array>",sb); + + osUTF8 osName = new osUTF8(Util.StringToBytesNoTerm(item.Name, 255)); + osUTF8 osDesc = new osUTF8(Util.StringToBytesNoTerm(item.Description,255)); + + LLSDxmlEncode2.AddArray("ItemData", sb); + LLSDxmlEncode2.AddMap(sb); + LLSDxmlEncode2.AddElem("ItemID", item.ID, sb); + LLSDxmlEncode2.AddElem("AssetID", item.AssetID, sb); + LLSDxmlEncode2.AddElem("CreatorID", item.CreatorIdAsUuid, sb); + LLSDxmlEncode2.AddElem("BaseMask", item.BasePermissions, sb); + LLSDxmlEncode2.AddElem("CreationDate", item.CreationDate, sb); + LLSDxmlEncode2.AddElem("Description", osDesc, sb); + LLSDxmlEncode2.AddElem("EveryoneMask", item.EveryOnePermissions, sb); + LLSDxmlEncode2.AddElem("FolderID", item.Folder, sb); + LLSDxmlEncode2.AddElem("InvType", (sbyte)item.InvType, sb); + LLSDxmlEncode2.AddElem("Name", osName, sb); + LLSDxmlEncode2.AddElem("NextOwnerMask", item.NextPermissions, sb); + LLSDxmlEncode2.AddElem("GroupID", item.GroupID, sb); + LLSDxmlEncode2.AddElem("GroupMask", item.GroupPermissions, sb); + LLSDxmlEncode2.AddElem("GroupOwned", item.GroupOwned , sb); + LLSDxmlEncode2.AddElem("OwnerID", item.Owner, sb); + LLSDxmlEncode2.AddElem("OwnerMask", item.CurrentPermissions, sb); + LLSDxmlEncode2.AddElem("SalePrice", item.SalePrice, sb); + LLSDxmlEncode2.AddElem("SaleType", item.SaleType, sb); + LLSDxmlEncode2.AddElem("Type", (sbyte)item.AssetType, sb); + LLSDxmlEncode2.AddElem("CallbackID", (uint)0, sb); + LLSDxmlEncode2.AddElem("Flags", item.Flags & 0x2000ff, sb); + + uint iCRC = + Helpers.InventoryCRC(1000, 0, (sbyte)item.InvType, + (sbyte)item.AssetType, item.AssetID, + item.GroupID, 100, + item.Owner, item.CreatorIdAsUuid, + item.ID, item.Folder, + FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, + FULL_MASK_PERMISSIONS); + LLSDxmlEncode2.AddElem("CRC", iCRC, sb); + LLSDxmlEncode2.AddEndMapAndArray(sb); + Enqueue(EndEventToBytes(sb), avatarID); + } + public static string KeepAliveEvent() { osUTF8 sb = new osUTF8(256); diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index e413725..80f2601 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -2711,6 +2711,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected void SendBulkUpdateInventoryItem(InventoryItemBase item, UUID? transationID = null) { + IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); + if (eq == null) + return; + + eq.SendBulkUpdateInventoryItem(item, AgentId, transationID); + + /* const uint FULL_MASK_PERMISSIONS = (uint)0x7ffffff; BulkUpdateInventoryPacket bulkUpdate @@ -2760,6 +2767,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP FULL_MASK_PERMISSIONS); bulkUpdate.Header.Zerocoded = true; OutPacket(bulkUpdate, ThrottleOutPacketType.Asset); + */ + } public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId) diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs index 489b261..44f2bd9 100644 --- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs +++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs @@ -106,6 +106,7 @@ namespace OpenSim.Region.Framework.Interfaces byte[] BuildEvent(string eventName, OSD eventBody); void partPhysicsProperties(uint localID, byte physhapetype, float density, float friction, float bounce, float gravmod, UUID avatarID); void WindlightRefreshEvent(int interpolate, UUID avatarID); + void SendBulkUpdateInventoryItem(InventoryItemBase item, UUID avatarID, UUID? transationID = null); osUTF8 StartEvent(string eventName); osUTF8 StartEvent(string eventName, int cap); byte[] EndEventToBytes(osUTF8 sb); diff --git a/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs b/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs index 9543096..4a7204c 100644 --- a/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs +++ b/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs @@ -205,6 +205,10 @@ namespace OpenSim.Tests.Common { } + public void SendBulkUpdateInventoryItem(InventoryItemBase item, UUID avatarID, UUID? transationID = null) + { + } + public osUTF8 StartEvent(string eventName) { return null;