move BulkUpdateInventoryItem from lludp to eventqueue message

UbitUmarov [2021-07-25 02:52:11]
move BulkUpdateInventoryItem from lludp to eventqueue message
Filename
OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetHandlers.cs
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
OpenSim/Region/Framework/Interfaces/IEventQueue.cs
OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs
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;
ViewGit