aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs119
1 files changed, 68 insertions, 51 deletions
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
index a391275..e793420 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
@@ -38,12 +38,14 @@ using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces; 40using OpenSim.Services.Interfaces;
41using PermissionMask = OpenSim.Framework.PermissionMask;
41 42
42namespace OpenSim.Services.Connectors.SimianGrid 43namespace OpenSim.Services.Connectors.SimianGrid
43{ 44{
44 /// <summary> 45 /// <summary>
45 /// Permissions bitflags 46 /// Permissions bitflags
46 /// </summary> 47 /// </summary>
48 /*
47 [Flags] 49 [Flags]
48 public enum PermissionMask : uint 50 public enum PermissionMask : uint
49 { 51 {
@@ -55,6 +57,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
55 Damage = 1 << 20, 57 Damage = 1 << 20,
56 All = 0x7FFFFFFF 58 All = 0x7FFFFFFF
57 } 59 }
60 */
58 61
59 /// <summary> 62 /// <summary>
60 /// Connects avatar inventories to the SimianGrid backend 63 /// Connects avatar inventories to the SimianGrid backend
@@ -71,6 +74,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
71// private object m_gestureSyncRoot = new object(); 74// private object m_gestureSyncRoot = new object();
72 private bool m_Enabled = false; 75 private bool m_Enabled = false;
73 76
77 private const double CACHE_EXPIRATION_SECONDS = 20.0;
78 private static ExpiringCache<UUID, InventoryItemBase> m_ItemCache;
79
74 #region ISharedRegionModule 80 #region ISharedRegionModule
75 81
76 public Type ReplaceableInterface { get { return null; } } 82 public Type ReplaceableInterface { get { return null; } }
@@ -96,6 +102,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
96 url = url + '/'; 102 url = url + '/';
97 m_serverUrl = url; 103 m_serverUrl = url;
98 104
105 if (m_ItemCache == null)
106 m_ItemCache = new ExpiringCache<UUID, InventoryItemBase>();
107
99 } 108 }
100 109
101 public void Initialise(IConfigSource source) 110 public void Initialise(IConfigSource source)
@@ -129,6 +138,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
129 { 138 {
130 m_userServerUrl = serviceUrl; 139 m_userServerUrl = serviceUrl;
131 m_Enabled = true; 140 m_Enabled = true;
141 if (m_ItemCache == null)
142 m_ItemCache = new ExpiringCache<UUID, InventoryItemBase>();
132 } 143 }
133 } 144 }
134 } 145 }
@@ -153,7 +164,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
153 { "OwnerID", userID.ToString() } 164 { "OwnerID", userID.ToString() }
154 }; 165 };
155 166
156 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 167 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
157 bool success = response["Success"].AsBoolean(); 168 bool success = response["Success"].AsBoolean();
158 169
159 if (!success) 170 if (!success)
@@ -179,7 +190,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
179 { "ChildrenOnly", "0" } 190 { "ChildrenOnly", "0" }
180 }; 191 };
181 192
182 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 193 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
183 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 194 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
184 { 195 {
185 OSDArray items = (OSDArray)response["Items"]; 196 OSDArray items = (OSDArray)response["Items"];
@@ -194,37 +205,6 @@ namespace OpenSim.Services.Connectors.SimianGrid
194 } 205 }
195 206
196 /// <summary> 207 /// <summary>
197 /// Synchronous inventory fetch.
198 /// </summary>
199 /// <param name="userID"></param>
200 /// <returns></returns>
201 [Obsolete]
202 public InventoryCollection GetUserInventory(UUID userID)
203 {
204 m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID);
205
206 InventoryCollection inventory = new InventoryCollection();
207 inventory.UserID = userID;
208 inventory.Folders = new List<InventoryFolderBase>();
209 inventory.Items = new List<InventoryItemBase>();
210
211 return inventory;
212 }
213
214 /// <summary>
215 /// Request the inventory for a user. This is an asynchronous operation that will call the callback when the
216 /// inventory has been received
217 /// </summary>
218 /// <param name="userID"></param>
219 /// <param name="callback"></param>
220 [Obsolete]
221 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
222 {
223 m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID);
224 callback(new List<InventoryFolderImpl>(0), new List<InventoryItemBase>(0));
225 }
226
227 /// <summary>
228 /// Retrieve the root inventory folder for the given user. 208 /// Retrieve the root inventory folder for the given user.
229 /// </summary> 209 /// </summary>
230 /// <param name="userID"></param> 210 /// <param name="userID"></param>
@@ -241,7 +221,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
241 { "ChildrenOnly", "1" } 221 { "ChildrenOnly", "1" }
242 }; 222 };
243 223
244 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 224 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
245 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 225 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
246 { 226 {
247 OSDArray items = (OSDArray)response["Items"]; 227 OSDArray items = (OSDArray)response["Items"];
@@ -260,7 +240,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
260 /// <param name="userID"></param> 240 /// <param name="userID"></param>
261 /// <param name="type"></param> 241 /// <param name="type"></param>
262 /// <returns></returns> 242 /// <returns></returns>
263 public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) 243 public InventoryFolderBase GetFolderForType(UUID userID, FolderType type)
264 { 244 {
265 string contentType = SLUtil.SLAssetTypeToContentType((int)type); 245 string contentType = SLUtil.SLAssetTypeToContentType((int)type);
266 246
@@ -271,7 +251,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
271 { "OwnerID", userID.ToString() } 251 { "OwnerID", userID.ToString() }
272 }; 252 };
273 253
274 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 254 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
275 if (response["Success"].AsBoolean() && response["Folder"] is OSDMap) 255 if (response["Success"].AsBoolean() && response["Folder"] is OSDMap)
276 { 256 {
277 OSDMap folder = (OSDMap)response["Folder"]; 257 OSDMap folder = (OSDMap)response["Folder"];
@@ -299,6 +279,10 @@ namespace OpenSim.Services.Connectors.SimianGrid
299 /// <returns></returns> 279 /// <returns></returns>
300 public InventoryItemBase GetItem(InventoryItemBase item) 280 public InventoryItemBase GetItem(InventoryItemBase item)
301 { 281 {
282 InventoryItemBase retrieved = null;
283 if (m_ItemCache.TryGetValue(item.ID, out retrieved))
284 return retrieved;
285
302 NameValueCollection requestArgs = new NameValueCollection 286 NameValueCollection requestArgs = new NameValueCollection
303 { 287 {
304 { "RequestMethod", "GetInventoryNode" }, 288 { "RequestMethod", "GetInventoryNode" },
@@ -309,7 +293,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
309 { "ChildrenOnly", "1" } 293 { "ChildrenOnly", "1" }
310 }; 294 };
311 295
312 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 296 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
313 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 297 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
314 { 298 {
315 List<InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]); 299 List<InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]);
@@ -320,7 +304,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
320 for (int i = 0; i < items.Count; i++) 304 for (int i = 0; i < items.Count; i++)
321 { 305 {
322 if (items[i].ID == item.ID) 306 if (items[i].ID == item.ID)
323 return items[i]; 307 {
308 retrieved = items[i];
309 m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS);
310 return retrieved;
311 }
324 } 312 }
325 } 313 }
326 } 314 }
@@ -329,6 +317,21 @@ namespace OpenSim.Services.Connectors.SimianGrid
329 return null; 317 return null;
330 } 318 }
331 319
320 public InventoryItemBase[] GetMultipleItems(UUID principalID, UUID[] itemIDs)
321 {
322 InventoryItemBase[] result = new InventoryItemBase[itemIDs.Length];
323 int i = 0;
324 InventoryItemBase item = new InventoryItemBase();
325 item.Owner = principalID;
326 foreach (UUID id in itemIDs)
327 {
328 item.ID = id;
329 result[i++] = GetItem(item);
330 }
331
332 return result;
333 }
334
332 /// <summary> 335 /// <summary>
333 /// Get a folder, given by its UUID 336 /// Get a folder, given by its UUID
334 /// </summary> 337 /// </summary>
@@ -346,7 +349,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
346 { "ChildrenOnly", "1" } 349 { "ChildrenOnly", "1" }
347 }; 350 };
348 351
349 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 352 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
350 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 353 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
351 { 354 {
352 OSDArray items = (OSDArray)response["Items"]; 355 OSDArray items = (OSDArray)response["Items"];
@@ -368,7 +371,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
368 public InventoryCollection GetFolderContent(UUID userID, UUID folderID) 371 public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
369 { 372 {
370 InventoryCollection inventory = new InventoryCollection(); 373 InventoryCollection inventory = new InventoryCollection();
371 inventory.UserID = userID; 374 inventory.OwnerID = userID;
372 375
373 NameValueCollection requestArgs = new NameValueCollection 376 NameValueCollection requestArgs = new NameValueCollection
374 { 377 {
@@ -380,7 +383,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
380 { "ChildrenOnly", "1" } 383 { "ChildrenOnly", "1" }
381 }; 384 };
382 385
383 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 386 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
384 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 387 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
385 { 388 {
386 OSDArray items = (OSDArray)response["Items"]; 389 OSDArray items = (OSDArray)response["Items"];
@@ -399,6 +402,18 @@ namespace OpenSim.Services.Connectors.SimianGrid
399 return inventory; 402 return inventory;
400 } 403 }
401 404
405 public virtual InventoryCollection[] GetMultipleFoldersContent(UUID principalID, UUID[] folderIDs)
406 {
407 InventoryCollection[] invColl = new InventoryCollection[folderIDs.Length];
408 int i = 0;
409 foreach (UUID fid in folderIDs)
410 {
411 invColl[i++] = GetFolderContent(principalID, fid);
412 }
413
414 return invColl;
415 }
416
402 /// <summary> 417 /// <summary>
403 /// Gets the items inside a folder 418 /// Gets the items inside a folder
404 /// </summary> 419 /// </summary>
@@ -408,7 +423,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
408 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) 423 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
409 { 424 {
410 InventoryCollection inventory = new InventoryCollection(); 425 InventoryCollection inventory = new InventoryCollection();
411 inventory.UserID = userID; 426 inventory.OwnerID = userID;
412 427
413 NameValueCollection requestArgs = new NameValueCollection 428 NameValueCollection requestArgs = new NameValueCollection
414 { 429 {
@@ -420,7 +435,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
420 { "ChildrenOnly", "1" } 435 { "ChildrenOnly", "1" }
421 }; 436 };
422 437
423 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 438 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
424 if (response["Success"].AsBoolean() && response["Items"] is OSDArray) 439 if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
425 { 440 {
426 OSDArray items = (OSDArray)response["Items"]; 441 OSDArray items = (OSDArray)response["Items"];
@@ -451,7 +466,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
451 { "ContentType", SLUtil.SLAssetTypeToContentType(folder.Type) } 466 { "ContentType", SLUtil.SLAssetTypeToContentType(folder.Type) }
452 }; 467 };
453 468
454 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 469 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
455 bool success = response["Success"].AsBoolean(); 470 bool success = response["Success"].AsBoolean();
456 471
457 if (!success) 472 if (!success)
@@ -515,7 +530,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
515 { "ItemID", itemID.ToString() } 530 { "ItemID", itemID.ToString() }
516 }; 531 };
517 532
518 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 533 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
519 bool success = response["Success"].AsBoolean(); 534 bool success = response["Success"].AsBoolean();
520 535
521 if (!success) 536 if (!success)
@@ -543,7 +558,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
543 { "FolderID", folder.ID.ToString() } 558 { "FolderID", folder.ID.ToString() }
544 }; 559 };
545 560
546 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 561 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
547 bool success = response["Success"].AsBoolean(); 562 bool success = response["Success"].AsBoolean();
548 563
549 if (!success) 564 if (!success)
@@ -565,7 +580,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
565 // A folder of UUID.Zero means we need to find the most appropriate home for this item 580 // A folder of UUID.Zero means we need to find the most appropriate home for this item
566 if (item.Folder == UUID.Zero) 581 if (item.Folder == UUID.Zero)
567 { 582 {
568 InventoryFolderBase folder = GetFolderForType(item.Owner, (AssetType)item.AssetType); 583 InventoryFolderBase folder = null;
584 if (Enum.IsDefined(typeof(FolderType), (sbyte)item.AssetType))
585 folder = GetFolderForType(item.Owner, (FolderType)item.AssetType);
569 if (folder != null && folder.ID != UUID.Zero) 586 if (folder != null && folder.ID != UUID.Zero)
570 item.Folder = folder.ID; 587 item.Folder = folder.ID;
571 else 588 else
@@ -620,7 +637,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
620 { "ExtraData", OSDParser.SerializeJsonString(extraData) } 637 { "ExtraData", OSDParser.SerializeJsonString(extraData) }
621 }; 638 };
622 639
623 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 640 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
624 bool success = response["Success"].AsBoolean(); 641 bool success = response["Success"].AsBoolean();
625 642
626 if (!success) 643 if (!success)
@@ -844,7 +861,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
844 { "Items", String.Join(",", itemIDs) } 861 { "Items", String.Join(",", itemIDs) }
845 }; 862 };
846 863
847 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 864 OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
848 bool success = response["Success"].AsBoolean(); 865 bool success = response["Success"].AsBoolean();
849 866
850 if (!success) 867 if (!success)
@@ -882,7 +899,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
882 { "UserID", userID.ToString() } 899 { "UserID", userID.ToString() }
883 }; 900 };
884 901
885 OSDMap response = WebUtil.PostToService(m_userServerUrl, requestArgs); 902 OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs);
886 if (response["Success"].AsBoolean()) 903 if (response["Success"].AsBoolean())
887 { 904 {
888 OSDMap user = response["User"] as OSDMap; 905 OSDMap user = response["User"] as OSDMap;
@@ -913,7 +930,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
913 { "Gestures", OSDParser.SerializeJsonString(gestures) } 930 { "Gestures", OSDParser.SerializeJsonString(gestures) }
914 }; 931 };
915 932
916 OSDMap response = WebUtil.PostToService(m_userServerUrl, requestArgs); 933 OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs);
917 if (!response["Success"].AsBoolean()) 934 if (!response["Success"].AsBoolean())
918 { 935 {
919 m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " + 936 m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " +