aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs401
1 files changed, 401 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
new file mode 100644
index 0000000..9f6c1a2
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -0,0 +1,401 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using log4net;
29using Nini.Config;
30using System;
31using System.Collections.Generic;
32using System.Reflection;
33using OpenSim.Framework;
34using OpenSim.Framework.Communications.Cache;
35using OpenSim.Server.Base;
36using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Services.Interfaces;
39using OpenSim.Services.Connectors;
40using OpenMetaverse;
41
42namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
43{
44 public class HGInventoryBroker : ISharedRegionModule, IInventoryService
45 {
46 private static readonly ILog m_log =
47 LogManager.GetLogger(
48 MethodBase.GetCurrentMethod().DeclaringType);
49
50 private bool m_Enabled = false;
51 private bool m_Initialized = 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
58 private string m_LocalGridInventoryURI = string.Empty;
59 public string Name
60 {
61 get { return "HGInventoryBroker"; }
62 }
63
64 public void Initialise(IConfigSource source)
65 {
66 IConfig moduleConfig = source.Configs["Modules"];
67 if (moduleConfig != null)
68 {
69 string name = moduleConfig.GetString("InventoryServices", "");
70 if (name == Name)
71 {
72 IConfig inventoryConfig = source.Configs["InventoryService"];
73 if (inventoryConfig == null)
74 {
75 m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini");
76 return;
77 }
78
79 string localDll = inventoryConfig.GetString("LocalGridInventoryService",
80 String.Empty);
81 string HGDll = inventoryConfig.GetString("HypergridInventoryService",
82 String.Empty);
83
84 if (localDll == String.Empty)
85 {
86 m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService");
87 //return;
88 throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's");
89 }
90
91 if (HGDll == String.Empty)
92 {
93 m_log.Error("[HG INVENTORY CONNECTOR]: No HypergridInventoryService 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 Object[] args = new Object[] { source };
99 m_GridService =
100 ServerUtils.LoadPlugin<IInventoryService>(localDll,
101 args);
102
103 m_HGService =
104 ServerUtils.LoadPlugin<ISessionAuthInventoryService>(HGDll,
105 args);
106
107 if (m_GridService == null)
108 {
109 m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service");
110 return;
111 }
112 if (m_HGService == null)
113 {
114 m_log.Error("[HG INVENTORY CONNECTOR]: Can't load hypergrid inventory service");
115 return;
116 }
117
118 m_LocalGridInventoryURI = inventoryConfig.GetString("InventoryServerURI", string.Empty);
119
120 m_Enabled = true;
121 m_log.Info("[HG INVENTORY CONNECTOR]: HG inventory broker enabled");
122 }
123 }
124 }
125
126 public void PostInitialise()
127 {
128 }
129
130 public void Close()
131 {
132 }
133
134 public void AddRegion(Scene scene)
135 {
136 if (!m_Enabled)
137 return;
138
139 if (!m_Initialized)
140 {
141 m_Scene = scene;
142 // HACK for now. Ugh!
143 m_UserProfileService = m_Scene.CommsManager.UserProfileCacheService;
144 // ugh!
145 m_UserProfileService.SetInventoryService(this);
146 scene.CommsManager.UserService.SetInventoryService(this);
147
148 m_Initialized = true;
149 }
150
151 scene.RegisterModuleInterface<IInventoryService>(this);
152 }
153
154 public void RemoveRegion(Scene scene)
155 {
156 }
157
158 public void RegionLoaded(Scene scene)
159 {
160 if (!m_Enabled)
161 return;
162
163 m_log.InfoFormat("[INVENTORY CONNECTOR]: Enabled HG inventory for region {0}", scene.RegionInfo.RegionName);
164
165 }
166
167 #region IInventoryService
168
169 public bool CreateUserInventory(UUID userID)
170 {
171 return m_GridService.CreateUserInventory(userID);
172 }
173
174 public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
175 {
176 return m_GridService.GetInventorySkeleton(userId);
177 }
178
179 public InventoryCollection GetUserInventory(UUID userID)
180 {
181 if (IsLocalGridUser(userID))
182 return m_GridService.GetUserInventory(userID);
183 else
184 return null;
185 }
186
187 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
188 {
189 if (IsLocalGridUser(userID))
190 m_GridService.GetUserInventory(userID, callback);
191 else
192 {
193 UUID sessionID = GetSessionID(userID);
194 string uri = GetUserInventoryURI(userID) + "/" + userID.ToString();
195 m_HGService.GetUserInventory(uri, sessionID, callback);
196 }
197 }
198
199 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
200 {
201 return new List<InventoryItemBase>();
202 }
203
204 public bool AddFolder(InventoryFolderBase folder)
205 {
206 if (folder == null)
207 return false;
208
209 if (IsLocalGridUser(folder.Owner))
210 return m_GridService.AddFolder(folder);
211 else
212 {
213 UUID sessionID = GetSessionID(folder.Owner);
214 string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString();
215 return m_HGService.AddFolder(uri, folder, sessionID);
216 }
217 }
218
219 public bool UpdateFolder(InventoryFolderBase folder)
220 {
221 if (folder == null)
222 return false;
223
224 if (IsLocalGridUser(folder.Owner))
225 return m_GridService.UpdateFolder(folder);
226 else
227 {
228 UUID sessionID = GetSessionID(folder.Owner);
229 string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString();
230 return m_HGService.UpdateFolder(uri, folder, sessionID);
231 }
232 }
233
234 public bool MoveFolder(InventoryFolderBase folder)
235 {
236 if (folder == null)
237 return false;
238
239 if (IsLocalGridUser(folder.Owner))
240 return m_GridService.MoveFolder(folder);
241 else
242 {
243 UUID sessionID = GetSessionID(folder.Owner);
244 string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString();
245 return m_HGService.MoveFolder(uri, folder, sessionID);
246 }
247 }
248
249 public bool PurgeFolder(InventoryFolderBase folder)
250 {
251 if (folder == null)
252 return false;
253
254 if (IsLocalGridUser(folder.Owner))
255 return m_GridService.PurgeFolder(folder);
256 else
257 {
258 UUID sessionID = GetSessionID(folder.Owner);
259 string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString();
260 return m_HGService.PurgeFolder(uri, folder, sessionID);
261 }
262 }
263
264 public bool AddItem(InventoryItemBase item)
265 {
266 if (item == null)
267 return false;
268
269 if (IsLocalGridUser(item.Owner))
270 return m_GridService.AddItem(item);
271 else
272 {
273 UUID sessionID = GetSessionID(item.Owner);
274 string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString();
275 return m_HGService.AddItem(uri, item, sessionID);
276 }
277 }
278
279 public bool UpdateItem(InventoryItemBase item)
280 {
281 if (item == null)
282 return false;
283
284 if (IsLocalGridUser(item.Owner))
285 return m_GridService.UpdateItem(item);
286 else
287 {
288 UUID sessionID = GetSessionID(item.Owner);
289 string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString();
290 return m_HGService.UpdateItem(uri, item, sessionID);
291 }
292 }
293
294 public bool DeleteItem(InventoryItemBase item)
295 {
296 if (item == null)
297 return false;
298
299 if (IsLocalGridUser(item.Owner))
300 return m_GridService.DeleteItem(item);
301 else
302 {
303 UUID sessionID = GetSessionID(item.Owner);
304 string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString();
305 return m_HGService.DeleteItem(uri, item, sessionID);
306 }
307 }
308
309 public InventoryItemBase QueryItem(InventoryItemBase item)
310 {
311 if (item == null)
312 return null;
313
314 if (IsLocalGridUser(item.Owner))
315 return m_GridService.QueryItem(item);
316 else
317 {
318 UUID sessionID = GetSessionID(item.Owner);
319 string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString();
320 return m_HGService.QueryItem(uri, item, sessionID);
321 }
322 }
323
324 public InventoryFolderBase QueryFolder(InventoryFolderBase folder)
325 {
326 if (folder == null)
327 return null;
328
329 if (IsLocalGridUser(folder.Owner))
330 return m_GridService.QueryFolder(folder);
331 else
332 {
333 UUID sessionID = GetSessionID(folder.Owner);
334 string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString();
335 return m_HGService.QueryFolder(uri, folder, sessionID);
336 }
337 }
338
339 public bool HasInventoryForUser(UUID userID)
340 {
341 return false;
342 }
343
344 public InventoryFolderBase RequestRootFolder(UUID userID)
345 {
346 return null;
347 }
348
349 public List<InventoryItemBase> GetActiveGestures(UUID userId)
350 {
351 return new List<InventoryItemBase>();
352 }
353
354 #endregion
355
356 private UUID GetSessionID(UUID userID)
357 {
358 ScenePresence sp = m_Scene.GetScenePresence(userID);
359 if (sp != null)
360 return sp.ControllingClient.SessionId;
361
362 return UUID.Zero;
363 }
364
365 private bool IsLocalGridUser(UUID userID)
366 {
367 if (m_UserProfileService == null)
368 return false;
369
370 CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID);
371 if (uinfo == null)
372 return true;
373
374 string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI);
375
376 if ((userInventoryServerURI == m_LocalGridInventoryURI) || (userInventoryServerURI == ""))
377 {
378 return true;
379 }
380 return false;
381 }
382
383 private string GetUserInventoryURI(UUID userID)
384 {
385 string invURI = m_LocalGridInventoryURI;
386
387 CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID);
388 if ((uinfo == null) || (uinfo.UserProfile == null))
389 return invURI;
390
391 string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI);
392
393 if ((userInventoryServerURI != null) &&
394 (userInventoryServerURI != ""))
395 invURI = userInventoryServerURI;
396 return invURI;
397 }
398
399
400 }
401}