aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework/InventoryAccess
diff options
context:
space:
mode:
authorDiva Canto2012-04-06 20:34:31 -0700
committerDiva Canto2012-04-06 20:34:31 -0700
commit9637e509567efe512d4b29ea925c10011cdbe99e (patch)
tree405eaf60308ba06c3ba40a792ecfe17d20495d01 /OpenSim/Region/CoreModules/Framework/InventoryAccess
parentDeleted the unused and commented code from 2 commits ago. (diff)
downloadopensim-SC_OLD-9637e509567efe512d4b29ea925c10011cdbe99e.zip
opensim-SC_OLD-9637e509567efe512d4b29ea925c10011cdbe99e.tar.gz
opensim-SC_OLD-9637e509567efe512d4b29ea925c10011cdbe99e.tar.bz2
opensim-SC_OLD-9637e509567efe512d4b29ea925c10011cdbe99e.tar.xz
Moved the inventory manipulation from HGEntityTransferModule to HGInventoryAccessModule where it belongs. They need to exchange some events, so added those to EventManager. Those events (TeleportStart and TeleportFail) are nice to have anyway.
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/InventoryAccess')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs152
1 files changed, 149 insertions, 3 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
index d2fe388..a71584a 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
@@ -30,6 +30,7 @@ using System.Collections.Generic;
30using System.Reflection; 30using System.Reflection;
31 31
32using OpenSim.Framework; 32using OpenSim.Framework;
33using OpenSim.Framework.Client;
33using OpenSim.Region.Framework.Interfaces; 34using OpenSim.Region.Framework.Interfaces;
34using OpenSim.Region.Framework.Scenes; 35using OpenSim.Region.Framework.Scenes;
35using OpenSim.Services.Connectors.Hypergrid; 36using OpenSim.Services.Connectors.Hypergrid;
@@ -57,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
57 private string m_HomeURI; 58 private string m_HomeURI;
58 private bool m_OutboundPermission; 59 private bool m_OutboundPermission;
59 private string m_ThisGatekeeper; 60 private string m_ThisGatekeeper;
61 private bool m_RestrictInventoryAccessAbroad;
60 62
61// private bool m_Initialized = false; 63// private bool m_Initialized = false;
62 64
@@ -90,6 +92,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
90 m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); 92 m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI);
91 m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); 93 m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true);
92 m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); 94 m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty);
95 m_RestrictInventoryAccessAbroad = thisModuleConfig.GetBoolean("RestrictInventoryAccessAbroad", false);
93 } 96 }
94 else 97 else
95 m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); 98 m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!");
@@ -105,13 +108,79 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
105 base.AddRegion(scene); 108 base.AddRegion(scene);
106 m_assMapper = new HGAssetMapper(scene, m_HomeURI); 109 m_assMapper = new HGAssetMapper(scene, m_HomeURI);
107 scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; 110 scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem;
108 111 scene.EventManager.OnTeleportStart += TeleportStart;
112 scene.EventManager.OnTeleportFail += TeleportFail;
109 } 113 }
110 114
111 #endregion 115 #endregion
112 116
113 #region Event handlers 117 #region Event handlers
114 118
119 protected override void OnNewClient(IClientAPI client)
120 {
121 base.OnNewClient(client);
122 client.OnCompleteMovementToRegion += new Action<IClientAPI, bool>(OnCompleteMovementToRegion);
123 }
124
125 protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2)
126 {
127 //m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: OnCompleteMovementToRegion of user {0}", client.Name);
128 object sp = null;
129 if (client.Scene.TryGetScenePresence(client.AgentId, out sp))
130 {
131 if (sp is ScenePresence)
132 {
133 AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId);
134 if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0)
135 {
136 if (m_RestrictInventoryAccessAbroad)
137 {
138 IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>();
139 if (uMan.IsLocalGridUser(client.AgentId))
140 ProcessInventoryForComingHome(client);
141 else
142 ProcessInventoryForArriving(client);
143 }
144 }
145 }
146 }
147 }
148
149 protected void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout)
150 {
151 if (gridLogout && m_RestrictInventoryAccessAbroad)
152 {
153 IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>();
154 if (uMan != null && uMan.IsLocalGridUser(client.AgentId))
155 {
156 // local grid user
157 ProcessInventoryForHypergriding(client);
158 }
159 else
160 {
161 // Foreigner
162 ProcessInventoryForLeaving(client);
163 }
164 }
165
166 }
167
168 protected void TeleportFail(IClientAPI client, bool gridLogout)
169 {
170 if (gridLogout && m_RestrictInventoryAccessAbroad)
171 {
172 IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>();
173 if (uMan.IsLocalGridUser(client.AgentId))
174 {
175 ProcessInventoryForComingHome(client);
176 }
177 else
178 {
179 ProcessInventoryForArriving(client);
180 }
181 }
182 }
183
115 public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) 184 public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel)
116 { 185 {
117 string userAssetServer = string.Empty; 186 string userAssetServer = string.Empty;
@@ -236,8 +305,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
236 return false; 305 return false;
237 } 306 }
238 307
239 #endregion
240
241 protected override InventoryItemBase GetItem(UUID agentID, UUID itemID) 308 protected override InventoryItemBase GetItem(UUID agentID, UUID itemID)
242 { 309 {
243 InventoryItemBase item = base.GetItem(agentID, itemID); 310 InventoryItemBase item = base.GetItem(agentID, itemID);
@@ -248,5 +315,84 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
248 315
249 return item; 316 return item;
250 } 317 }
318
319 #endregion
320
321 #region Inventory manipulation upon arriving/leaving
322
323 //
324 // These 2 are for local and foreign users coming back, respectively
325 //
326
327 private void ProcessInventoryForComingHome(IClientAPI client)
328 {
329 m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Restoring root folder for local user {0}", client.Name);
330 if (client is IClientCore)
331 {
332 IClientCore core = (IClientCore)client;
333 IClientInventory inv;
334
335 if (core.TryGet<IClientInventory>(out inv))
336 {
337 InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId);
338 InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID);
339
340 inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray());
341 }
342 }
343 }
344
345 private void ProcessInventoryForArriving(IClientAPI client)
346 {
347 }
348
349 //
350 // These 2 are for local and foreign users going away respectively
351 //
352
353 private void ProcessInventoryForHypergriding(IClientAPI client)
354 {
355 if (client is IClientCore)
356 {
357 IClientCore core = (IClientCore)client;
358 IClientInventory inv;
359
360 if (core.TryGet<IClientInventory>(out inv))
361 {
362 InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId);
363 if (root != null)
364 {
365 m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Changing root inventory for user {0}", client.Name);
366 InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID);
367 List<UUID> fids = new List<UUID>();
368 List<UUID> iids = new List<UUID>();
369 List<InventoryFolderBase> keep = new List<InventoryFolderBase>();
370
371 foreach (InventoryFolderBase f in content.Folders)
372 {
373 if (f.Name != "My Suitcase")
374 {
375 f.Name = f.Name + " (Unavailable)";
376 keep.Add(f);
377 }
378 }
379
380 // items directly under the root folder
381 foreach (InventoryItemBase it in content.Items)
382 it.Name = it.Name + " (Unavailable)"; ;
383
384 // Send the new names
385 inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray());
386
387 }
388 }
389 }
390 }
391
392 private void ProcessInventoryForLeaving(IClientAPI client)
393 {
394 }
395
396 #endregion
251 } 397 }
252} 398}