diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | 307 |
1 files changed, 136 insertions, 171 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 1fdf1ef..c6312e0 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | |||
@@ -31,7 +31,7 @@ using System; | |||
31 | using System.Collections.Generic; | 31 | using System.Collections.Generic; |
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Framework.Communications.Cache; | 34 | |
35 | using OpenSim.Server.Base; | 35 | using OpenSim.Server.Base; |
36 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
37 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
@@ -41,31 +41,20 @@ using OpenMetaverse; | |||
41 | 41 | ||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | 42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory |
43 | { | 43 | { |
44 | public class HGInventoryBroker : BaseInventoryConnector, ISharedRegionModule, IInventoryService | 44 | public class HGInventoryBroker : BaseInventoryConnector, INonSharedRegionModule, IInventoryService |
45 | { | 45 | { |
46 | private static readonly ILog m_log = | 46 | private static readonly ILog m_log = |
47 | LogManager.GetLogger( | 47 | LogManager.GetLogger( |
48 | MethodBase.GetCurrentMethod().DeclaringType); | 48 | MethodBase.GetCurrentMethod().DeclaringType); |
49 | 49 | ||
50 | private bool m_Enabled = false; | 50 | private static bool m_Initialized = false; |
51 | private bool m_Initialized = false; | 51 | private static bool m_Enabled = false; |
52 | private Scene m_Scene; | ||
53 | private UserProfileCacheService m_UserProfileService; // This should change to IUserProfileService | ||
54 | |||
55 | private IInventoryService m_GridService; | ||
56 | private ISessionAuthInventoryService m_HGService; | ||
57 | 52 | ||
58 | private string m_LocalGridInventoryURI = string.Empty; | 53 | private static IInventoryService m_GridService; |
54 | private static ISessionAuthInventoryService m_HGService; | ||
59 | 55 | ||
60 | private string LocalGridInventory | 56 | private Scene m_Scene; |
61 | { | 57 | private IUserAccountService m_UserAccountService; |
62 | get | ||
63 | { | ||
64 | if (m_LocalGridInventoryURI == null || m_LocalGridInventoryURI == "") | ||
65 | m_LocalGridInventoryURI = m_Scene.CommsManager.NetworkServersInfo.InventoryURL; | ||
66 | return m_LocalGridInventoryURI; | ||
67 | } | ||
68 | } | ||
69 | 58 | ||
70 | public Type ReplaceableInterface | 59 | public Type ReplaceableInterface |
71 | { | 60 | { |
@@ -79,65 +68,67 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
79 | 68 | ||
80 | public void Initialise(IConfigSource source) | 69 | public void Initialise(IConfigSource source) |
81 | { | 70 | { |
82 | IConfig moduleConfig = source.Configs["Modules"]; | 71 | if (!m_Initialized) |
83 | if (moduleConfig != null) | ||
84 | { | 72 | { |
85 | string name = moduleConfig.GetString("InventoryServices", ""); | 73 | IConfig moduleConfig = source.Configs["Modules"]; |
86 | if (name == Name) | 74 | if (moduleConfig != null) |
87 | { | 75 | { |
88 | IConfig inventoryConfig = source.Configs["InventoryService"]; | 76 | string name = moduleConfig.GetString("InventoryServices", ""); |
89 | if (inventoryConfig == null) | 77 | if (name == Name) |
90 | { | ||
91 | m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); | ||
92 | return; | ||
93 | } | ||
94 | |||
95 | string localDll = inventoryConfig.GetString("LocalGridInventoryService", | ||
96 | String.Empty); | ||
97 | string HGDll = inventoryConfig.GetString("HypergridInventoryService", | ||
98 | String.Empty); | ||
99 | |||
100 | if (localDll == String.Empty) | ||
101 | { | ||
102 | m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService"); | ||
103 | //return; | ||
104 | throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); | ||
105 | } | ||
106 | |||
107 | if (HGDll == String.Empty) | ||
108 | { | 78 | { |
109 | m_log.Error("[HG INVENTORY CONNECTOR]: No HypergridInventoryService named in section InventoryService"); | 79 | IConfig inventoryConfig = source.Configs["InventoryService"]; |
110 | //return; | 80 | if (inventoryConfig == null) |
111 | throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); | 81 | { |
82 | m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); | ||
83 | return; | ||
84 | } | ||
85 | |||
86 | string localDll = inventoryConfig.GetString("LocalGridInventoryService", | ||
87 | String.Empty); | ||
88 | string HGDll = inventoryConfig.GetString("HypergridInventoryService", | ||
89 | String.Empty); | ||
90 | |||
91 | if (localDll == String.Empty) | ||
92 | { | ||
93 | m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService"); | ||
94 | //return; | ||
95 | throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); | ||
96 | } | ||
97 | |||
98 | if (HGDll == String.Empty) | ||
99 | { | ||
100 | m_log.Error("[HG INVENTORY CONNECTOR]: No HypergridInventoryService named in section InventoryService"); | ||
101 | //return; | ||
102 | throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); | ||
103 | } | ||
104 | |||
105 | Object[] args = new Object[] { source }; | ||
106 | m_GridService = | ||
107 | ServerUtils.LoadPlugin<IInventoryService>(localDll, | ||
108 | args); | ||
109 | |||
110 | m_HGService = | ||
111 | ServerUtils.LoadPlugin<ISessionAuthInventoryService>(HGDll, | ||
112 | args); | ||
113 | |||
114 | if (m_GridService == null) | ||
115 | { | ||
116 | m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service"); | ||
117 | return; | ||
118 | } | ||
119 | if (m_HGService == null) | ||
120 | { | ||
121 | m_log.Error("[HG INVENTORY CONNECTOR]: Can't load hypergrid inventory service"); | ||
122 | return; | ||
123 | } | ||
124 | |||
125 | Init(source); | ||
126 | |||
127 | m_Enabled = true; | ||
128 | m_log.Info("[HG INVENTORY CONNECTOR]: HG inventory broker enabled"); | ||
112 | } | 129 | } |
113 | |||
114 | Object[] args = new Object[] { source }; | ||
115 | m_GridService = | ||
116 | ServerUtils.LoadPlugin<IInventoryService>(localDll, | ||
117 | args); | ||
118 | |||
119 | m_HGService = | ||
120 | ServerUtils.LoadPlugin<ISessionAuthInventoryService>(HGDll, | ||
121 | args); | ||
122 | |||
123 | if (m_GridService == null) | ||
124 | { | ||
125 | m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service"); | ||
126 | return; | ||
127 | } | ||
128 | if (m_HGService == null) | ||
129 | { | ||
130 | m_log.Error("[HG INVENTORY CONNECTOR]: Can't load hypergrid inventory service"); | ||
131 | return; | ||
132 | } | ||
133 | |||
134 | m_LocalGridInventoryURI = inventoryConfig.GetString("InventoryServerURI", string.Empty); | ||
135 | |||
136 | Init(source); | ||
137 | |||
138 | m_Enabled = true; | ||
139 | m_log.Info("[HG INVENTORY CONNECTOR]: HG inventory broker enabled"); | ||
140 | } | 130 | } |
131 | m_Initialized = true; | ||
141 | } | 132 | } |
142 | } | 133 | } |
143 | 134 | ||
@@ -154,17 +145,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
154 | if (!m_Enabled) | 145 | if (!m_Enabled) |
155 | return; | 146 | return; |
156 | 147 | ||
157 | if (!m_Initialized) | 148 | m_Scene = scene; |
158 | { | 149 | m_UserAccountService = m_Scene.UserAccountService; |
159 | m_Scene = scene; | ||
160 | // HACK for now. Ugh! | ||
161 | m_UserProfileService = m_Scene.CommsManager.UserProfileCacheService; | ||
162 | // ugh! | ||
163 | m_UserProfileService.SetInventoryService(this); | ||
164 | scene.CommsManager.UserService.SetInventoryService(this); | ||
165 | |||
166 | m_Initialized = true; | ||
167 | } | ||
168 | 150 | ||
169 | scene.RegisterModuleInterface<IInventoryService>(this); | 151 | scene.RegisterModuleInterface<IInventoryService>(this); |
170 | m_cache.AddRegion(scene); | 152 | m_cache.AddRegion(scene); |
@@ -201,22 +183,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
201 | 183 | ||
202 | public override InventoryCollection GetUserInventory(UUID userID) | 184 | public override InventoryCollection GetUserInventory(UUID userID) |
203 | { | 185 | { |
204 | if (IsLocalGridUser(userID)) | 186 | return null; |
205 | return m_GridService.GetUserInventory(userID); | ||
206 | else | ||
207 | return null; | ||
208 | } | 187 | } |
209 | 188 | ||
210 | public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback) | 189 | public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback) |
211 | { | 190 | { |
212 | if (IsLocalGridUser(userID)) | ||
213 | m_GridService.GetUserInventory(userID, callback); | ||
214 | else | ||
215 | { | ||
216 | UUID sessionID = GetSessionID(userID); | ||
217 | string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); | ||
218 | m_HGService.GetUserInventory(uri, sessionID, callback); | ||
219 | } | ||
220 | } | 191 | } |
221 | 192 | ||
222 | // Inherited. See base | 193 | // Inherited. See base |
@@ -236,19 +207,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
236 | 207 | ||
237 | public override InventoryCollection GetFolderContent(UUID userID, UUID folderID) | 208 | public override InventoryCollection GetFolderContent(UUID userID, UUID folderID) |
238 | { | 209 | { |
239 | if (IsLocalGridUser(userID)) | 210 | string uri = string.Empty; |
211 | if (!IsForeignUser(userID, out uri)) | ||
240 | return m_GridService.GetFolderContent(userID, folderID); | 212 | return m_GridService.GetFolderContent(userID, folderID); |
241 | else | 213 | else |
242 | { | 214 | { |
243 | UUID sessionID = GetSessionID(userID); | 215 | UUID sessionID = GetSessionID(userID); |
244 | string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); | 216 | uri = uri + "/" + userID.ToString(); |
245 | return m_HGService.GetFolderContent(uri, folderID, sessionID); | 217 | return m_HGService.GetFolderContent(uri, folderID, sessionID); |
246 | } | 218 | } |
247 | } | 219 | } |
248 | 220 | ||
249 | public override Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID) | 221 | public override Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID) |
250 | { | 222 | { |
251 | if (IsLocalGridUser(userID)) | 223 | string uri = string.Empty; |
224 | if (!IsForeignUser(userID, out uri)) | ||
252 | { | 225 | { |
253 | // This is not pretty, but it will have to do for now | 226 | // This is not pretty, but it will have to do for now |
254 | if (m_GridService is BaseInventoryConnector) | 227 | if (m_GridService is BaseInventoryConnector) |
@@ -265,7 +238,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
265 | else | 238 | else |
266 | { | 239 | { |
267 | UUID sessionID = GetSessionID(userID); | 240 | UUID sessionID = GetSessionID(userID); |
268 | string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); | 241 | uri = uri + "/" + userID.ToString(); |
269 | return m_HGService.GetSystemFolders(uri, sessionID); | 242 | return m_HGService.GetSystemFolders(uri, sessionID); |
270 | } | 243 | } |
271 | } | 244 | } |
@@ -301,12 +274,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
301 | 274 | ||
302 | public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) | 275 | public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) |
303 | { | 276 | { |
304 | if (IsLocalGridUser(userID)) | 277 | string uri = string.Empty; |
278 | if (!IsForeignUser(userID, out uri)) | ||
305 | return m_GridService.GetFolderItems(userID, folderID); | 279 | return m_GridService.GetFolderItems(userID, folderID); |
306 | else | 280 | else |
307 | { | 281 | { |
308 | UUID sessionID = GetSessionID(userID); | 282 | UUID sessionID = GetSessionID(userID); |
309 | string uri = GetUserInventoryURI(userID) + "/" + userID; | 283 | uri = uri + "/" + userID.ToString(); |
310 | return m_HGService.GetFolderItems(uri, folderID, sessionID); | 284 | return m_HGService.GetFolderItems(uri, folderID, sessionID); |
311 | } | 285 | } |
312 | } | 286 | } |
@@ -316,12 +290,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
316 | if (folder == null) | 290 | if (folder == null) |
317 | return false; | 291 | return false; |
318 | 292 | ||
319 | if (IsLocalGridUser(folder.Owner)) | 293 | string uri = string.Empty; |
294 | if (!IsForeignUser(folder.Owner, out uri)) | ||
320 | return m_GridService.AddFolder(folder); | 295 | return m_GridService.AddFolder(folder); |
321 | else | 296 | else |
322 | { | 297 | { |
323 | UUID sessionID = GetSessionID(folder.Owner); | 298 | UUID sessionID = GetSessionID(folder.Owner); |
324 | string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); | 299 | uri = uri + "/" + folder.Owner.ToString(); |
325 | return m_HGService.AddFolder(uri, folder, sessionID); | 300 | return m_HGService.AddFolder(uri, folder, sessionID); |
326 | } | 301 | } |
327 | } | 302 | } |
@@ -331,12 +306,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
331 | if (folder == null) | 306 | if (folder == null) |
332 | return false; | 307 | return false; |
333 | 308 | ||
334 | if (IsLocalGridUser(folder.Owner)) | 309 | string uri = string.Empty; |
310 | if (!IsForeignUser(folder.Owner, out uri)) | ||
335 | return m_GridService.UpdateFolder(folder); | 311 | return m_GridService.UpdateFolder(folder); |
336 | else | 312 | else |
337 | { | 313 | { |
338 | UUID sessionID = GetSessionID(folder.Owner); | 314 | UUID sessionID = GetSessionID(folder.Owner); |
339 | string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); | 315 | uri = uri + "/" + folder.Owner.ToString(); |
340 | return m_HGService.UpdateFolder(uri, folder, sessionID); | 316 | return m_HGService.UpdateFolder(uri, folder, sessionID); |
341 | } | 317 | } |
342 | } | 318 | } |
@@ -348,12 +324,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
348 | if (folderIDs.Count == 0) | 324 | if (folderIDs.Count == 0) |
349 | return false; | 325 | return false; |
350 | 326 | ||
351 | if (IsLocalGridUser(ownerID)) | 327 | string uri = string.Empty; |
328 | if (!IsForeignUser(ownerID, out uri)) | ||
352 | return m_GridService.DeleteFolders(ownerID, folderIDs); | 329 | return m_GridService.DeleteFolders(ownerID, folderIDs); |
353 | else | 330 | else |
354 | { | 331 | { |
355 | UUID sessionID = GetSessionID(ownerID); | 332 | UUID sessionID = GetSessionID(ownerID); |
356 | string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString(); | 333 | uri = uri + "/" + ownerID.ToString(); |
357 | return m_HGService.DeleteFolders(uri, folderIDs, sessionID); | 334 | return m_HGService.DeleteFolders(uri, folderIDs, sessionID); |
358 | } | 335 | } |
359 | } | 336 | } |
@@ -363,12 +340,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
363 | if (folder == null) | 340 | if (folder == null) |
364 | return false; | 341 | return false; |
365 | 342 | ||
366 | if (IsLocalGridUser(folder.Owner)) | 343 | string uri = string.Empty; |
344 | if (!IsForeignUser(folder.Owner, out uri)) | ||
367 | return m_GridService.MoveFolder(folder); | 345 | return m_GridService.MoveFolder(folder); |
368 | else | 346 | else |
369 | { | 347 | { |
370 | UUID sessionID = GetSessionID(folder.Owner); | 348 | UUID sessionID = GetSessionID(folder.Owner); |
371 | string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); | 349 | uri = uri + "/" + folder.Owner.ToString(); |
372 | return m_HGService.MoveFolder(uri, folder, sessionID); | 350 | return m_HGService.MoveFolder(uri, folder, sessionID); |
373 | } | 351 | } |
374 | } | 352 | } |
@@ -378,12 +356,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
378 | if (folder == null) | 356 | if (folder == null) |
379 | return false; | 357 | return false; |
380 | 358 | ||
381 | if (IsLocalGridUser(folder.Owner)) | 359 | string uri = string.Empty; |
360 | if (!IsForeignUser(folder.Owner, out uri)) | ||
382 | return m_GridService.PurgeFolder(folder); | 361 | return m_GridService.PurgeFolder(folder); |
383 | else | 362 | else |
384 | { | 363 | { |
385 | UUID sessionID = GetSessionID(folder.Owner); | 364 | UUID sessionID = GetSessionID(folder.Owner); |
386 | string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); | 365 | uri = uri + "/" + folder.Owner.ToString(); |
387 | return m_HGService.PurgeFolder(uri, folder, sessionID); | 366 | return m_HGService.PurgeFolder(uri, folder, sessionID); |
388 | } | 367 | } |
389 | } | 368 | } |
@@ -396,14 +375,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
396 | if (item == null) | 375 | if (item == null) |
397 | return false; | 376 | return false; |
398 | 377 | ||
399 | if (IsLocalGridUser(item.Owner)) | 378 | string uri = string.Empty; |
379 | if (!IsForeignUser(item.Owner, out uri)) | ||
400 | { | 380 | { |
401 | return m_GridService.AddItem(item); | 381 | return m_GridService.AddItem(item); |
402 | } | 382 | } |
403 | else | 383 | else |
404 | { | 384 | { |
405 | UUID sessionID = GetSessionID(item.Owner); | 385 | UUID sessionID = GetSessionID(item.Owner); |
406 | string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); | 386 | uri = uri + "/" + item.Owner.ToString(); |
407 | return m_HGService.AddItem(uri, item, sessionID); | 387 | return m_HGService.AddItem(uri, item, sessionID); |
408 | } | 388 | } |
409 | } | 389 | } |
@@ -413,12 +393,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
413 | if (item == null) | 393 | if (item == null) |
414 | return false; | 394 | return false; |
415 | 395 | ||
416 | if (IsLocalGridUser(item.Owner)) | 396 | string uri = string.Empty; |
397 | if (!IsForeignUser(item.Owner, out uri)) | ||
417 | return m_GridService.UpdateItem(item); | 398 | return m_GridService.UpdateItem(item); |
418 | else | 399 | else |
419 | { | 400 | { |
420 | UUID sessionID = GetSessionID(item.Owner); | 401 | UUID sessionID = GetSessionID(item.Owner); |
421 | string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); | 402 | uri = uri + "/" + item.Owner.ToString(); |
422 | return m_HGService.UpdateItem(uri, item, sessionID); | 403 | return m_HGService.UpdateItem(uri, item, sessionID); |
423 | } | 404 | } |
424 | } | 405 | } |
@@ -430,12 +411,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
430 | if (items.Count == 0) | 411 | if (items.Count == 0) |
431 | return true; | 412 | return true; |
432 | 413 | ||
433 | if (IsLocalGridUser(ownerID)) | 414 | string uri = string.Empty; |
415 | if (!IsForeignUser(ownerID, out uri)) | ||
434 | return m_GridService.MoveItems(ownerID, items); | 416 | return m_GridService.MoveItems(ownerID, items); |
435 | else | 417 | else |
436 | { | 418 | { |
437 | UUID sessionID = GetSessionID(ownerID); | 419 | UUID sessionID = GetSessionID(ownerID); |
438 | string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString(); | 420 | uri = uri + "/" + ownerID.ToString(); |
439 | return m_HGService.MoveItems(uri, items, sessionID); | 421 | return m_HGService.MoveItems(uri, items, sessionID); |
440 | } | 422 | } |
441 | } | 423 | } |
@@ -449,12 +431,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
449 | if (itemIDs.Count == 0) | 431 | if (itemIDs.Count == 0) |
450 | return true; | 432 | return true; |
451 | 433 | ||
452 | if (IsLocalGridUser(ownerID)) | 434 | string uri = string.Empty; |
435 | if (!IsForeignUser(ownerID, out uri)) | ||
453 | return m_GridService.DeleteItems(ownerID, itemIDs); | 436 | return m_GridService.DeleteItems(ownerID, itemIDs); |
454 | else | 437 | else |
455 | { | 438 | { |
456 | UUID sessionID = GetSessionID(ownerID); | 439 | UUID sessionID = GetSessionID(ownerID); |
457 | string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString(); | 440 | uri = uri + "/" + ownerID.ToString(); |
458 | return m_HGService.DeleteItems(uri, itemIDs, sessionID); | 441 | return m_HGService.DeleteItems(uri, itemIDs, sessionID); |
459 | } | 442 | } |
460 | } | 443 | } |
@@ -464,12 +447,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
464 | if (item == null) | 447 | if (item == null) |
465 | return null; | 448 | return null; |
466 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetItem {0} for user {1}", item.ID, item.Owner); | 449 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetItem {0} for user {1}", item.ID, item.Owner); |
467 | if (IsLocalGridUser(item.Owner)) | 450 | string uri = string.Empty; |
451 | if (!IsForeignUser(item.Owner, out uri)) | ||
468 | return m_GridService.GetItem(item); | 452 | return m_GridService.GetItem(item); |
469 | else | 453 | else |
470 | { | 454 | { |
471 | UUID sessionID = GetSessionID(item.Owner); | 455 | UUID sessionID = GetSessionID(item.Owner); |
472 | string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); | 456 | uri = uri + "/" + item.Owner.ToString(); |
473 | return m_HGService.QueryItem(uri, item, sessionID); | 457 | return m_HGService.QueryItem(uri, item, sessionID); |
474 | } | 458 | } |
475 | } | 459 | } |
@@ -479,12 +463,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
479 | if (folder == null) | 463 | if (folder == null) |
480 | return null; | 464 | return null; |
481 | 465 | ||
482 | if (IsLocalGridUser(folder.Owner)) | 466 | string uri = string.Empty; |
467 | if (!IsForeignUser(folder.Owner, out uri)) | ||
483 | return m_GridService.GetFolder(folder); | 468 | return m_GridService.GetFolder(folder); |
484 | else | 469 | else |
485 | { | 470 | { |
486 | UUID sessionID = GetSessionID(folder.Owner); | 471 | UUID sessionID = GetSessionID(folder.Owner); |
487 | string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); | 472 | uri = uri + "/" + folder.Owner.ToString(); |
488 | return m_HGService.QueryFolder(uri, folder, sessionID); | 473 | return m_HGService.QueryFolder(uri, folder, sessionID); |
489 | } | 474 | } |
490 | } | 475 | } |
@@ -501,12 +486,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
501 | 486 | ||
502 | public override int GetAssetPermissions(UUID userID, UUID assetID) | 487 | public override int GetAssetPermissions(UUID userID, UUID assetID) |
503 | { | 488 | { |
504 | if (IsLocalGridUser(userID)) | 489 | string uri = string.Empty; |
490 | if (!IsForeignUser(userID, out uri)) | ||
505 | return m_GridService.GetAssetPermissions(userID, assetID); | 491 | return m_GridService.GetAssetPermissions(userID, assetID); |
506 | else | 492 | else |
507 | { | 493 | { |
508 | UUID sessionID = GetSessionID(userID); | 494 | UUID sessionID = GetSessionID(userID); |
509 | string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); | 495 | uri = uri + "/" + userID.ToString(); |
510 | return m_HGService.GetAssetPermissions(uri, assetID, sessionID); | 496 | return m_HGService.GetAssetPermissions(uri, assetID, sessionID); |
511 | } | 497 | } |
512 | } | 498 | } |
@@ -515,61 +501,40 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
515 | 501 | ||
516 | private UUID GetSessionID(UUID userID) | 502 | private UUID GetSessionID(UUID userID) |
517 | { | 503 | { |
518 | CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); | 504 | ScenePresence sp = null; |
519 | if (uinfo != null) | 505 | if (m_Scene.TryGetAvatar(userID, out sp)) |
520 | return uinfo.SessionID; | 506 | { |
507 | return sp.ControllingClient.SessionId; | ||
508 | } | ||
521 | 509 | ||
522 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user profile for {0} not found", userID); | 510 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: scene presence for {0} not found", userID); |
523 | return UUID.Zero; | 511 | return UUID.Zero; |
524 | } | 512 | } |
525 | 513 | ||
526 | private bool IsLocalGridUser(UUID userID) | 514 | private bool IsForeignUser(UUID userID, out string inventoryURL) |
527 | { | 515 | { |
528 | if (m_UserProfileService == null) | 516 | inventoryURL = string.Empty; |
529 | { | 517 | UserAccount account = null; |
530 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile service. Returning false."); | 518 | if (m_Scene.UserAccountService != null) |
531 | return false; | 519 | account = m_Scene.UserAccountService.GetUserAccount(m_Scene.RegionInfo.ScopeID, userID); |
532 | } | ||
533 | 520 | ||
534 | CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); | 521 | if (account == null) // foreign user |
535 | if (uinfo == null) | ||
536 | { | 522 | { |
537 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile for user {0}. Returning true.", userID); | 523 | ScenePresence sp = null; |
538 | return true; | 524 | m_Scene.TryGetAvatar(userID, out sp); |
539 | } | 525 | if (sp != null) |
540 | 526 | { | |
541 | if ((uinfo.UserProfile.UserInventoryURI == null) || (uinfo.UserProfile.UserInventoryURI == "")) | 527 | AgentCircuitData aCircuit = m_Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); |
542 | // this happens in standalone profiles, apparently | 528 | if (aCircuit.ServiceURLs.ContainsKey("InventoryServerURI")) |
543 | return true; | 529 | { |
544 | 530 | inventoryURL = aCircuit.ServiceURLs["InventoryServerURI"].ToString(); | |
545 | string userInventoryServerURI = Util.ServerURI(uinfo.UserProfile.UserInventoryURI); | 531 | inventoryURL = inventoryURL.Trim(new char[] { '/' }); |
546 | 532 | return true; | |
547 | string uri = LocalGridInventory.TrimEnd('/'); | 533 | } |
548 | 534 | } | |
549 | if ((userInventoryServerURI == uri) || (userInventoryServerURI == "")) | ||
550 | { | ||
551 | return true; | ||
552 | } | 535 | } |
553 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user {0} is foreign({1} - {2})", userID, userInventoryServerURI, uri); | ||
554 | return false; | 536 | return false; |
555 | } | 537 | } |
556 | 538 | ||
557 | private string GetUserInventoryURI(UUID userID) | ||
558 | { | ||
559 | string invURI = LocalGridInventory; | ||
560 | |||
561 | CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); | ||
562 | if ((uinfo == null) || (uinfo.UserProfile == null)) | ||
563 | return invURI; | ||
564 | |||
565 | string userInventoryServerURI = Util.ServerURI(uinfo.UserProfile.UserInventoryURI); | ||
566 | |||
567 | if ((userInventoryServerURI != null) && | ||
568 | (userInventoryServerURI != "")) | ||
569 | invURI = userInventoryServerURI; | ||
570 | return invURI; | ||
571 | } | ||
572 | |||
573 | |||
574 | } | 539 | } |
575 | } | 540 | } |