aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorMelanie Thielker2016-07-04 03:35:48 +0100
committerMelanie Thielker2016-07-04 03:35:48 +0100
commitea8f3c83bf96453e8223d918933d5708fa49a3cc (patch)
tree288972a5d6f112426da2b5ab109fe18ba5aedc2e /OpenSim
parentincrease xmlrpc timeout in xmlrpcgroups, disable its cache until its entries ... (diff)
downloadopensim-SC_OLD-ea8f3c83bf96453e8223d918933d5708fa49a3cc.zip
opensim-SC_OLD-ea8f3c83bf96453e8223d918933d5708fa49a3cc.tar.gz
opensim-SC_OLD-ea8f3c83bf96453e8223d918933d5708fa49a3cc.tar.bz2
opensim-SC_OLD-ea8f3c83bf96453e8223d918933d5708fa49a3cc.tar.xz
Finally remove the requirement for an InventoryItem/FolderBase object to
be passed into inventory queries. This makes the API more homogenous and also will more clearly show coding errors related to HG inventory where the .Owner field has a meaning for a query but wasn't always set.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Addons/Groups/GroupsModule.cs3
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs6
-rw-r--r--OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs19
-rw-r--r--OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs15
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs6
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs12
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs6
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs42
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs19
-rw-r--r--OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs11
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs23
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs8
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs14
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs9
-rw-r--r--OpenSim/Region/Framework/Scenes/AsyncInventorySender.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs27
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs6
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs3
-rw-r--r--OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs18
-rw-r--r--OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs12
-rw-r--r--OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs14
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs29
-rw-r--r--OpenSim/Services/HypergridService/HGInventoryService.cs4
-rw-r--r--OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs8
-rw-r--r--OpenSim/Services/Interfaces/IInventoryService.cs4
-rw-r--r--OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs10
-rw-r--r--OpenSim/Services/InventoryService/XInventoryService.cs24
-rw-r--r--OpenSim/Tests/Robust/Clients/Inventory/InventoryClient.cs3
33 files changed, 147 insertions, 228 deletions
diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs
index 13b7123..ccd4da6 100644
--- a/OpenSim/Addons/Groups/GroupsModule.cs
+++ b/OpenSim/Addons/Groups/GroupsModule.cs
@@ -445,8 +445,7 @@ namespace OpenSim.Groups
445 445
446 UUID itemID = binBucketMap["item_id"].AsUUID(); 446 UUID itemID = binBucketMap["item_id"].AsUUID();
447 UUID ownerID = binBucketMap["owner_id"].AsUUID(); 447 UUID ownerID = binBucketMap["owner_id"].AsUUID();
448 item = new InventoryItemBase(itemID, ownerID); 448 item = m_sceneList[0].InventoryService.GetItem(ownerID, itemID);
449 item = m_sceneList[0].InventoryService.GetItem(item);
450 } 449 }
451 else 450 else
452 m_log.DebugFormat("[Groups]: Received OSD with unexpected type: {0}", binBucketOSD.GetType()); 451 m_log.DebugFormat("[Groups]: Received OSD with unexpected type: {0}", binBucketOSD.GetType());
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index bae1582..1a7c698 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -2836,8 +2836,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2836 if (wearable[0].ItemID != UUID.Zero) 2836 if (wearable[0].ItemID != UUID.Zero)
2837 { 2837 {
2838 // Get inventory item and copy it 2838 // Get inventory item and copy it
2839 InventoryItemBase item = new InventoryItemBase(wearable[0].ItemID, source); 2839 InventoryItemBase item = inventoryService.GetItem(source, wearable[0].ItemID);
2840 item = inventoryService.GetItem(item);
2841 2840
2842 if (item != null) 2841 if (item != null)
2843 { 2842 {
@@ -2890,8 +2889,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2890 if (itemID != UUID.Zero) 2889 if (itemID != UUID.Zero)
2891 { 2890 {
2892 // Get inventory item and copy it 2891 // Get inventory item and copy it
2893 InventoryItemBase item = new InventoryItemBase(itemID, source); 2892 InventoryItemBase item = inventoryService.GetItem(source, itemID);
2894 item = inventoryService.GetItem(item);
2895 2893
2896 if (item != null) 2894 if (item != null)
2897 { 2895 {
diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs
index 4da6c3d..e3a9a22 100644
--- a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs
+++ b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs
@@ -403,10 +403,7 @@ namespace OpenSim.Capabilities.Handlers
403 return contents; 403 return contents;
404 } 404 }
405 contents = fetchedContents; 405 contents = fetchedContents;
406 InventoryFolderBase containingFolder = new InventoryFolderBase(); 406 InventoryFolderBase containingFolder = m_InventoryService.GetFolder(agentID, folderID);
407 containingFolder.ID = folderID;
408 containingFolder.Owner = agentID;
409 containingFolder = m_InventoryService.GetFolder(containingFolder);
410 407
411 if (containingFolder != null) 408 if (containingFolder != null)
412 { 409 {
@@ -429,7 +426,7 @@ namespace OpenSim.Capabilities.Handlers
429 { 426 {
430 if (item.AssetType == (int)AssetType.Link) 427 if (item.AssetType == (int)AssetType.Link)
431 { 428 {
432 InventoryItemBase linkedItem = m_InventoryService.GetItem(new InventoryItemBase(item.AssetID)); 429 InventoryItemBase linkedItem = m_InventoryService.GetItem(agentID, item.AssetID);
433 430
434 // Take care of genuinely broken links where the target doesn't exist 431 // Take care of genuinely broken links where the target doesn't exist
435 // HACK: Also, don't follow up links that just point to other links. In theory this is legitimate, 432 // HACK: Also, don't follow up links that just point to other links. In theory this is legitimate,
@@ -659,10 +656,7 @@ from docs seems this was never a spec
659 // Must fetch it individually 656 // Must fetch it individually
660 else if (contents.FolderID == UUID.Zero) 657 else if (contents.FolderID == UUID.Zero)
661 { 658 {
662 InventoryFolderBase containingFolder = new InventoryFolderBase(); 659 InventoryFolderBase containingFolder = m_InventoryService.GetFolder(freq.owner_id, freq.folder_id);
663 containingFolder.ID = freq.folder_id;
664 containingFolder.Owner = freq.owner_id;
665 containingFolder = m_InventoryService.GetFolder(containingFolder);
666 660
667 if (containingFolder != null) 661 if (containingFolder != null)
668 { 662 {
@@ -759,12 +753,9 @@ from docs seems this was never a spec
759 m_log.WarnFormat("[WEB FETCH INV DESC HANDLER]: GetMultipleItems failed. Falling back to fetching inventory items one by one."); 753 m_log.WarnFormat("[WEB FETCH INV DESC HANDLER]: GetMultipleItems failed. Falling back to fetching inventory items one by one.");
760 linked = new InventoryItemBase[itemIDs.Count]; 754 linked = new InventoryItemBase[itemIDs.Count];
761 int i = 0; 755 int i = 0;
762 InventoryItemBase item = new InventoryItemBase();
763 item.Owner = freq.owner_id;
764 foreach (UUID id in itemIDs) 756 foreach (UUID id in itemIDs)
765 { 757 {
766 item.ID = id; 758 linked[i++] = m_InventoryService.GetItem(freq.owner_id, id);
767 linked[i++] = m_InventoryService.GetItem(item);
768 } 759 }
769 } 760 }
770 761
@@ -850,4 +841,4 @@ from docs seems this was never a spec
850 public InventoryCollection Collection; 841 public InventoryCollection Collection;
851 public int Descendents; 842 public int Descendents;
852 } 843 }
853} \ No newline at end of file 844}
diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs
index 1753f60..8200a96 100644
--- a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs
+++ b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs
@@ -81,24 +81,15 @@ namespace OpenSim.Capabilities.Handlers
81 // OMG!!! One by one!!! This is fallback code, in case the backend isn't updated 81 // OMG!!! One by one!!! This is fallback code, in case the backend isn't updated
82 m_log.WarnFormat("[FETCH INVENTORY HANDLER]: GetMultipleItems failed. Falling back to fetching inventory items one by one."); 82 m_log.WarnFormat("[FETCH INVENTORY HANDLER]: GetMultipleItems failed. Falling back to fetching inventory items one by one.");
83 items = new InventoryItemBase[itemsRequested.Count]; 83 items = new InventoryItemBase[itemsRequested.Count];
84 InventoryItemBase item = new InventoryItemBase();
85 item.Owner = m_agentID;
86 foreach (UUID id in itemIDs) 84 foreach (UUID id in itemIDs)
87 { 85 items[i++] = m_inventoryService.GetItem(m_agentID, id);
88 item.ID = id;
89 items[i++] = m_inventoryService.GetItem(item);
90 }
91 } 86 }
92 } 87 }
93 else 88 else
94 { 89 {
95 items = new InventoryItemBase[itemsRequested.Count]; 90 items = new InventoryItemBase[itemsRequested.Count];
96 InventoryItemBase item = new InventoryItemBase();
97 foreach (UUID id in itemIDs) 91 foreach (UUID id in itemIDs)
98 { 92 items[i++] = m_inventoryService.GetItem(UUID.Zero, id);
99 item.ID = id;
100 items[i++] = m_inventoryService.GetItem(item);
101 }
102 } 93 }
103 94
104 foreach (InventoryItemBase item in items) 95 foreach (InventoryItemBase item in items)
@@ -152,4 +143,4 @@ namespace OpenSim.Capabilities.Handlers
152 return llsdItem; 143 return llsdItem;
153 } 144 }
154 } 145 }
155} \ No newline at end of file 146}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 39ba708..19619c1 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -1386,7 +1386,7 @@ namespace OpenSim.Region.ClientStack.Linden
1386 IClientAPI client = null; 1386 IClientAPI client = null;
1387 1387
1388 m_Scene.TryGetClient(m_HostCapsObj.AgentID, out client); 1388 m_Scene.TryGetClient(m_HostCapsObj.AgentID, out client);
1389 item = m_Scene.InventoryService.GetItem(new InventoryItemBase(itemID)); 1389 item = m_Scene.InventoryService.GetItem(m_HostCapsObj.AgentID, itemID);
1390 if (item != null) 1390 if (item != null)
1391 { 1391 {
1392 string message; 1392 string message;
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 0cc630f..8f03a0a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -898,8 +898,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
898 898
899 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp, scriptedState); 899 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp, scriptedState);
900 900
901 InventoryItemBase item = new InventoryItemBase(grp.FromItemID, sp.UUID); 901 InventoryItemBase item = m_scene.InventoryService.GetItem(sp.UUID, grp.FromItemID);
902 item = m_scene.InventoryService.GetItem(item);
903 902
904 if (item != null) 903 if (item != null)
905 { 904 {
@@ -1223,8 +1222,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
1223 return; 1222 return;
1224 } 1223 }
1225 1224
1226 InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID); 1225 InventoryItemBase item = m_scene.InventoryService.GetItem(sp.UUID, itemID);
1227 item = m_scene.InventoryService.GetItem(item);
1228 if (item == null) 1226 if (item == null)
1229 return; 1227 return;
1230 1228
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
index 10b2ff6..a83342c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
@@ -219,7 +219,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
219// sp.Appearance.GetAttachpoint(attSo.FromItemID), 219// sp.Appearance.GetAttachpoint(attSo.FromItemID),
220// Is.EqualTo((int)AttachmentPoint.Chest)); 220// Is.EqualTo((int)AttachmentPoint.Chest));
221 221
222 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(new InventoryItemBase(attSo.FromItemID)); 222 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(sp.UUID, attSo.FromItemID);
223 Assert.That(attachmentItem, Is.Not.Null); 223 Assert.That(attachmentItem, Is.Not.Null);
224 Assert.That(attachmentItem.Name, Is.EqualTo(attName)); 224 Assert.That(attachmentItem.Name, Is.EqualTo(attName));
225 225
@@ -266,7 +266,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
266// sp.Appearance.GetAttachpoint(attSo.FromItemID), 266// sp.Appearance.GetAttachpoint(attSo.FromItemID),
267// Is.EqualTo((int)AttachmentPoint.LeftHand)); 267// Is.EqualTo((int)AttachmentPoint.LeftHand));
268 268
269 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(new InventoryItemBase(attSo.FromItemID)); 269 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(sp.UUID, attSo.FromItemID);
270 Assert.That(attachmentItem, Is.Not.Null); 270 Assert.That(attachmentItem, Is.Not.Null);
271 Assert.That(attachmentItem.Name, Is.EqualTo(so.Name)); 271 Assert.That(attachmentItem.Name, Is.EqualTo(so.Name));
272 272
@@ -299,7 +299,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
299// sp.Appearance.GetAttachpoint(attSo.FromItemID), 299// sp.Appearance.GetAttachpoint(attSo.FromItemID),
300// Is.EqualTo((int)AttachmentPoint.LeftHand)); 300// Is.EqualTo((int)AttachmentPoint.LeftHand));
301 301
302 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(new InventoryItemBase(attSo.FromItemID)); 302 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(sp.UUID, attSo.FromItemID);
303 Assert.That(attachmentItem, Is.Not.Null); 303 Assert.That(attachmentItem, Is.Not.Null);
304 Assert.That(attachmentItem.Name, Is.EqualTo(so2.Name)); 304 Assert.That(attachmentItem.Name, Is.EqualTo(so2.Name));
305 305
@@ -332,7 +332,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
332// sp.Appearance.GetAttachpoint(attSo.FromItemID), 332// sp.Appearance.GetAttachpoint(attSo.FromItemID),
333// Is.EqualTo((int)AttachmentPoint.LeftHand)); 333// Is.EqualTo((int)AttachmentPoint.LeftHand));
334 334
335 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(new InventoryItemBase(attSo.FromItemID)); 335 InventoryItemBase attachmentItem = scene.InventoryService.GetItem(sp.UUID, attSo.FromItemID);
336 Assert.That(attachmentItem, Is.Not.Null); 336 Assert.That(attachmentItem, Is.Not.Null);
337 Assert.That(attachmentItem.Name, Is.EqualTo(so2.Name)); 337 Assert.That(attachmentItem.Name, Is.EqualTo(so2.Name));
338 338
@@ -600,7 +600,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
600// Assert.That(sp.Appearance.GetAttachments().Count, Is.EqualTo(0)); 600// Assert.That(sp.Appearance.GetAttachments().Count, Is.EqualTo(0));
601 601
602 // Check item status 602 // Check item status
603 Assert.That(scene.InventoryService.GetItem(new InventoryItemBase(attItem.ID)), Is.Null); 603 Assert.That(scene.InventoryService.GetItem(sp.UUID, attItem.ID), Is.Null);
604 604
605 // Check object in scene 605 // Check object in scene
606 SceneObjectGroup soInScene = scene.GetSceneObjectGroup("att"); 606 SceneObjectGroup soInScene = scene.GetSceneObjectGroup("att");
@@ -679,7 +679,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
679 679
680 scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); 680 scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo);
681 681
682 InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem); 682 InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem.Owner, userItem.ID);
683 AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString()); 683 AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString());
684 684
685 // TODO: It would probably be better here to check script state via the saving and retrieval of state 685 // TODO: It would probably be better here to check script state via the saving and retrieval of state
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index c800383..08b276d 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -904,8 +904,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
904 continue; 904 continue;
905 } 905 }
906 906
907 InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i][j].ItemID, userID); 907 InventoryItemBase baseItem = invService.GetItem(userID, appearance.Wearables[i][j].ItemID);
908 baseItem = invService.GetItem(baseItem);
909 908
910 if (baseItem != null) 909 if (baseItem != null)
911 { 910 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
index eb23e83..e5bf919 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
@@ -239,8 +239,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
239 InventoryFolderBase trashFolder = 239 InventoryFolderBase trashFolder =
240 invService.GetFolderForType(client.AgentId, FolderType.Trash); 240 invService.GetFolderForType(client.AgentId, FolderType.Trash);
241 241
242 InventoryItemBase item = new InventoryItemBase(transactionID, client.AgentId); 242 InventoryItemBase item = invService.GetItem(client.AgentId, transactionID);
243 item = invService.GetItem(item);
244 243
245 if (item != null && trashFolder != null) 244 if (item != null && trashFolder != null)
246 { 245 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
index 095c57b..4efcd3b 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
@@ -86,8 +86,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures
86 { 86 {
87 IInventoryService invService = m_scene.InventoryService; 87 IInventoryService invService = m_scene.InventoryService;
88 88
89 InventoryItemBase item = new InventoryItemBase(gestureId, client.AgentId); 89 InventoryItemBase item = invService.GetItem(client.AgentId, gestureId);
90 item = invService.GetItem(item);
91 if (item != null) 90 if (item != null)
92 { 91 {
93 item.Flags |= 1; 92 item.Flags |= 1;
@@ -102,8 +101,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures
102 { 101 {
103 IInventoryService invService = m_scene.InventoryService; 102 IInventoryService invService = m_scene.InventoryService;
104 103
105 InventoryItemBase item = new InventoryItemBase(gestureId, client.AgentId); 104 InventoryItemBase item = invService.GetItem(client.AgentId, gestureId);
106 item = invService.GetItem(item);
107 if (item != null) 105 if (item != null)
108 { 106 {
109 item.Flags &= ~(uint)1; 107 item.Flags &= ~(uint)1;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 085328c..6c2cf0a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -270,8 +270,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
270 // RLV uses this 270 // RLV uses this
271 if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) 271 if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted)
272 { 272 {
273 InventoryFolderBase folder = new InventoryFolderBase(inventoryID, client.AgentId); 273 InventoryFolderBase folder = invService.GetFolder(client.AgentId, inventoryID);
274 folder = invService.GetFolder(folder);
275 274
276 if (folder != null) 275 if (folder != null)
277 { 276 {
@@ -280,8 +279,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
280 UUID destFolderID = new UUID(im.binaryBucket, 0); 279 UUID destFolderID = new UUID(im.binaryBucket, 0);
281 if (destFolderID != UUID.Zero) 280 if (destFolderID != UUID.Zero)
282 { 281 {
283 InventoryFolderBase destFolder = new InventoryFolderBase(destFolderID, client.AgentId); 282 InventoryFolderBase destFolder = invService.GetFolder(client.AgentId, destFolderID);
284 destFolder = invService.GetFolder(destFolder);
285 if (destFolder != null) 283 if (destFolder != null)
286 { 284 {
287 if (folder.ParentID != destFolder.ID) 285 if (folder.ParentID != destFolder.ID)
@@ -339,8 +337,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
339 337
340 UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip 338 UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
341 339
342 InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); 340 InventoryItemBase item = invService.GetItem(client.AgentId, inventoryID);
343 item = invService.GetItem(item);
344 InventoryFolderBase folder = null; 341 InventoryFolderBase folder = null;
345 UUID? previousParentFolderID = null; 342 UUID? previousParentFolderID = null;
346 343
@@ -354,8 +351,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
354 } 351 }
355 else 352 else
356 { 353 {
357 folder = new InventoryFolderBase(inventoryID, client.AgentId); 354 folder = invService.GetFolder(client.AgentId, inventoryID);
358 folder = invService.GetFolder(folder);
359 355
360 if (folder != null) // It's a folder 356 if (folder != null) // It's a folder
361 { 357 {
@@ -368,9 +364,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
368 // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). 364 // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
369 if (previousParentFolderID != null) 365 if (previousParentFolderID != null)
370 { 366 {
371 InventoryFolderBase previousParentFolder 367 InventoryFolderBase previousParentFolder = invService.GetFolder(client.AgentId, (UUID)previousParentFolderID);
372 = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
373 previousParentFolder = invService.GetFolder(previousParentFolder);
374 scene.SendInventoryUpdate(client, previousParentFolder, true, true); 368 scene.SendInventoryUpdate(client, previousParentFolder, true, true);
375 369
376 scene.SendInventoryUpdate(client, destinationFolder, true, true); 370 scene.SendInventoryUpdate(client, destinationFolder, true, true);
@@ -392,8 +386,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
392 386
393 UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip 387 UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
394 388
395 InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); 389 InventoryItemBase item = invService.GetItem(client.AgentId, inventoryID);
396 item = invService.GetItem(item);
397 InventoryFolderBase folder = null; 390 InventoryFolderBase folder = null;
398 UUID? previousParentFolderID = null; 391 UUID? previousParentFolderID = null;
399 392
@@ -410,8 +403,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
410 } 403 }
411 else 404 else
412 { 405 {
413 folder = new InventoryFolderBase(inventoryID, client.AgentId); 406 folder = invService.GetFolder(client.AgentId, inventoryID);
414 folder = invService.GetFolder(folder);
415 407
416 if (folder != null & trashFolder != null) 408 if (folder != null & trashFolder != null)
417 { 409 {
@@ -439,9 +431,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
439 // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). 431 // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
440 else if (previousParentFolderID != null) 432 else if (previousParentFolderID != null)
441 { 433 {
442 InventoryFolderBase previousParentFolder 434 InventoryFolderBase previousParentFolder = invService.GetFolder(client.AgentId, (UUID)previousParentFolderID);
443 = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
444 previousParentFolder = invService.GetFolder(previousParentFolder);
445 scene.SendInventoryUpdate(client, previousParentFolder, true, true); 435 scene.SendInventoryUpdate(client, previousParentFolder, true, true);
446 436
447 scene.SendInventoryUpdate(client, trashFolder, true, true); 437 scene.SendInventoryUpdate(client, trashFolder, true, true);
@@ -500,10 +490,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
500 { 490 {
501 UUID folderID = new UUID(im.binaryBucket, 1); 491 UUID folderID = new UUID(im.binaryBucket, 1);
502 492
503 InventoryFolderBase given =
504 new InventoryFolderBase(folderID, recipientID);
505 InventoryFolderBase folder = 493 InventoryFolderBase folder =
506 scene.InventoryService.GetFolder(given); 494 scene.InventoryService.GetFolder(recipientID, folderID);
507 495
508 if (folder != null) 496 if (folder != null)
509 user.ControllingClient.SendBulkUpdateInventory(folder); 497 user.ControllingClient.SendBulkUpdateInventory(folder);
@@ -512,10 +500,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
512 { 500 {
513 UUID itemID = new UUID(im.binaryBucket, 1); 501 UUID itemID = new UUID(im.binaryBucket, 1);
514 502
515 InventoryItemBase given =
516 new InventoryItemBase(itemID, recipientID);
517 InventoryItemBase item = 503 InventoryItemBase item =
518 scene.InventoryService.GetItem(given); 504 scene.InventoryService.GetItem(recipientID, itemID);
519 505
520 if (item != null) 506 if (item != null)
521 { 507 {
@@ -538,10 +524,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
538 { 524 {
539 UUID folderID = new UUID(im.imSessionID); 525 UUID folderID = new UUID(im.imSessionID);
540 526
541 InventoryFolderBase given =
542 new InventoryFolderBase(folderID, recipientID);
543 InventoryFolderBase folder = 527 InventoryFolderBase folder =
544 scene.InventoryService.GetFolder(given); 528 scene.InventoryService.GetFolder(recipientID, folderID);
545 529
546 if (folder != null) 530 if (folder != null)
547 user.ControllingClient.SendBulkUpdateInventory(folder); 531 user.ControllingClient.SendBulkUpdateInventory(folder);
@@ -550,10 +534,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
550 { 534 {
551 UUID itemID = new UUID(im.imSessionID); 535 UUID itemID = new UUID(im.imSessionID);
552 536
553 InventoryItemBase given =
554 new InventoryItemBase(itemID, recipientID);
555 InventoryItemBase item = 537 InventoryItemBase item =
556 scene.InventoryService.GetItem(given); 538 scene.InventoryService.GetItem(recipientID, itemID);
557 539
558 if (item != null) 540 if (item != null)
559 { 541 {
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index dfc880a..a9aaf12 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -95,8 +95,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
95 95
96 foreach (AvatarAttachment att in a.GetAttachments()) 96 foreach (AvatarAttachment att in a.GetAttachments())
97 { 97 {
98 InventoryItemBase item = new InventoryItemBase(att.ItemID, account.PrincipalID); 98 InventoryItemBase item = Scene.InventoryService.GetItem(account.PrincipalID, att.ItemID);
99 item = Scene.InventoryService.GetItem(item);
100 if (item != null) 99 if (item != null)
101 a.SetAttachment(att.AttachPoint, att.ItemID, item.AssetID); 100 a.SetAttachment(att.AttachPoint, att.ItemID, item.AssetID);
102 else 101 else
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
index 06a8f25..4119f90 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
@@ -314,9 +314,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
314 314
315 //if (fromTaskID.Equals(UUID.Zero)) 315 //if (fromTaskID.Equals(UUID.Zero))
316 //{ 316 //{
317 InventoryItemBase item = new InventoryItemBase(itemID); 317 InventoryItemBase item = m_Scene.InventoryService.GetItem(remoteClient.AgentId, itemID);
318 item.Owner = remoteClient.AgentId;
319 item = m_Scene.InventoryService.GetItem(item);
320 //if (item == null) 318 //if (item == null)
321 //{ // Fetch the item 319 //{ // Fetch the item
322 // item = new InventoryItemBase(); 320 // item = new InventoryItemBase();
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 64233d5..781b9ff 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -184,8 +184,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
184 if (!m_Scene.Permissions.CanCreateUserInventory(invType, remoteClient.AgentId)) 184 if (!m_Scene.Permissions.CanCreateUserInventory(invType, remoteClient.AgentId))
185 return; 185 return;
186 186
187 InventoryFolderBase f = new InventoryFolderBase(folderID, remoteClient.AgentId); 187 InventoryFolderBase folder = m_Scene.InventoryService.GetFolder(remoteClient.AgentId, folderID);
188 InventoryFolderBase folder = m_Scene.InventoryService.GetFolder(f);
189 188
190 if (folder == null && Enum.IsDefined(typeof(FolderType), (sbyte)invType)) 189 if (folder == null && Enum.IsDefined(typeof(FolderType), (sbyte)invType))
191 { 190 {
@@ -260,8 +259,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
260 /// <returns></returns> 259 /// <returns></returns>
261 public virtual UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data) 260 public virtual UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data)
262 { 261 {
263 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 262 InventoryItemBase item = m_Scene.InventoryService.GetItem(remoteClient.AgentId, itemID);
264 item = m_Scene.InventoryService.GetItem(item);
265 263
266 if (item.Owner != remoteClient.AgentId) 264 if (item.Owner != remoteClient.AgentId)
267 return UUID.Zero; 265 return UUID.Zero;
@@ -719,8 +717,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
719 717
720 if (DeRezAction.SaveToExistingUserInventoryItem == action) 718 if (DeRezAction.SaveToExistingUserInventoryItem == action)
721 { 719 {
722 item = new InventoryItemBase(so.RootPart.FromUserInventoryItemID, userID); 720 item = m_Scene.InventoryService.GetItem(userID, so.RootPart.FromUserInventoryItemID);
723 item = m_Scene.InventoryService.GetItem(item);
724 721
725 //item = userInfo.RootFolder.FindItem( 722 //item = userInfo.RootFolder.FindItem(
726 // objectGroup.RootPart.FromUserInventoryItemID); 723 // objectGroup.RootPart.FromUserInventoryItemID);
@@ -792,9 +789,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
792 { 789 {
793 if (so.FromFolderID != UUID.Zero && so.RootPart.OwnerID == remoteClient.AgentId) 790 if (so.FromFolderID != UUID.Zero && so.RootPart.OwnerID == remoteClient.AgentId)
794 { 791 {
795 InventoryFolderBase f = new InventoryFolderBase(so.FromFolderID, userID); 792 folder = m_Scene.InventoryService.GetFolder(userID, so.FromFolderID);
796 if (f != null)
797 folder = m_Scene.InventoryService.GetFolder(f);
798 793
799 if(folder.Type == 14 || folder.Type == 16) 794 if(folder.Type == 14 || folder.Type == 16)
800 { 795 {
@@ -830,8 +825,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
830 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) 825 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
831 { 826 {
832// m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID); 827// m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID);
833 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 828 InventoryItemBase item = m_Scene.InventoryService.GetItem(remoteClient.AgentId, itemID);
834 item = m_Scene.InventoryService.GetItem(item);
835 829
836 if (item == null) 830 if (item == null)
837 { 831 {
@@ -1289,8 +1283,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1289 protected virtual InventoryItemBase GetItem(UUID agentID, UUID itemID) 1283 protected virtual InventoryItemBase GetItem(UUID agentID, UUID itemID)
1290 { 1284 {
1291 IInventoryService invService = m_Scene.RequestModuleInterface<IInventoryService>(); 1285 IInventoryService invService = m_Scene.RequestModuleInterface<IInventoryService>();
1292 InventoryItemBase item = new InventoryItemBase(itemID, agentID); 1286 InventoryItemBase item = invService.GetItem(agentID, itemID);
1293 item = invService.GetItem(item);
1294 1287
1295 if (item != null && item.CreatorData != null && item.CreatorData != string.Empty) 1288 if (item != null && item.CreatorData != null && item.CreatorData != string.Empty)
1296 UserManagementModule.AddUser(item.CreatorIdAsUuid, item.CreatorData); 1289 UserManagementModule.AddUser(item.CreatorIdAsUuid, item.CreatorData);
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
index e1e1838..21e00b2 100644
--- a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
+++ b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
@@ -103,13 +103,8 @@ namespace OpenSim.Region.CoreModules.Framework.Library
103 { 103 {
104 InventoryItemBase[] itemColl = new InventoryItemBase[itemIDs.Length]; 104 InventoryItemBase[] itemColl = new InventoryItemBase[itemIDs.Length];
105 int i = 0; 105 int i = 0;
106 InventoryItemBase item = new InventoryItemBase();
107 item.Owner = principalID;
108 foreach (UUID fid in itemIDs) 106 foreach (UUID fid in itemIDs)
109 { 107 itemColl[i++] = GetItem(principalID, fid);
110 item.ID = fid;
111 itemColl[i++] = GetItem(item);
112 }
113 108
114 return itemColl; 109 return itemColl;
115 } 110 }
@@ -239,14 +234,14 @@ namespace OpenSim.Region.CoreModules.Framework.Library
239 /// </summary> 234 /// </summary>
240 /// <param name="item"></param> 235 /// <param name="item"></param>
241 /// <returns></returns> 236 /// <returns></returns>
242 public InventoryItemBase GetItem(InventoryItemBase item) { return null; } 237 public InventoryItemBase GetItem(UUID principalID, UUID itemID) { return null; }
243 238
244 /// <summary> 239 /// <summary>
245 /// Get a folder, given by its UUID 240 /// Get a folder, given by its UUID
246 /// </summary> 241 /// </summary>
247 /// <param name="folder"></param> 242 /// <param name="folder"></param>
248 /// <returns></returns> 243 /// <returns></returns>
249 public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } 244 public InventoryFolderBase GetFolder(UUID principalID, UUID folderID) { return null; }
250 245
251 /// <summary> 246 /// <summary>
252 /// Does the given user have an inventory structure? 247 /// Does the given user have an inventory structure?
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 48f228a..863560b 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -598,21 +598,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
598 return connector.DeleteItems(ownerID, itemIDs); 598 return connector.DeleteItems(ownerID, itemIDs);
599 } 599 }
600 600
601 public InventoryItemBase GetItem(InventoryItemBase item) 601 public InventoryItemBase GetItem(UUID principalID, UUID itemID)
602 { 602 {
603 if (item == null)
604 return null;
605 //m_log.Debug("[HG INVENTORY CONNECTOR]: GetItem " + item.ID); 603 //m_log.Debug("[HG INVENTORY CONNECTOR]: GetItem " + item.ID);
606 604
607 string invURL = GetInventoryServiceURL(item.Owner); 605 string invURL = GetInventoryServiceURL(principalID);
608 606
609 if (invURL == null) // not there, forward to local inventory connector to resolve 607 if (invURL == null) // not there, forward to local inventory connector to resolve
610 lock (m_Lock) 608 lock (m_Lock)
611 return m_LocalGridInventoryService.GetItem(item); 609 return m_LocalGridInventoryService.GetItem(principalID, itemID);
612 610
613 IInventoryService connector = GetConnector(invURL); 611 IInventoryService connector = GetConnector(invURL);
614 612
615 return connector.GetItem(item); 613 return connector.GetItem(principalID, itemID);
616 } 614 }
617 615
618 public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) 616 public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs)
@@ -632,22 +630,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
632 return connector.GetMultipleItems(userID, itemIDs); 630 return connector.GetMultipleItems(userID, itemIDs);
633 } 631 }
634 632
635 public InventoryFolderBase GetFolder(InventoryFolderBase folder) 633 public InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
636 { 634 {
637 if (folder == null)
638 return null;
639
640 //m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolder " + folder.ID); 635 //m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolder " + folder.ID);
641 636
642 string invURL = GetInventoryServiceURL(folder.Owner); 637 string invURL = GetInventoryServiceURL(principalID);
643 638
644 if (invURL == null) // not there, forward to local inventory connector to resolve 639 if (invURL == null) // not there, forward to local inventory connector to resolve
645 lock (m_Lock) 640 lock (m_Lock)
646 return m_LocalGridInventoryService.GetFolder(folder); 641 return m_LocalGridInventoryService.GetFolder(principalID, folderID);
647 642
648 IInventoryService connector = GetConnector(invURL); 643 IInventoryService connector = GetConnector(invURL);
649 644
650 return connector.GetFolder(folder); 645 return connector.GetFolder(principalID, folderID);
651 } 646 }
652 647
653 public bool HasInventoryForUser(UUID userID) 648 public bool HasInventoryForUser(UUID userID)
@@ -710,4 +705,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
710 return connector; 705 return connector;
711 } 706 }
712 } 707 }
713} \ No newline at end of file 708}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index 20d4e02..0d36725 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -292,13 +292,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
292 return m_InventoryService.DeleteItems(ownerID, itemIDs); 292 return m_InventoryService.DeleteItems(ownerID, itemIDs);
293 } 293 }
294 294
295 public InventoryItemBase GetItem(InventoryItemBase item) 295 public InventoryItemBase GetItem(UUID principalID, UUID itemID)
296 { 296 {
297// m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Requesting inventory item {0}", item.ID); 297// m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Requesting inventory item {0}", item.ID);
298 298
299// UUID requestedItemId = item.ID; 299// UUID requestedItemId = item.ID;
300 300
301 item = m_InventoryService.GetItem(item); 301 InventoryItemBase item = m_InventoryService.GetItem(principalID, itemID);
302 302
303// if (null == item) 303// if (null == item)
304// m_log.ErrorFormat( 304// m_log.ErrorFormat(
@@ -312,9 +312,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
312 return m_InventoryService.GetMultipleItems(userID, itemIDs); 312 return m_InventoryService.GetMultipleItems(userID, itemIDs);
313 } 313 }
314 314
315 public InventoryFolderBase GetFolder(InventoryFolderBase folder) 315 public InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
316 { 316 {
317 return m_InventoryService.GetFolder(folder); 317 return m_InventoryService.GetFolder(principalID, folderID);
318 } 318 }
319 319
320 /// <summary> 320 /// <summary>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
index 978b9d9..62b44b1 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
@@ -292,15 +292,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
292 return m_RemoteConnector.DeleteItems(ownerID, itemIDs); 292 return m_RemoteConnector.DeleteItems(ownerID, itemIDs);
293 } 293 }
294 294
295 public InventoryItemBase GetItem(InventoryItemBase item) 295 public InventoryItemBase GetItem(UUID userID, UUID itemID)
296 { 296 {
297 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); 297 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID);
298 if (item == null)
299 return null;
300 298
301 if (m_RemoteConnector == null) 299 if (m_RemoteConnector == null)
302 m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!"); 300 m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!");
303 return m_RemoteConnector.GetItem(item); 301 return m_RemoteConnector.GetItem(userID, itemID);
304 } 302 }
305 303
306 public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) 304 public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs)
@@ -311,13 +309,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
311 return m_RemoteConnector.GetMultipleItems(userID, itemIDs); 309 return m_RemoteConnector.GetMultipleItems(userID, itemIDs);
312 } 310 }
313 311
314 public InventoryFolderBase GetFolder(InventoryFolderBase folder) 312 public InventoryFolderBase GetFolder(UUID userID, UUID folderID)
315 { 313 {
316 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID); 314 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID);
317 if (folder == null)
318 return null;
319 315
320 return m_RemoteConnector.GetFolder(folder); 316 return m_RemoteConnector.GetFolder(userID, folderID);
321 } 317 }
322 318
323 public bool HasInventoryForUser(UUID userID) 319 public bool HasInventoryForUser(UUID userID)
@@ -337,4 +333,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
337 333
338 #endregion 334 #endregion
339 } 335 }
340} \ No newline at end of file 336}
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index c83454e..8c1a628 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -1100,8 +1100,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1100 if (objectID == UUID.Zero) // User inventory 1100 if (objectID == UUID.Zero) // User inventory
1101 { 1101 {
1102 IInventoryService invService = m_scene.InventoryService; 1102 IInventoryService invService = m_scene.InventoryService;
1103 InventoryItemBase assetRequestItem = new InventoryItemBase(notecard, user); 1103 InventoryItemBase assetRequestItem = invService.GetItem(user, notecard);
1104 assetRequestItem = invService.GetItem(assetRequestItem);
1105 if (assetRequestItem == null && LibraryRootFolder != null) // Library item 1104 if (assetRequestItem == null && LibraryRootFolder != null) // Library item
1106 { 1105 {
1107 assetRequestItem = LibraryRootFolder.FindItem(notecard); 1106 assetRequestItem = LibraryRootFolder.FindItem(notecard);
@@ -1625,8 +1624,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1625 if (objectID == UUID.Zero) // User inventory 1624 if (objectID == UUID.Zero) // User inventory
1626 { 1625 {
1627 IInventoryService invService = m_scene.InventoryService; 1626 IInventoryService invService = m_scene.InventoryService;
1628 InventoryItemBase assetRequestItem = new InventoryItemBase(script, user); 1627 InventoryItemBase assetRequestItem = invService.GetItem(user, script);
1629 assetRequestItem = invService.GetItem(assetRequestItem);
1630 if (assetRequestItem == null && LibraryRootFolder != null) // Library item 1628 if (assetRequestItem == null && LibraryRootFolder != null) // Library item
1631 { 1629 {
1632 assetRequestItem = LibraryRootFolder.FindItem(script); 1630 assetRequestItem = LibraryRootFolder.FindItem(script);
@@ -1722,8 +1720,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1722 if (objectID == UUID.Zero) // User inventory 1720 if (objectID == UUID.Zero) // User inventory
1723 { 1721 {
1724 IInventoryService invService = m_scene.InventoryService; 1722 IInventoryService invService = m_scene.InventoryService;
1725 InventoryItemBase assetRequestItem = new InventoryItemBase(notecard, user); 1723 InventoryItemBase assetRequestItem = invService.GetItem(user, notecard);
1726 assetRequestItem = invService.GetItem(assetRequestItem);
1727 if (assetRequestItem == null && LibraryRootFolder != null) // Library item 1724 if (assetRequestItem == null && LibraryRootFolder != null) // Library item
1728 { 1725 {
1729 assetRequestItem = LibraryRootFolder.FindItem(notecard); 1726 assetRequestItem = LibraryRootFolder.FindItem(notecard);
diff --git a/OpenSim/Region/Framework/Scenes/AsyncInventorySender.cs b/OpenSim/Region/Framework/Scenes/AsyncInventorySender.cs
index d9d2e64..4362e28 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncInventorySender.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncInventorySender.cs
@@ -143,8 +143,7 @@ namespace OpenSim.Region.Framework.Scenes
143// m_log.DebugFormat( 143// m_log.DebugFormat(
144// "[ASYNC INVENTORY SENDER]: Handling request from {0} for {1} on queue", fh.Client.Name, fh.ItemID); 144// "[ASYNC INVENTORY SENDER]: Handling request from {0} for {1} on queue", fh.Client.Name, fh.ItemID);
145 145
146 InventoryItemBase item = new InventoryItemBase(fh.ItemID, fh.Client.AgentId); 146 InventoryItemBase item = m_scene.InventoryService.GetItem(fh.Client.AgentId, fh.ItemID);
147 item = m_scene.InventoryService.GetItem(item);
148 147
149 if (item != null) 148 if (item != null)
150 fh.Client.SendInventoryItemDetails(item.Owner, item); 149 fh.Client.SendInventoryItemDetails(item.Owner, item);
@@ -153,4 +152,4 @@ namespace OpenSim.Region.Framework.Scenes
153 } 152 }
154 } 153 }
155 } 154 }
156} \ No newline at end of file 155}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 30bc75b..f2df364 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -223,8 +223,7 @@ namespace OpenSim.Region.Framework.Scenes
223 223
224 if (core.TryGet<IClientInventory>(out inv)) 224 if (core.TryGet<IClientInventory>(out inv))
225 { 225 {
226 InventoryFolderBase parent = new InventoryFolderBase(f.ParentID, f.Owner); 226 InventoryFolderBase parent = InventoryService.GetFolder(f.Owner, f.ParentID);
227 parent = InventoryService.GetFolder(parent);
228 inv.SendRemoveInventoryItems(new UUID[] { item.ID }); 227 inv.SendRemoveInventoryItems(new UUID[] { item.ID });
229 inv.SendBulkUpdateInventory(new InventoryFolderBase[0], new InventoryItemBase[] { item }); 228 inv.SendBulkUpdateInventory(new InventoryFolderBase[0], new InventoryItemBase[] { item });
230 string message = "The item was placed in folder " + f.Name; 229 string message = "The item was placed in folder " + f.Name;
@@ -407,8 +406,7 @@ namespace OpenSim.Region.Framework.Scenes
407 // inventory. Rut-Roh. Whatever. Make this secure. Yeah. 406 // inventory. Rut-Roh. Whatever. Make this secure. Yeah.
408 // 407 //
409 // Passing something to another avatar or a an object will already 408 // Passing something to another avatar or a an object will already
410 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 409 InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID);
411 item = InventoryService.GetItem(item);
412 410
413 if (item != null) 411 if (item != null)
414 { 412 {
@@ -585,8 +583,7 @@ namespace OpenSim.Region.Framework.Scenes
585 return null; 583 return null;
586 } 584 }
587 585
588 InventoryItemBase item = new InventoryItemBase(itemId, senderId); 586 InventoryItemBase item = InventoryService.GetItem(senderId, itemId);
589 item = InventoryService.GetItem(item);
590 587
591 if (item == null) 588 if (item == null)
592 { 589 {
@@ -807,7 +804,7 @@ namespace OpenSim.Region.Framework.Scenes
807 UUID recipientId, UUID senderId, UUID folderId, UUID recipientParentFolderId) 804 UUID recipientId, UUID senderId, UUID folderId, UUID recipientParentFolderId)
808 { 805 {
809 //// Retrieve the folder from the sender 806 //// Retrieve the folder from the sender
810 InventoryFolderBase folder = InventoryService.GetFolder(new InventoryFolderBase(folderId, senderId)); 807 InventoryFolderBase folder = InventoryService.GetFolder(senderId, folderId);
811 if (null == folder) 808 if (null == folder)
812 { 809 {
813 m_log.ErrorFormat( 810 m_log.ErrorFormat(
@@ -868,8 +865,7 @@ namespace OpenSim.Region.Framework.Scenes
868 865
869 if (item == null) 866 if (item == null)
870 { 867 {
871 item = new InventoryItemBase(oldItemID, remoteClient.AgentId); 868 item = InventoryService.GetItem(remoteClient.AgentId, oldItemID);
872 item = InventoryService.GetItem(item);
873 869
874 if (item == null) 870 if (item == null)
875 { 871 {
@@ -953,7 +949,7 @@ namespace OpenSim.Region.Framework.Scenes
953 foreach (InventoryItemBase b in items) 949 foreach (InventoryItemBase b in items)
954 { 950 {
955 CopyInventoryItem(remoteClient, 0, remoteClient.AgentId, b.ID, b.Folder, null); 951 CopyInventoryItem(remoteClient, 0, remoteClient.AgentId, b.ID, b.Folder, null);
956 InventoryItemBase n = InventoryService.GetItem(b); 952 InventoryItemBase n = InventoryService.GetItem(b.Owner, b.ID);
957 n.Folder = destfolder; 953 n.Folder = destfolder;
958 moveitems.Add(n); 954 moveitems.Add(n);
959 remoteClient.SendInventoryItemCreateUpdate(n, 0); 955 remoteClient.SendInventoryItemCreateUpdate(n, 0);
@@ -1605,8 +1601,7 @@ namespace OpenSim.Region.Framework.Scenes
1605 InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID); 1601 InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID);
1606 1602
1607 // Fetch the folder itself to get its current version 1603 // Fetch the folder itself to get its current version
1608 InventoryFolderBase containingFolder = new InventoryFolderBase(folder.ID, client.AgentId); 1604 InventoryFolderBase containingFolder = InventoryService.GetFolder(client.AgentId, folder.ID);
1609 containingFolder = InventoryService.GetFolder(containingFolder);
1610 1605
1611// m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}", 1606// m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}",
1612// contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName); 1607// contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName);
@@ -1620,7 +1615,7 @@ namespace OpenSim.Region.Framework.Scenes
1620 { 1615 {
1621 if (item.AssetType == (int)AssetType.Link) 1616 if (item.AssetType == (int)AssetType.Link)
1622 { 1617 {
1623 InventoryItemBase linkedItem = InventoryService.GetItem(new InventoryItemBase(item.AssetID)); 1618 InventoryItemBase linkedItem = InventoryService.GetItem(client.AgentId, item.AssetID);
1624 1619
1625 // Take care of genuinely broken links where the target doesn't exist 1620 // Take care of genuinely broken links where the target doesn't exist
1626 // HACK: Also, don't follow up links that just point to other links. In theory this is legitimate, 1621 // HACK: Also, don't follow up links that just point to other links. In theory this is legitimate,
@@ -1680,8 +1675,7 @@ namespace OpenSim.Region.Framework.Scenes
1680 UUID copyID = UUID.Random(); 1675 UUID copyID = UUID.Random();
1681 if (itemID != UUID.Zero) 1676 if (itemID != UUID.Zero)
1682 { 1677 {
1683 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 1678 InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID);
1684 item = InventoryService.GetItem(item);
1685 1679
1686 // Try library 1680 // Try library
1687 if (null == item && LibraryService != null && LibraryService.LibraryRootFolder != null) 1681 if (null == item && LibraryService != null && LibraryService.LibraryRootFolder != null)
@@ -1836,8 +1830,7 @@ namespace OpenSim.Region.Framework.Scenes
1836 public SceneObjectPart RezScriptFromAgentInventory(UUID agentID, UUID fromItemID, uint localID) 1830 public SceneObjectPart RezScriptFromAgentInventory(UUID agentID, UUID fromItemID, uint localID)
1837 { 1831 {
1838 UUID copyID = UUID.Random(); 1832 UUID copyID = UUID.Random();
1839 InventoryItemBase item = new InventoryItemBase(fromItemID, agentID); 1833 InventoryItemBase item = InventoryService.GetItem(agentID, fromItemID);
1840 item = InventoryService.GetItem(item);
1841 1834
1842 // Try library 1835 // Try library
1843 // XXX clumsy, possibly should be one call 1836 // XXX clumsy, possibly should be one call
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 34b9c5f..c49edd1 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -627,8 +627,7 @@ namespace OpenSim.Region.Framework.Scenes
627// m_log.DebugFormat( 627// m_log.DebugFormat(
628// "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId); 628// "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId);
629 629
630 InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId); 630 InventoryFolderBase folder = InventoryService.GetFolder(remoteClient.AgentId, folderID);
631 folder = InventoryService.GetFolder(folder);
632 if (folder != null) 631 if (folder != null)
633 { 632 {
634 folder.Name = name; 633 folder.Name = name;
@@ -645,8 +644,7 @@ namespace OpenSim.Region.Framework.Scenes
645 644
646 public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) 645 public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID)
647 { 646 {
648 InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId); 647 InventoryFolderBase folder = InventoryService.GetFolder(remoteClient.AgentId, folderID);
649 folder = InventoryService.GetFolder(folder);
650 if (folder != null) 648 if (folder != null)
651 { 649 {
652 folder.ParentID = parentID; 650 folder.ParentID = parentID;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 2617723..ec34e39 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -505,8 +505,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
505 //variable will be set to null and attachment will 505 //variable will be set to null and attachment will
506 //not be included with the group notice. 506 //not be included with the group notice.
507 Scene scene = (Scene)remoteClient.Scene; 507 Scene scene = (Scene)remoteClient.Scene;
508 item = new InventoryItemBase(itemID, ownerID); 508 item = scene.InventoryService.GetItem(ownerID, itemID);
509 item = scene.InventoryService.GetItem(item);
510 509
511 if (item != null) 510 if (item != null)
512 { 511 {
diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
index b295446..0bab5aa 100644
--- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
+++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
@@ -114,12 +114,12 @@ namespace OpenSim.Server.Handlers.Inventory
114 "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); 114 "POST", "/DeleteItem/", DeleteItems, CheckAuthSession));
115 115
116 m_httpServer.AddStreamHandler( 116 m_httpServer.AddStreamHandler(
117 new RestDeserialiseSecureHandler<InventoryItemBase, InventoryItemBase>( 117 new RestDeserialiseSecureHandler<Guid, InventoryItemBase>(
118 "POST", "/QueryItem/", m_InventoryService.GetItem, CheckAuthSession)); 118 "POST", "/QueryItem/", GetItem, CheckAuthSession));
119 119
120 m_httpServer.AddStreamHandler( 120 m_httpServer.AddStreamHandler(
121 new RestDeserialiseSecureHandler<InventoryFolderBase, InventoryFolderBase>( 121 new RestDeserialiseSecureHandler<Guid, InventoryFolderBase>(
122 "POST", "/QueryFolder/", m_InventoryService.GetFolder, CheckAuthSession)); 122 "POST", "/QueryFolder/", GetFolder, CheckAuthSession));
123 123
124 m_httpServer.AddStreamHandler( 124 m_httpServer.AddStreamHandler(
125 new RestDeserialiseTrustedHandler<Guid, bool>( 125 new RestDeserialiseTrustedHandler<Guid, bool>(
@@ -205,6 +205,16 @@ namespace OpenSim.Server.Handlers.Inventory
205 return new Dictionary<AssetType, InventoryFolderBase>(); 205 return new Dictionary<AssetType, InventoryFolderBase>();
206 } 206 }
207 207
208 public InventoryItemBase GetItem(Guid guid)
209 {
210 return m_InventoryService.GetItem(UUID.Zero, new UUID(guid));
211 }
212
213 public InventoryFolderBase GetFolder(Guid guid)
214 {
215 return m_InventoryService.GetFolder(UUID.Zero, new UUID(guid));
216 }
217
208 public InventoryCollection GetFolderContent(Guid guid) 218 public InventoryCollection GetFolderContent(Guid guid)
209 { 219 {
210 return m_InventoryService.GetFolderContent(UUID.Zero, new UUID(guid)); 220 return m_InventoryService.GetFolderContent(UUID.Zero, new UUID(guid));
diff --git a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs
index 5c4e7a9..96d6451 100644
--- a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs
+++ b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs
@@ -566,9 +566,11 @@ namespace OpenSim.Server.Handlers.Inventory
566 Dictionary<string,object> result = new Dictionary<string,object>(); 566 Dictionary<string,object> result = new Dictionary<string,object>();
567 UUID id = UUID.Zero; 567 UUID id = UUID.Zero;
568 UUID.TryParse(request["ID"].ToString(), out id); 568 UUID.TryParse(request["ID"].ToString(), out id);
569 UUID user = UUID.Zero;
570 if (request.ContainsKey("PRINCIPAL"))
571 UUID.TryParse(request["PRINCIPAL"].ToString(), out user);
569 572
570 InventoryItemBase item = new InventoryItemBase(id); 573 InventoryItemBase item = m_InventoryService.GetItem(user, id);
571 item = m_InventoryService.GetItem(item);
572 if (item != null) 574 if (item != null)
573 result["item"] = EncodeItem(item); 575 result["item"] = EncodeItem(item);
574 576
@@ -617,9 +619,11 @@ namespace OpenSim.Server.Handlers.Inventory
617 Dictionary<string, object> result = new Dictionary<string, object>(); 619 Dictionary<string, object> result = new Dictionary<string, object>();
618 UUID id = UUID.Zero; 620 UUID id = UUID.Zero;
619 UUID.TryParse(request["ID"].ToString(), out id); 621 UUID.TryParse(request["ID"].ToString(), out id);
622 UUID user = UUID.Zero;
623 if (request.ContainsKey("PRINCIPAL"))
624 UUID.TryParse(request["PRINCIPAL"].ToString(), out user);
620 625
621 InventoryFolderBase folder = new InventoryFolderBase(id); 626 InventoryFolderBase folder = m_InventoryService.GetFolder(user, id);
622 folder = m_InventoryService.GetFolder(folder);
623 if (folder != null) 627 if (folder != null)
624 result["folder"] = EncodeFolder(folder); 628 result["folder"] = EncodeFolder(folder);
625 629
diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
index c7d658a..d80e660 100644
--- a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
@@ -520,10 +520,10 @@ namespace OpenSim.Services.Connectors
520 return CheckReturn(ret); 520 return CheckReturn(ret);
521 } 521 }
522 522
523 public InventoryItemBase GetItem(InventoryItemBase item) 523 public InventoryItemBase GetItem(UUID principalID, UUID itemID)
524 { 524 {
525 InventoryItemBase retrieved = null; 525 InventoryItemBase retrieved = null;
526 if (m_ItemCache.TryGetValue(item.ID, out retrieved)) 526 if (m_ItemCache.TryGetValue(itemID, out retrieved))
527 { 527 {
528 return retrieved; 528 return retrieved;
529 } 529 }
@@ -532,7 +532,8 @@ namespace OpenSim.Services.Connectors
532 { 532 {
533 Dictionary<string, object> ret = MakeRequest("GETITEM", 533 Dictionary<string, object> ret = MakeRequest("GETITEM",
534 new Dictionary<string, object> { 534 new Dictionary<string, object> {
535 { "ID", item.ID.ToString() } 535 { "ID", itemID.ToString() },
536 { "PRINCIPAL", principalID.ToString() }
536 }); 537 });
537 538
538 if (!CheckReturn(ret)) 539 if (!CheckReturn(ret))
@@ -545,7 +546,7 @@ namespace OpenSim.Services.Connectors
545 m_log.Error("[XINVENTORY SERVICES CONNECTOR]: Exception in GetItem: ", e); 546 m_log.Error("[XINVENTORY SERVICES CONNECTOR]: Exception in GetItem: ", e);
546 } 547 }
547 548
548 m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); 549 m_ItemCache.AddOrUpdate(itemID, retrieved, CACHE_EXPIRATION_SECONDS);
549 550
550 return retrieved; 551 return retrieved;
551 } 552 }
@@ -613,13 +614,14 @@ namespace OpenSim.Services.Connectors
613 return itemArr; 614 return itemArr;
614 } 615 }
615 616
616 public InventoryFolderBase GetFolder(InventoryFolderBase folder) 617 public InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
617 { 618 {
618 try 619 try
619 { 620 {
620 Dictionary<string, object> ret = MakeRequest("GETFOLDER", 621 Dictionary<string, object> ret = MakeRequest("GETFOLDER",
621 new Dictionary<string, object> { 622 new Dictionary<string, object> {
622 { "ID", folder.ID.ToString() } 623 { "ID", folderID.ToString() },
624 { "PRINCIPAL", principalID.ToString() }
623 }); 625 });
624 626
625 if (!CheckReturn(ret)) 627 if (!CheckReturn(ret))
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
index e793420..3d35834 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
@@ -277,17 +277,17 @@ namespace OpenSim.Services.Connectors.SimianGrid
277 /// </summary> 277 /// </summary>
278 /// <param name="item"></param> 278 /// <param name="item"></param>
279 /// <returns></returns> 279 /// <returns></returns>
280 public InventoryItemBase GetItem(InventoryItemBase item) 280 public InventoryItemBase GetItem(UUID principalID, UUID itemID)
281 { 281 {
282 InventoryItemBase retrieved = null; 282 InventoryItemBase retrieved = null;
283 if (m_ItemCache.TryGetValue(item.ID, out retrieved)) 283 if (m_ItemCache.TryGetValue(itemID, out retrieved))
284 return retrieved; 284 return retrieved;
285 285
286 NameValueCollection requestArgs = new NameValueCollection 286 NameValueCollection requestArgs = new NameValueCollection
287 { 287 {
288 { "RequestMethod", "GetInventoryNode" }, 288 { "RequestMethod", "GetInventoryNode" },
289 { "ItemID", item.ID.ToString() }, 289 { "ItemID", itemID.ToString() },
290 { "OwnerID", item.Owner.ToString() }, 290 { "OwnerID", principalID.ToString() },
291 { "IncludeFolders", "1" }, 291 { "IncludeFolders", "1" },
292 { "IncludeItems", "1" }, 292 { "IncludeItems", "1" },
293 { "ChildrenOnly", "1" } 293 { "ChildrenOnly", "1" }
@@ -303,17 +303,17 @@ namespace OpenSim.Services.Connectors.SimianGrid
303 // and sanity check just in case 303 // and sanity check just in case
304 for (int i = 0; i < items.Count; i++) 304 for (int i = 0; i < items.Count; i++)
305 { 305 {
306 if (items[i].ID == item.ID) 306 if (items[i].ID == itemID)
307 { 307 {
308 retrieved = items[i]; 308 retrieved = items[i];
309 m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); 309 m_ItemCache.AddOrUpdate(itemID, retrieved, CACHE_EXPIRATION_SECONDS);
310 return retrieved; 310 return retrieved;
311 } 311 }
312 } 312 }
313 } 313 }
314 } 314 }
315 315
316 m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found"); 316 m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + itemID + " owned by " + principalID + " not found");
317 return null; 317 return null;
318 } 318 }
319 319
@@ -321,13 +321,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
321 { 321 {
322 InventoryItemBase[] result = new InventoryItemBase[itemIDs.Length]; 322 InventoryItemBase[] result = new InventoryItemBase[itemIDs.Length];
323 int i = 0; 323 int i = 0;
324 InventoryItemBase item = new InventoryItemBase();
325 item.Owner = principalID;
326 foreach (UUID id in itemIDs) 324 foreach (UUID id in itemIDs)
327 { 325 result[i++] = GetItem(principalID, id);
328 item.ID = id;
329 result[i++] = GetItem(item);
330 }
331 326
332 return result; 327 return result;
333 } 328 }
@@ -337,13 +332,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
337 /// </summary> 332 /// </summary>
338 /// <param name="folder"></param> 333 /// <param name="folder"></param>
339 /// <returns></returns> 334 /// <returns></returns>
340 public InventoryFolderBase GetFolder(InventoryFolderBase folder) 335 public InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
341 { 336 {
342 NameValueCollection requestArgs = new NameValueCollection 337 NameValueCollection requestArgs = new NameValueCollection
343 { 338 {
344 { "RequestMethod", "GetInventoryNode" }, 339 { "RequestMethod", "GetInventoryNode" },
345 { "ItemID", folder.ID.ToString() }, 340 { "ItemID", folderID.ToString() },
346 { "OwnerID", folder.Owner.ToString() }, 341 { "OwnerID", principalID.ToString() },
347 { "IncludeFolders", "1" }, 342 { "IncludeFolders", "1" },
348 { "IncludeItems", "0" }, 343 { "IncludeItems", "0" },
349 { "ChildrenOnly", "1" } 344 { "ChildrenOnly", "1" }
@@ -353,7 +348,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
353 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 348 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
354 { 349 {
355 OSDArray items = (OSDArray)response["Items"]; 350 OSDArray items = (OSDArray)response["Items"];
356 List<InventoryFolderBase> folders = GetFoldersFromResponse(items, folder.ID, true); 351 List<InventoryFolderBase> folders = GetFoldersFromResponse(items, folderID, true);
357 352
358 if (folders.Count > 0) 353 if (folders.Count > 0)
359 return folders[0]; 354 return folders[0];
diff --git a/OpenSim/Services/HypergridService/HGInventoryService.cs b/OpenSim/Services/HypergridService/HGInventoryService.cs
index 9158b41..a0d25e3 100644
--- a/OpenSim/Services/HypergridService/HGInventoryService.cs
+++ b/OpenSim/Services/HypergridService/HGInventoryService.cs
@@ -291,9 +291,9 @@ namespace OpenSim.Services.HypergridService
291 //{ 291 //{
292 //} 292 //}
293 293
294 public override InventoryItemBase GetItem(InventoryItemBase item) 294 public override InventoryItemBase GetItem(UUID principalID, UUID itemID)
295 { 295 {
296 InventoryItemBase it = base.GetItem(item); 296 InventoryItemBase it = base.GetItem(principalID, itemID);
297 if (it != null) 297 if (it != null)
298 { 298 {
299 UserAccount user = m_Cache.GetUser(it.CreatorId); 299 UserAccount user = m_Cache.GetUser(it.CreatorId);
diff --git a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs
index 40eb6d4..7f14e8e 100644
--- a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs
+++ b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs
@@ -383,7 +383,7 @@ namespace OpenSim.Services.HypergridService
383 // Check the items' current folders 383 // Check the items' current folders
384 foreach (InventoryItemBase item in items) 384 foreach (InventoryItemBase item in items)
385 { 385 {
386 InventoryItemBase originalItem = base.GetItem(item); 386 InventoryItemBase originalItem = base.GetItem(item.Owner, item.ID);
387 if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder)) 387 if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder))
388 { 388 {
389 m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner); 389 m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner);
@@ -401,7 +401,7 @@ namespace OpenSim.Services.HypergridService
401 401
402 public new InventoryItemBase GetItem(InventoryItemBase item) 402 public new InventoryItemBase GetItem(InventoryItemBase item)
403 { 403 {
404 InventoryItemBase it = base.GetItem(item); 404 InventoryItemBase it = base.GetItem(item.Owner, item.ID);
405 if (it == null) 405 if (it == null)
406 { 406 {
407 m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to retrieve item {0} ({1}) in folder {2}", 407 m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to retrieve item {0} ({1}) in folder {2}",
@@ -426,9 +426,9 @@ namespace OpenSim.Services.HypergridService
426 return it; 426 return it;
427 } 427 }
428 428
429 public new InventoryFolderBase GetFolder(InventoryFolderBase folder) 429 public new InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
430 { 430 {
431 InventoryFolderBase f = base.GetFolder(folder); 431 InventoryFolderBase f = base.GetFolder(principalID, folderID);
432 432
433 if (f != null) 433 if (f != null)
434 { 434 {
diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs
index 4289bba..c0c9ba8 100644
--- a/OpenSim/Services/Interfaces/IInventoryService.cs
+++ b/OpenSim/Services/Interfaces/IInventoryService.cs
@@ -161,7 +161,7 @@ namespace OpenSim.Services.Interfaces
161 /// </summary> 161 /// </summary>
162 /// <param name="item"></param> 162 /// <param name="item"></param>
163 /// <returns>null if no item was found, otherwise the found item</returns> 163 /// <returns>null if no item was found, otherwise the found item</returns>
164 InventoryItemBase GetItem(InventoryItemBase item); 164 InventoryItemBase GetItem(UUID userID, UUID itemID);
165 165
166 /// <summary> 166 /// <summary>
167 /// Get multiple items, given by their UUIDs 167 /// Get multiple items, given by their UUIDs
@@ -175,7 +175,7 @@ namespace OpenSim.Services.Interfaces
175 /// </summary> 175 /// </summary>
176 /// <param name="folder"></param> 176 /// <param name="folder"></param>
177 /// <returns></returns> 177 /// <returns></returns>
178 InventoryFolderBase GetFolder(InventoryFolderBase folder); 178 InventoryFolderBase GetFolder(UUID userID, UUID folderID);
179 179
180 /// <summary> 180 /// <summary>
181 /// Does the given user have an inventory structure? 181 /// Does the given user have an inventory structure?
diff --git a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
index 9e3fa69..3cfd125 100644
--- a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
+++ b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
@@ -90,8 +90,7 @@ namespace OpenSim.Services.InventoryService.Tests
90 90
91 Assert.That(xis.AddItem(itemToStore), Is.True); 91 Assert.That(xis.AddItem(itemToStore), Is.True);
92 92
93 InventoryItemBase itemRetrieved = new InventoryItemBase(itemId); 93 InventoryItemBase itemRetrieved = xis.GetItem(UUID.Zero, itemId);
94 itemRetrieved = xis.GetItem(itemRetrieved);
95 94
96 Assert.That(itemRetrieved, Is.Not.Null); 95 Assert.That(itemRetrieved, Is.Not.Null);
97 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId)); 96 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId));
@@ -139,8 +138,7 @@ namespace OpenSim.Services.InventoryService.Tests
139 138
140 Assert.That(xis.UpdateItem(itemToStore), Is.True); 139 Assert.That(xis.UpdateItem(itemToStore), Is.True);
141 140
142 InventoryItemBase itemRetrieved = new InventoryItemBase(itemId); 141 InventoryItemBase itemRetrieved = xis.GetItem(UUID.Zero, itemId);
143 itemRetrieved = xis.GetItem(itemRetrieved);
144 142
145 Assert.That(itemRetrieved, Is.Not.Null); 143 Assert.That(itemRetrieved, Is.Not.Null);
146 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName2)); 144 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName2));
@@ -162,7 +160,7 @@ namespace OpenSim.Services.InventoryService.Tests
162 160
163 Assert.That(xis.UpdateItem(itemToStore), Is.True); 161 Assert.That(xis.UpdateItem(itemToStore), Is.True);
164 162
165 itemRetrieved = xis.GetItem(itemRetrieved); 163 itemRetrieved = xis.GetItem(itemRetrieved.Owner, itemRetrieved.ID);
166 164
167 Assert.That(itemRetrieved, Is.Not.Null); 165 Assert.That(itemRetrieved, Is.Not.Null);
168 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId)); 166 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId));
@@ -174,4 +172,4 @@ namespace OpenSim.Services.InventoryService.Tests
174 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName3)); 172 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName3));
175 } 173 }
176 } 174 }
177} \ No newline at end of file 175}
diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs
index b75193f..004c4bf 100644
--- a/OpenSim/Services/InventoryService/XInventoryService.cs
+++ b/OpenSim/Services/InventoryService/XInventoryService.cs
@@ -315,8 +315,7 @@ namespace OpenSim.Services.InventoryService
315 inventory.Items.Add(ConvertToOpenSim(i)); 315 inventory.Items.Add(ConvertToOpenSim(i));
316 } 316 }
317 317
318 InventoryFolderBase f = new InventoryFolderBase(folderID, principalID); 318 InventoryFolderBase f = GetFolder(principalID, folderID);
319 f = GetFolder(f);
320 if (f != null) 319 if (f != null)
321 { 320 {
322 inventory.Version = f.Version; 321 inventory.Version = f.Version;
@@ -359,7 +358,7 @@ namespace OpenSim.Services.InventoryService
359 { 358 {
360// m_log.DebugFormat("[XINVENTORY]: Add folder {0} type {1} in parent {2}", folder.Name, folder.Type, folder.ParentID); 359// m_log.DebugFormat("[XINVENTORY]: Add folder {0} type {1} in parent {2}", folder.Name, folder.Type, folder.ParentID);
361 360
362 InventoryFolderBase check = GetFolder(folder); 361 InventoryFolderBase check = GetFolder(folder.Owner, folder.ID);
363 if (check != null) 362 if (check != null)
364 return false; 363 return false;
365 364
@@ -402,7 +401,7 @@ namespace OpenSim.Services.InventoryService
402// m_log.DebugFormat("[XINVENTORY]: Update folder {0} {1} ({2})", folder.Name, folder.Type, folder.ID); 401// m_log.DebugFormat("[XINVENTORY]: Update folder {0} {1} ({2})", folder.Name, folder.Type, folder.ID);
403 402
404 XInventoryFolder xFolder = ConvertFromOpenSim(folder); 403 XInventoryFolder xFolder = ConvertFromOpenSim(folder);
405 InventoryFolderBase check = GetFolder(folder); 404 InventoryFolderBase check = GetFolder(folder.Owner, folder.ID);
406 405
407 if (check == null) 406 if (check == null)
408 return AddFolder(folder); 407 return AddFolder(folder);
@@ -512,7 +511,7 @@ namespace OpenSim.Services.InventoryService
512// m_log.InfoFormat( 511// m_log.InfoFormat(
513// "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); 512// "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder);
514 513
515 InventoryItemBase retrievedItem = GetItem(item); 514 InventoryItemBase retrievedItem = GetItem(item.Owner, item.ID);
516 515
517 if (retrievedItem == null) 516 if (retrievedItem == null)
518 { 517 {
@@ -598,11 +597,11 @@ namespace OpenSim.Services.InventoryService
598 return true; 597 return true;
599 } 598 }
600 599
601 public virtual InventoryItemBase GetItem(InventoryItemBase item) 600 public virtual InventoryItemBase GetItem(UUID principalID, UUID itemID)
602 { 601 {
603 XInventoryItem[] items = m_Database.GetItems( 602 XInventoryItem[] items = m_Database.GetItems(
604 new string[] { "inventoryID" }, 603 new string[] { "inventoryID" },
605 new string[] { item.ID.ToString() }); 604 new string[] { itemID.ToString() });
606 605
607 if (items.Length == 0) 606 if (items.Length == 0)
608 return null; 607 return null;
@@ -614,22 +613,17 @@ namespace OpenSim.Services.InventoryService
614 { 613 {
615 InventoryItemBase[] items = new InventoryItemBase[ids.Length]; 614 InventoryItemBase[] items = new InventoryItemBase[ids.Length];
616 int i = 0; 615 int i = 0;
617 InventoryItemBase item = new InventoryItemBase();
618 item.Owner = userID;
619 foreach (UUID id in ids) 616 foreach (UUID id in ids)
620 { 617 items[i++] = GetItem(userID, id);
621 item.ID = id;
622 items[i++] = GetItem(item);
623 }
624 618
625 return items; 619 return items;
626 } 620 }
627 621
628 public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) 622 public virtual InventoryFolderBase GetFolder(UUID principalID, UUID folderID)
629 { 623 {
630 XInventoryFolder[] folders = m_Database.GetFolders( 624 XInventoryFolder[] folders = m_Database.GetFolders(
631 new string[] { "folderID"}, 625 new string[] { "folderID"},
632 new string[] { folder.ID.ToString() }); 626 new string[] { folderID.ToString() });
633 627
634 if (folders.Length == 0) 628 if (folders.Length == 0)
635 return null; 629 return null;
diff --git a/OpenSim/Tests/Robust/Clients/Inventory/InventoryClient.cs b/OpenSim/Tests/Robust/Clients/Inventory/InventoryClient.cs
index 0280b73..d5c7dcb 100644
--- a/OpenSim/Tests/Robust/Clients/Inventory/InventoryClient.cs
+++ b/OpenSim/Tests/Robust/Clients/Inventory/InventoryClient.cs
@@ -159,8 +159,7 @@ namespace Robust.Tests
159 XInventoryServicesConnector m_Connector = new XInventoryServicesConnector(DemonServer.Address); 159 XInventoryServicesConnector m_Connector = new XInventoryServicesConnector(DemonServer.Address);
160 160
161 // Prefetch Notecard 1, will be cached from here on 161 // Prefetch Notecard 1, will be cached from here on
162 InventoryItemBase item = new InventoryItemBase(new UUID("10000000-0000-0000-0000-000000000001"), m_userID); 162 InventoryItemBase item = m_Connector.GetItem(m_userID, new UUID("10000000-0000-0000-0000-000000000001"));
163 item = m_Connector.GetItem(item);
164 Assert.NotNull(item, "Failed to get Notecard 1"); 163 Assert.NotNull(item, "Failed to get Notecard 1");
165 Assert.AreEqual("Test Notecard 1", item.Name, "Wrong name for Notecard 1"); 164 Assert.AreEqual("Test Notecard 1", item.Name, "Wrong name for Notecard 1");
166 165