From 465d1095dd0dd5c4c5231a81bb69e46a21f290fb Mon Sep 17 00:00:00 2001
From: dahlia
Date: Tue, 18 Aug 2009 17:06:14 -0700
Subject: Added new OpenSim.ini setting: "client_throttle_max_bps" which
 overrides user's viewer network throttle settings

---
 .../Region/ClientStack/LindenUDP/LLPacketQueue.cs  | 36 +++++++++++++---------
 .../Region/ClientStack/LindenUDP/LLUDPServer.cs    | 11 +++++--
 2 files changed, 31 insertions(+), 16 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
index bf0b06d..798c1e7 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
@@ -128,28 +128,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             // Store the throttle multiplier for posterity.
             throttleMultiplier = userSettings.ClientThrottleMultipler;
 
+
+            int throttleMaxBPS = 1500000;
+            if (userSettings.TotalThrottleSettings != null)
+                throttleMaxBPS = userSettings.TotalThrottleSettings.Max;
+
             // Set up the throttle classes (min, max, current) in bits per second
-            ResendThrottle =    new LLPacketThrottle(5000, 100000, 16000, userSettings.ClientThrottleMultipler);
-            LandThrottle =      new LLPacketThrottle(1000, 100000, 2000, userSettings.ClientThrottleMultipler);
-            WindThrottle =      new LLPacketThrottle(0, 100000, 0, userSettings.ClientThrottleMultipler);
-            CloudThrottle =     new LLPacketThrottle(0, 100000, 0, userSettings.ClientThrottleMultipler);
-            TaskThrottle =      new LLPacketThrottle(1000, 800000, 3000, userSettings.ClientThrottleMultipler);
-            AssetThrottle =     new LLPacketThrottle(1000, 800000, 1000, userSettings.ClientThrottleMultipler);
-            TextureThrottle =   new LLPacketThrottle(1000, 800000, 4000, userSettings.ClientThrottleMultipler);
-            
-            // Total Throttle trumps all - it is the number of bits in total that are allowed to go out per second.            
+            ResendThrottle = new LLPacketThrottle(5000, throttleMaxBPS / 15, 16000, userSettings.ClientThrottleMultipler);
+            LandThrottle = new LLPacketThrottle(1000, throttleMaxBPS / 15, 2000, userSettings.ClientThrottleMultipler);
+            WindThrottle = new LLPacketThrottle(0, throttleMaxBPS / 15, 0, userSettings.ClientThrottleMultipler);
+            CloudThrottle = new LLPacketThrottle(0, throttleMaxBPS / 15, 0, userSettings.ClientThrottleMultipler);
+            TaskThrottle = new LLPacketThrottle(1000, throttleMaxBPS / 2, 3000, userSettings.ClientThrottleMultipler);
+            AssetThrottle = new LLPacketThrottle(1000, throttleMaxBPS / 2, 1000, userSettings.ClientThrottleMultipler);
+            TextureThrottle = new LLPacketThrottle(1000, throttleMaxBPS / 2, 4000, userSettings.ClientThrottleMultipler);
+
+
+            // Total Throttle trumps all - it is the number of bits in total that are allowed to go out per second.           
+
+
             ThrottleSettings totalThrottleSettings = userSettings.TotalThrottleSettings;
             if (null == totalThrottleSettings)
-            {                
-                totalThrottleSettings = new ThrottleSettings(0, 1500000, 28000);
+            {
+                totalThrottleSettings = new ThrottleSettings(0, throttleMaxBPS, 28000);
             }
-            
-            TotalThrottle 
+
+            TotalThrottle
                 = new LLPacketThrottle(
                     totalThrottleSettings.Min, totalThrottleSettings.Max, totalThrottleSettings.Current,
                     userSettings.ClientThrottleMultipler);
 
-            throttleTimer = new Timer((int) (throttletimems/throttleTimeDivisor));
+            throttleTimer = new Timer((int)(throttletimems / throttleTimeDivisor));
             throttleTimer.Elapsed += ThrottleTimerElapsed;
             throttleTimer.Start();
 
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 5184e35..9ee8df5 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -152,11 +152,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             ClientStackUserSettings userSettings = new ClientStackUserSettings();
             
             IConfig config = configSource.Configs["ClientStack.LindenUDP"];
-            
+
             if (config != null)
             {
+                if (config.Contains("client_throttle_max_bps"))
+                {
+                    int maxBPS = config.GetInt("client_throttle_max_bps", 1500000);
+                    userSettings.TotalThrottleSettings = new ThrottleSettings(0, maxBPS,
+                    maxBPS > 28000 ? maxBPS : 28000);
+                }
+
                 if (config.Contains("client_throttle_multiplier"))
-                    userSettings.ClientThrottleMultipler = config.GetFloat("client_throttle_multiplier"); 
+                    userSettings.ClientThrottleMultipler = config.GetFloat("client_throttle_multiplier");
                 if (config.Contains("client_socket_rcvbuf_size"))
                     m_clientSocketReceiveBuffer = config.GetInt("client_socket_rcvbuf_size");
             }   
-- 
cgit v1.1


From 32cc00ec7b26290e4b65e326164510ad6fc831d3 Mon Sep 17 00:00:00 2001
From: Jeff Lee
Date: Tue, 18 Aug 2009 00:41:38 -0400
Subject: osGetLinkPrimitiveParams fix

---
 .../Shared/Api/Implementation/LSL_Api.cs           | 26 +++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 2dbbf70..4e665e9 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -1978,6 +1978,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             return new LSL_Rotation(q.X, q.Y, q.Z, q.W);
         }
 
+        private LSL_Rotation GetPartRot( SceneObjectPart part )
+        {
+            Quaternion q;
+            if (part.LinkNum == 0 || part.LinkNum == 1) // unlinked or root prim
+            {
+	            if (part.ParentGroup.RootPart.AttachmentPoint != 0)
+	            {
+	                ScenePresence avatar = World.GetScenePresence(part.AttachedAvatar);
+	                if (avatar != null)
+	                    if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0)
+	                        q = avatar.CameraRotation; // Mouselook
+	                    else
+	                        q = avatar.Rotation; // Currently infrequently updated so may be inaccurate
+	                else
+	                    q = part.ParentGroup.GroupRotation; // Likely never get here but just in case
+	            }
+	            else
+	                q = part.ParentGroup.GroupRotation; // just the group rotation
+	            return new LSL_Rotation(q.X, q.Y, q.Z, q.W);
+            }
+            q = part.GetWorldRotation();
+            return new LSL_Rotation(q.X, q.Y, q.Z, q.W);
+        }
+
         public LSL_Rotation llGetLocalRot()
         {
             m_host.AddScriptLPS(1);
@@ -7299,7 +7323,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
                         break;
 
                     case (int)ScriptBaseClass.PRIM_ROTATION:
-                        res.Add(llGetRot());
+                        res.Add(GetPartRot(part));
                         break;
 
                     case (int)ScriptBaseClass.PRIM_TYPE:
-- 
cgit v1.1


From 124f66bfc25984a01491b8447fa97bea2633281c Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 18 Aug 2009 22:17:47 -0700
Subject: jhurliman's patch in http://opensimulator.org/mantis/view.php?id=4024

---
 .../Region/ClientStack/LindenUDP/LLClientView.cs   |  4 +--
 .../Avatar/AvatarFactory/AvatarFactoryModule.cs    |  3 +-
 .../CoreModules/Avatar/Gestures/GesturesModule.cs  |  6 ++--
 .../Inventory/Transfer/InventoryTransferModule.cs  | 13 ++++----
 .../Inventory/HGInventoryBroker.cs                 |  3 +-
 .../World/Permissions/PermissionsModule.cs         |  9 ++++--
 OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 35 ++++++++++++++--------
 .../Framework/Scenes/Scene.PacketHandlers.cs       |  3 +-
 8 files changed, 46 insertions(+), 30 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 06bea3d..16ce9e0 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -6633,9 +6633,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                             }
                             else // Agent
                             {
-                                //InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID);
                                 IInventoryService invService = m_scene.RequestModuleInterface<IInventoryService>();
-                                InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(itemID));
+                                InventoryItemBase assetRequestItem = new InventoryItemBase(itemID, AgentId);
+                                assetRequestItem = invService.GetItem(assetRequestItem);
                                 if (assetRequestItem == null)
                                 {
                                     assetRequestItem = ((Scene)m_scene).CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 582beee..35c59aa 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -130,7 +130,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                     }
                     else
                     {
-                        InventoryItemBase baseItem = invService.GetItem(new InventoryItemBase(appearance.Wearables[i].ItemID));
+                        InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i].ItemID, userID);
+                        baseItem = invService.GetItem(baseItem);
 
                         if (baseItem != null)
                         {
diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
index a68db1b..ff12361 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
@@ -65,7 +65,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures
         {
             IInventoryService invService = m_scene.InventoryService;
 
-            InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId));
+            InventoryItemBase item = new InventoryItemBase(gestureId, client.AgentId);
+            item = invService.GetItem(item);
             if (item != null)
             {
                 item.Flags = 1;
@@ -80,7 +81,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures
         {
             IInventoryService invService = m_scene.InventoryService;
 
-            InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId));
+            InventoryItemBase item = new InventoryItemBase(gestureId, client.AgentId);
+            item = invService.GetItem(item);
             if (item != null)
             {
                 item.Flags = 0;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 5315c11..3a65336 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -257,8 +257,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
                     invService.GetFolderForType(client.AgentId, AssetType.TrashFolder);
                 
                 UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
-                    
-                InventoryItemBase item = invService.GetItem(new InventoryItemBase(inventoryEntityID));
+
+                InventoryItemBase item = new InventoryItemBase(inventoryEntityID, client.AgentId);
+                item = invService.GetItem(item);
                 InventoryFolderBase folder = null;
                 
                 if (item != null && trashFolder != null)
@@ -271,7 +272,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
                 }
                 else
                 {
-                    folder = invService.GetFolder(new InventoryFolderBase(inventoryEntityID));
+                    folder = new InventoryFolderBase(inventoryEntityID, client.AgentId);
+                    folder = invService.GetFolder(folder);
                     
                     if (folder != null & trashFolder != null)
                     {
@@ -451,10 +453,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
             else
             {
                 UUID itemID = new UUID(msg.binaryBucket, 1);
-                InventoryItemBase item = new InventoryItemBase();
-
-                item.ID = itemID;
-                item.Owner = user.ControllingClient.AgentId;
+                InventoryItemBase item = new InventoryItemBase(itemID, user.ControllingClient.AgentId);
 
                 // Fetch from service
                 //
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index dd451ef..492598e 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -483,12 +483,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI);
             string uri = m_LocalGridInventoryURI.TrimEnd('/');
 
-            m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, comparing {0} to {1}.", userInventoryServerURI, uri);
-
             if ((userInventoryServerURI == uri) || (userInventoryServerURI == ""))
             {
                 return true;
             }
+            m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user is foreign({0} - {1})", userInventoryServerURI, uri);
             return false;
         }
 
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 9c71b41..f360577 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -966,7 +966,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
             if (objectID == UUID.Zero) // User inventory
             {
                 IInventoryService invService = m_scene.InventoryService;
-                InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(notecard));
+                InventoryItemBase assetRequestItem = new InventoryItemBase(notecard, user);
+                assetRequestItem = invService.GetItem(assetRequestItem);
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard);
@@ -1385,7 +1386,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
             if (objectID == UUID.Zero) // User inventory
             {
                 IInventoryService invService = m_scene.InventoryService;
-                InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(script));
+                InventoryItemBase assetRequestItem = new InventoryItemBase(script, user);
+                assetRequestItem = invService.GetItem(assetRequestItem);
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(script);
@@ -1479,7 +1481,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
             if (objectID == UUID.Zero) // User inventory
             {
                 IInventoryService invService = m_scene.InventoryService;
-                InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(notecard));
+                InventoryItemBase assetRequestItem = new InventoryItemBase(notecard, user);
+                assetRequestItem = invService.GetItem(assetRequestItem);
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 46777e1..48c7f4e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -140,7 +140,8 @@ namespace OpenSim.Region.Framework.Scenes
         /// <returns></returns>
         public virtual UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data)
         {
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+            item = InventoryService.GetItem(item);
 
             if (item != null)
             {
@@ -315,7 +316,8 @@ namespace OpenSim.Region.Framework.Scenes
         public void UpdateInventoryItemAsset(IClientAPI remoteClient, UUID transactionID,
                                              UUID itemID, InventoryItemBase itemUpd)
         {
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+            item = InventoryService.GetItem(item);
 
             if (item != null)
             {
@@ -408,7 +410,8 @@ namespace OpenSim.Region.Framework.Scenes
         {
             Console.WriteLine("Scene.Inventory.cs: GiveInventoryItem");
 
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemId));
+            InventoryItemBase item = new InventoryItemBase(itemId, senderId);
+            item = InventoryService.GetItem(item);
 
             if ((item != null) && (item.Owner == senderId))
             {
@@ -558,7 +561,8 @@ namespace OpenSim.Region.Framework.Scenes
 
             if (item == null)
             {
-                item = InventoryService.GetItem(new InventoryItemBase(oldItemID));
+                item = new InventoryItemBase(oldItemID, remoteClient.AgentId);
+                item = InventoryService.GetItem(item);
 
                 if (item == null)
                 {
@@ -636,7 +640,8 @@ namespace OpenSim.Region.Framework.Scenes
             m_log.DebugFormat(
                 "[AGENT INVENTORY]: Moving item {0} to {1} for {2}", itemID, folderID, remoteClient.AgentId);
 
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+            item = InventoryService.GetItem(item);
 
             if (item != null)
             {
@@ -1224,7 +1229,8 @@ namespace OpenSim.Region.Framework.Scenes
                     UUID copyID = UUID.Random();
                     if (itemID != UUID.Zero)
                     {
-                        InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+                        InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+                        item = InventoryService.GetItem(item);
 
                         // Try library
                         if (null == item)
@@ -1287,7 +1293,8 @@ namespace OpenSim.Region.Framework.Scenes
 
             if (itemID != UUID.Zero)  // transferred from an avatar inventory to the prim's inventory
             {
-                InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+                InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+                item = InventoryService.GetItem(item);
 
                 // Try library
                 // XXX clumsy, possibly should be one call
@@ -1672,7 +1679,7 @@ namespace OpenSim.Region.Framework.Scenes
 
             if (DeRezAction.SaveToExistingUserInventoryItem == action)
             {
-                item = new InventoryItemBase(objectGroup.RootPart.FromUserInventoryItemID);
+                item = new InventoryItemBase(objectGroup.RootPart.FromUserInventoryItemID, userID);
                 item = InventoryService.GetItem(item);
 
                 //item = userInfo.RootFolder.FindItem(
@@ -1834,7 +1841,8 @@ namespace OpenSim.Region.Framework.Scenes
 
                 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(objectGroup);
 
-                InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+                InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+                item = InventoryService.GetItem(item);
 
                 if (item != null)
                 {
@@ -1984,7 +1992,8 @@ namespace OpenSim.Region.Framework.Scenes
                       BypassRayCast, bRayEndIsIntersection,true,scale, false);
 
             // Rez object
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+            item = InventoryService.GetItem(item);
 
             if (item != null)
             {
@@ -2309,7 +2318,8 @@ namespace OpenSim.Region.Framework.Scenes
             ScenePresence presence;
             if (TryGetAvatar(remoteClient.AgentId, out presence))
             {
-                InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID, remoteClient.AgentId));
+                InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+                item = InventoryService.GetItem(item);
 
                 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
                 IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
@@ -2360,7 +2370,8 @@ namespace OpenSim.Region.Framework.Scenes
             if (TryGetAvatar(remoteClient.AgentId, out presence))
             {
                 // XXYY!!
-                InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+                InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+                item = InventoryService.GetItem(item);
                 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
                 IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
                 if (ava != null)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index fde922f..1bbca49 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -404,7 +404,8 @@ namespace OpenSim.Region.Framework.Scenes
                 return;
             }
             
-            InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID));
+            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
+            item = InventoryService.GetItem(item);
             
             if (item != null)
             {
-- 
cgit v1.1


From e5f33e75055a8f83cf4e11a6120774cb90dbc3be Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 18 Aug 2009 22:36:03 -0700
Subject: GetFolderItems implemented. It's not being called, but it might.

---
 .../ServiceConnectorsOut/Inventory/HGInventoryBroker.cs       | 11 +++++++++--
 .../Inventory/RemoteInventoryServiceConnector.cs              |  3 ++-
 2 files changed, 11 insertions(+), 3 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 492598e..3649097 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -290,7 +290,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
 
         public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
         {
-            return new List<InventoryItemBase>();
+            if (IsLocalGridUser(userID))
+                return m_GridService.GetFolderItems(userID, folderID);
+            else
+            {
+                UUID sessionID = GetSessionID(userID);
+                string uri = GetUserInventoryURI(userID) + "/" + userID;
+                return m_HGService.GetFolderItems(uri, folderID, sessionID);
+            }
         }
 
         public override bool AddFolder(InventoryFolderBase folder)
@@ -487,7 +494,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             {
                 return true;
             }
-            m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user is foreign({0} - {1})", userInventoryServerURI, uri);
+            m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user {0} is foreign({1} - {2})", userID, userInventoryServerURI, uri);
             return false;
         }
 
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
index bef716b..522f680 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -212,7 +212,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
 
         public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
         {
-            return new List<InventoryItemBase>();
+            UUID sessionID = GetSessionID(userID);
+            return m_RemoteConnector.GetFolderItems(userID.ToString(), folderID, sessionID);
         }
 
         public override bool AddFolder(InventoryFolderBase folder)
-- 
cgit v1.1


From c5af39239f7f2a1725d9c08bea80522de8835e0f Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 19 Aug 2009 00:13:51 -0700
Subject: A better purge of trash folder.

---
 .../Region/ClientStack/LindenUDP/LLClientView.cs   | 25 ++++++++++-------
 .../Inventory/Transfer/InventoryTransferModule.cs  |  4 ++-
 .../Inventory/BaseInventoryConnector.cs            |  2 +-
 .../Inventory/HGInventoryBroker.cs                 | 18 ++++++++-----
 .../Inventory/LocalInventoryServiceConnector.cs    |  4 +--
 .../Inventory/RemoteInventoryServiceConnector.cs   | 10 ++++---
 OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 31 +++++++++++++++++-----
 .../Framework/Scenes/Scene.PacketHandlers.cs       |  2 +-
 8 files changed, 63 insertions(+), 33 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 16ce9e0..e2fb659 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -7053,14 +7053,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                     if (OnRemoveInventoryItem != null)
                     {
                         handlerRemoveInventoryItem = null;
+                        List<UUID> uuids = new List<UUID>();
                         foreach (RemoveInventoryItemPacket.InventoryDataBlock datablock in removeItem.InventoryData)
                         {
-                            handlerRemoveInventoryItem = OnRemoveInventoryItem;
-                            if (handlerRemoveInventoryItem != null)
-                            {
-                                handlerRemoveInventoryItem(this, datablock.ItemID);
-                            }
+                            uuids.Add(datablock.ItemID);
                         }
+                        handlerRemoveInventoryItem = OnRemoveInventoryItem;
+                        if (handlerRemoveInventoryItem != null)
+                        {
+                            handlerRemoveInventoryItem(this, uuids);
+                        }
+
                     }
                     break;
                 case PacketType.RemoveInventoryFolder:
@@ -7116,13 +7119,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                     if (OnRemoveInventoryItem != null)
                     {
                         handlerRemoveInventoryItem = null;
+                        List<UUID> uuids = new List<UUID>();
                         foreach (RemoveInventoryObjectsPacket.ItemDataBlock datablock in removeObject.ItemData)
                         {
-                            handlerRemoveInventoryItem = OnRemoveInventoryItem;
-                            if (handlerRemoveInventoryItem != null)
-                            {
-                                handlerRemoveInventoryItem(this, datablock.ItemID);
-                            }
+                            uuids.Add(datablock.ItemID);
+                        }
+                        handlerRemoveInventoryItem = OnRemoveInventoryItem;
+                        if (handlerRemoveInventoryItem != null)
+                        {
+                            handlerRemoveInventoryItem(this, uuids);
                         }
                     }
                     break;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 3a65336..5afbf68 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -267,7 +267,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
                     item.Folder = trashFolder.ID;
 
                     // Diva comment: can't we just update this item???
-                    invService.DeleteItem(item);
+                    List<UUID> uuids = new List<UUID>();
+                    uuids.Add(item.ID);
+                    invService.DeleteItems(item.Owner, uuids);
                     scene.AddInventoryItem(client, item);
                 }
                 else
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
index ef5ffe1..d1ae3e4 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
@@ -186,7 +186,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
         /// </summary>
         /// <param name="item"></param>
         /// <returns>true if the item was successfully deleted</returns>
-        public abstract bool DeleteItem(InventoryItemBase item);
+        public abstract bool DeleteItems(UUID ownerID, List<UUID> itemIDs);
 
         public abstract InventoryItemBase GetItem(InventoryItemBase item);
 
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 3649097..6a1f2d5 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -393,18 +393,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             }
         }
 
-        public override bool DeleteItem(InventoryItemBase item)
+        public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
         {
-            if (item == null)
+            m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Delete {0} items for user {1}", itemIDs.Count, ownerID);
+
+            if (itemIDs == null)
                 return false;
+            if (itemIDs.Count == 0)
+                return true;
 
-            if (IsLocalGridUser(item.Owner))
-                return m_GridService.DeleteItem(item);
+            if (IsLocalGridUser(ownerID))
+                return m_GridService.DeleteItems(ownerID, itemIDs);
             else
             {
-                UUID sessionID = GetSessionID(item.Owner);
-                string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString();
-                return m_HGService.DeleteItem(uri, item, sessionID);
+                UUID sessionID = GetSessionID(ownerID);
+                string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString();
+                return m_HGService.DeleteItems(uri, itemIDs, sessionID);
             }
         }
 
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index 2fbc5fe..b2640af 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -294,9 +294,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
         /// </summary>
         /// <param name="item"></param>
         /// <returns>true if the item was successfully deleted</returns>
-        public override bool DeleteItem(InventoryItemBase item)
+        public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
         {
-            return m_InventoryService.DeleteItem(item);
+            return m_InventoryService.DeleteItems(ownerID, itemIDs);
         }
 
         public override InventoryItemBase GetItem(InventoryItemBase item)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
index 522f680..012f0e3 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -273,13 +273,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID);
         }
 
-        public override bool DeleteItem(InventoryItemBase item)
+        public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
         {
-            if (item == null)
+            if (itemIDs == null)
                 return false;
+            if (itemIDs.Count == 0)
+                return true;
 
-            UUID sessionID = GetSessionID(item.Owner);
-            return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID);
+            UUID sessionID = GetSessionID(ownerID);
+            return m_RemoteConnector.DeleteItems(ownerID.ToString(), itemIDs, sessionID);
         }
 
         public override InventoryItemBase GetItem(InventoryItemBase item)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 48c7f4e..5e2eb73 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -477,7 +477,11 @@ namespace OpenSim.Region.Framework.Scenes
                 if (!Permissions.BypassPermissions())
                 {
                     if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
-                        InventoryService.DeleteItem(new InventoryItemBase(itemId));
+                    {
+                        List<UUID> items = new List<UUID>();
+                        items.Add(itemId);
+                        InventoryService.DeleteItems(senderId, items);
+                    }
                 }
 
                 return itemCopy;
@@ -652,7 +656,9 @@ namespace OpenSim.Region.Framework.Scenes
                 item.Folder = folderID;
 
                 // Diva comment: can't we just update?
-                InventoryService.DeleteItem(item);
+                List<UUID> uuids = new List<UUID>();
+                uuids.Add(item.ID);
+                InventoryService.DeleteItems(item.Owner, uuids);
 
                 AddInventoryItem(remoteClient, item);
             }
@@ -799,9 +805,10 @@ namespace OpenSim.Region.Framework.Scenes
         /// </summary>
         /// <param name="remoteClient"></param>
         /// <param name="itemID"></param>
-        private void RemoveInventoryItem(IClientAPI remoteClient, UUID itemID)
+        private void RemoveInventoryItem(IClientAPI remoteClient, List<UUID> itemIDs)
         {
-            InventoryService.DeleteItem(new InventoryItemBase(itemID));
+            //m_log.Debug("[SCENE INVENTORY]: user " + remoteClient.AgentId);
+            InventoryService.DeleteItems(remoteClient.AgentId, itemIDs);
         }
 
         /// <summary>
@@ -1248,7 +1255,11 @@ namespace OpenSim.Region.Framework.Scenes
                             if (!Permissions.BypassPermissions())
                             {
                                 if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
-                                    RemoveInventoryItem(remoteClient, itemID);
+                                {
+                                    List<UUID> uuids = new List<UUID>();
+                                    uuids.Add(itemID);
+                                    RemoveInventoryItem(remoteClient, uuids);
+                                }
                             }
                         }
                         else
@@ -2144,7 +2155,11 @@ namespace OpenSim.Region.Framework.Scenes
                             // copy ones will be lost, so avoid it
                             //
                             if (!attachment)
-                                InventoryService.DeleteItem(item);
+                            {
+                                List<UUID> uuids = new List<UUID>();
+                                uuids.Add(item.ID);
+                                InventoryService.DeleteItems(item.Owner, uuids);
+                            }
                         }
                     }
 
@@ -2404,7 +2419,9 @@ namespace OpenSim.Region.Framework.Scenes
                 }
                 part.ParentGroup.DetachToGround();
 
-                InventoryService.DeleteItem(new InventoryItemBase(inventoryID));
+                List<UUID> uuids = new List<UUID>();
+                uuids.Add(inventoryID);
+                InventoryService.DeleteItems(remoteClient.AgentId, uuids);
                 remoteClient.SendRemoveInventoryItem(inventoryID);
             }
             SendAttachEvent(part.ParentGroup.LocalId, itemID, UUID.Zero);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 1bbca49..a2414e5 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -560,7 +560,7 @@ namespace OpenSim.Region.Framework.Scenes
 
         public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID)
         {
-            InventoryFolderBase folder = new InventoryFolderBase(folderID);
+            InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId);
 
             if (InventoryService.PurgeFolder(folder))
                 m_log.DebugFormat("[AGENT INVENTORY]: folder {0} purged successfully", folderID);
-- 
cgit v1.1


From 4382f28efc6ffe70e3c6f6e8cd7e7c729d1f12af Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 19 Aug 2009 00:33:02 -0700
Subject: Async purge so that the client thread doesn't wait.

---
 .../Inventory/RemoteInventoryServiceConnector.cs   | 10 ++++-----
 .../Framework/Scenes/Scene.PacketHandlers.cs       | 24 ++++++++++++++++++++--
 2 files changed, 27 insertions(+), 7 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
index 012f0e3..081d0f7 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -323,14 +323,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
 
         private UUID GetSessionID(UUID userID)
         {
-            if (m_Scene == null)
-            {
-                m_log.Debug("[INVENTORY CONNECTOR]: OOPS! scene is null");
-            }
+            //if (m_Scene == null)
+            //{
+            //    m_log.Debug("[INVENTORY CONNECTOR]: OOPS! scene is null");
+            //}
 
             if (m_UserProfileService == null)
             {
-                m_log.Debug("[INVENTORY CONNECTOR]: OOPS! UserProfileCacheService is null");
+                //m_log.Debug("[INVENTORY CONNECTOR]: OOPS! UserProfileCacheService is null");
                 return UUID.Zero;
             }
 
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index a2414e5..77b980c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -25,6 +25,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+using System;
 using System.Collections.Generic;
 using System.Threading;
 using OpenMetaverse;
@@ -558,15 +559,34 @@ namespace OpenSim.Region.Framework.Scenes
         /// <param name="remoteClient"></param>
         /// <param name="folderID"></param>
 
+        delegate void PurgeFolderDelegate(UUID userID, UUID folder);
+
         public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID)
         {
-            InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId);
+            PurgeFolderDelegate d = PurgeFolderAsync;
+            try
+            {
+                d.BeginInvoke(remoteClient.AgentId, folderID, PurgeFolderCompleted, d);
+            }
+            catch (Exception e)
+            {
+                m_log.WarnFormat("[AGENT INVENTORY]: Exception on purge folder for user {0}: {1}", remoteClient.AgentId, e.Message);
+            }
+        }        
+
+
+        private void PurgeFolderAsync(UUID userID, UUID folderID)
+        {
+            InventoryFolderBase folder = new InventoryFolderBase(folderID, userID);
 
             if (InventoryService.PurgeFolder(folder))
                 m_log.DebugFormat("[AGENT INVENTORY]: folder {0} purged successfully", folderID);
             else
                 m_log.WarnFormat("[AGENT INVENTORY]: could not purge folder {0}", folderID);
-        }        
+        }
 
+        private void PurgeFolderCompleted(IAsyncResult iar)
+        {
+        }
     }
 }
-- 
cgit v1.1


From d519f1885f587409592cf92bc0f4ba8533a1866f Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 19 Aug 2009 10:56:08 -0700
Subject: Added MoveItems, which is most useful upon viewer-delete inventory
 operation. Moving a batch of items is a 1-time operation. Made it async
 anyway, so that the viewer doesn't wait in case the DB layer is dumb (which
 is the case currently).

---
 .../Region/ClientStack/LindenUDP/LLClientView.cs   | 19 ++++++++-----
 .../Inventory/BaseInventoryConnector.cs            |  2 ++
 .../Inventory/HGInventoryBroker.cs                 | 17 ++++++++++++
 .../Inventory/LocalInventoryServiceConnector.cs    |  6 +++++
 .../Inventory/RemoteInventoryServiceConnector.cs   | 10 +++++++
 OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 31 +++-------------------
 6 files changed, 52 insertions(+), 33 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index e2fb659..6969a3d 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -7027,14 +7027,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                     if (OnMoveInventoryItem != null)
                     {
                         handlerMoveInventoryItem = null;
+                        InventoryItemBase itm = null;
+                        List<InventoryItemBase> items = new List<InventoryItemBase>();
                         foreach (MoveInventoryItemPacket.InventoryDataBlock datablock in moveitem.InventoryData)
                         {
-                            handlerMoveInventoryItem = OnMoveInventoryItem;
-                            if (handlerMoveInventoryItem != null)
-                            {
-                                handlerMoveInventoryItem(this, datablock.FolderID, datablock.ItemID, datablock.Length,
-                                                         Util.FieldToString(datablock.NewName));
-                            }
+                            itm = new InventoryItemBase(datablock.ItemID, AgentId);
+                            itm.Folder = datablock.FolderID;
+                            itm.Name = Util.FieldToString(datablock.NewName);
+                            // weird, comes out as empty string
+                            //m_log.DebugFormat("[XXX] new name: {0}", itm.Name);
+                            items.Add(itm);
+                        }
+                        handlerMoveInventoryItem = OnMoveInventoryItem;
+                        if (handlerMoveInventoryItem != null)
+                        {
+                            handlerMoveInventoryItem(this, items);
                         }
                     }
                     break;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
index d1ae3e4..d4cb616 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
@@ -181,6 +181,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
         /// <returns>true if the item was successfully updated</returns>
         public abstract bool UpdateItem(InventoryItemBase item);
 
+        public abstract bool MoveItems(UUID ownerID, List<InventoryItemBase> items);
+
         /// <summary>
         /// Delete an item from the user's inventory
         /// </summary>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 6a1f2d5..787c6c8 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -393,6 +393,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             }
         }
 
+        public override bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
+        {
+            if (items == null)
+                return false;
+            if (items.Count == 0)
+                return true;
+
+            if (IsLocalGridUser(ownerID))
+                return m_GridService.MoveItems(ownerID, items);
+            else
+            {
+                UUID sessionID = GetSessionID(ownerID);
+                string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString();
+                return m_HGService.MoveItems(uri, items, sessionID);
+            }
+        }
+
         public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
         {
             m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Delete {0} items for user {1}", itemIDs.Count, ownerID);
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index b2640af..562c5dd 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -289,6 +289,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             return m_InventoryService.UpdateItem(item);
         }
 
+
+        public override bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
+        {
+            return m_InventoryService.MoveItems(ownerID, items);
+        }
+
         /// <summary>
         /// Delete an item from the user's inventory
         /// </summary>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
index 081d0f7..201442c 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -273,6 +273,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
             return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID);
         }
 
+        public override bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
+        {
+            if (items == null)
+                return false;
+
+            UUID sessionID = GetSessionID(ownerID);
+            return m_RemoteConnector.MoveItems(ownerID.ToString(), items, sessionID);
+        }
+
+
         public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
         {
             if (itemIDs == null)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 5e2eb73..a119efc 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -638,36 +638,13 @@ namespace OpenSim.Region.Framework.Scenes
         /// <param name="itemID"></param>
         /// <param name="length"></param>
         /// <param name="newName"></param>
-        public void MoveInventoryItem(IClientAPI remoteClient, UUID folderID, UUID itemID, int length,
-                                      string newName)
+        public void MoveInventoryItem(IClientAPI remoteClient, List<InventoryItemBase> items)
         {
             m_log.DebugFormat(
-                "[AGENT INVENTORY]: Moving item {0} to {1} for {2}", itemID, folderID, remoteClient.AgentId);
+                "[AGENT INVENTORY]: Moving {0} items for user {1}", items.Count, remoteClient.AgentId);
 
-            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
-            item = InventoryService.GetItem(item);
-
-            if (item != null)
-            {
-                if (newName != String.Empty)
-                {
-                    item.Name = newName;
-                }
-                item.Folder = folderID;
-
-                // Diva comment: can't we just update?
-                List<UUID> uuids = new List<UUID>();
-                uuids.Add(item.ID);
-                InventoryService.DeleteItems(item.Owner, uuids);
-
-                AddInventoryItem(remoteClient, item);
-            }
-            else
-            {
-                m_log.Warn("[AGENT INVENTORY]: Failed to find item " + itemID.ToString());
-
-                return;
-            }
+            if (!InventoryService.MoveItems(remoteClient.AgentId, items))
+                m_log.Warn("[AGENT INVENTORY]: Failed to move items for user " + remoteClient.AgentId);
         }
 
         /// <summary>
-- 
cgit v1.1