aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs149
1 files changed, 3 insertions, 146 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 0f422ae..7f9175d 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -51,8 +51,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
51 51
52 private bool m_Initialized = false; 52 private bool m_Initialized = false;
53 53
54 private bool m_RestrictInventoryAccessAbroad = false;
55
56 private GatekeeperServiceConnector m_GatekeeperConnector; 54 private GatekeeperServiceConnector m_GatekeeperConnector;
57 55
58 #region ISharedRegionModule 56 #region ISharedRegionModule
@@ -71,10 +69,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
71 if (name == Name) 69 if (name == Name)
72 { 70 {
73 InitialiseCommon(source); 71 InitialiseCommon(source);
74 IConfig transferConfig = source.Configs["HGEntityTransferModule"];
75 if (transferConfig != null)
76 m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false);
77
78 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name); 72 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name);
79 } 73 }
80 } 74 }
@@ -94,44 +88,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
94 client.OnTeleportHomeRequest += TeleportHome; 88 client.OnTeleportHomeRequest += TeleportHome;
95 client.OnTeleportLandmarkRequest += RequestTeleportLandmark; 89 client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
96 client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); 90 client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed);
97 client.OnCompleteMovementToRegion += new Action<IClientAPI, bool>(OnCompleteMovementToRegion);
98 } 91 }
99 92
100 protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2)
101 {
102 // HACK HACK -- just seeing how the viewer responds
103 // Let's send the Suitcase or the real root folder folder for incoming HG agents
104 // Visiting agents get their suitcase contents; incoming local users get their real root folder's content
105 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: OnCompleteMovementToRegion of user {0}", client.AgentId);
106 object sp = null;
107 if (client.Scene.TryGetScenePresence(client.AgentId, out sp))
108 {
109 if (sp is ScenePresence)
110 {
111 AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId);
112 if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0)
113 {
114 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: ViaHGLogin");
115 if (m_RestrictInventoryAccessAbroad)
116 {
117 IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>();
118 if (uMan.IsLocalGridUser(client.AgentId))
119 {
120 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local");
121 RestoreRootFolderContents(client);
122 }
123 else
124 {
125 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign");
126 RestoreSuitcaseFolderContents(client);
127 }
128 }
129 }
130 }
131 }
132 }
133
134
135 public override void RegionLoaded(Scene scene) 93 public override void RegionLoaded(Scene scene)
136 { 94 {
137 base.RegionLoaded(scene); 95 base.RegionLoaded(scene);
@@ -141,12 +99,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
141 m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); 99 m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService);
142 m_Initialized = true; 100 m_Initialized = true;
143 101
144 scene.AddCommand(
145 "HG", this, "send inventory",
146 "send inventory",
147 "Don't use this",
148 HandleSendInventory);
149
150 } 102 }
151 103
152 } 104 }
@@ -219,21 +171,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
219 bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason); 171 bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason);
220 logout = success; // flag for later logout from this grid; this is an HG TP 172 logout = success; // flag for later logout from this grid; this is an HG TP
221 173
222 if (success && m_RestrictInventoryAccessAbroad) 174 if (success)
223 { 175 sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout);
224 IUserManagement uMan = m_aScene.RequestModuleInterface<IUserManagement>();
225 if (uMan != null && uMan.IsLocalGridUser(sp.UUID))
226 {
227 // local grid user
228 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local");
229 RemoveRootFolderContents(sp.ControllingClient);
230 }
231 else
232 {
233 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign");
234 RemoveSuitcaseFolderContents(sp.ControllingClient);
235 }
236 }
237 176
238 return success; 177 return success;
239 } 178 }
@@ -244,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
244 } 183 }
245 } 184 }
246 185
247 return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason); 186 return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout);
248 } 187 }
249 188
250 public override void TeleportHome(UUID id, IClientAPI client) 189 public override void TeleportHome(UUID id, IClientAPI client)
@@ -348,15 +287,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
348 287
349 } 288 }
350 289
351 protected override void Fail(ScenePresence sp, GridRegion finalDestination, bool logout)
352 {
353 base.Fail(sp, finalDestination, logout);
354 if (logout && m_RestrictInventoryAccessAbroad)
355 {
356 RestoreRootFolderContents(sp.ControllingClient);
357 }
358 }
359
360 #endregion 290 #endregion
361 291
362 #region IUserAgentVerificationModule 292 #region IUserAgentVerificationModule
@@ -411,71 +341,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
411 341
412 #endregion 342 #endregion
413 343
414 private void RemoveRootFolderContents(IClientAPI client)
415 {
416 // TODO tell the viewer to remove the root folder's content
417 if (client is IClientCore)
418 {
419 IClientCore core = (IClientCore)client;
420 IClientInventory inv;
421
422 if (core.TryGet<IClientInventory>(out inv))
423 {
424 InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
425 if (root != null)
426 {
427 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.Name);
428 InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
429 List<UUID> fids = new List<UUID>();
430 List<UUID> iids = new List<UUID>();
431 List<InventoryFolderBase> keep = new List<InventoryFolderBase>();
432
433 foreach (InventoryFolderBase f in content.Folders)
434 {
435 if (f.Name != "My Suitcase")
436 {
437 f.Name = f.Name + " (Unavailable)";
438 keep.Add(f);
439 }
440 }
441
442 // items directly under the root folder
443 foreach (InventoryItemBase it in content.Items)
444 it.Name = it.Name + " (Unavailable)"; ;
445
446 // Send the new names
447 inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray());
448
449 }
450 }
451 }
452 }
453
454 private void RemoveSuitcaseFolderContents(IClientAPI client)
455 {
456 }
457
458 private void RestoreRootFolderContents(IClientAPI client)
459 {
460 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root folder");
461 if (client is IClientCore)
462 {
463 IClientCore core = (IClientCore)client;
464 IClientInventory inv;
465
466 if (core.TryGet<IClientInventory>(out inv))
467 {
468 InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
469 InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
470
471 inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray());
472 }
473 }
474 }
475
476 private void RestoreSuitcaseFolderContents(IClientAPI client)
477 {
478 }
479 344
480 private GridRegion MakeRegion(AgentCircuitData aCircuit) 345 private GridRegion MakeRegion(AgentCircuitData aCircuit)
481 { 346 {
@@ -494,13 +359,5 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
494 return region; 359 return region;
495 } 360 }
496 361
497 protected void HandleSendInventory(string module, string[] cmd)
498 {
499 m_Scenes[0].ForEachClient(delegate(IClientAPI client)
500 {
501 RestoreRootFolderContents(client);
502 });
503 }
504
505 } 362 }
506} 363}