diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 4cdf303..e8d821f 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | |||
@@ -71,7 +71,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
71 | if (name == Name) | 71 | if (name == Name) |
72 | { | 72 | { |
73 | InitialiseCommon(source); | 73 | InitialiseCommon(source); |
74 | IConfig transferConfig = source.Configs["HGEntityTransfer"]; | 74 | IConfig transferConfig = source.Configs["HGEntityTransferModule"]; |
75 | if (transferConfig != null) | 75 | if (transferConfig != null) |
76 | m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false); | 76 | m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false); |
77 | 77 | ||
@@ -94,6 +94,31 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
94 | client.OnTeleportHomeRequest += TeleportHome; | 94 | client.OnTeleportHomeRequest += TeleportHome; |
95 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | 95 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; |
96 | client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); | 96 | client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); |
97 | client.OnCompleteMovementToRegion += new Action<IClientAPI, bool>(OnCompleteMovementToRegion); | ||
98 | } | ||
99 | |||
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 | RestoreRootFolderContents(client); | ||
118 | } | ||
119 | } | ||
120 | } | ||
121 | } | ||
97 | } | 122 | } |
98 | 123 | ||
99 | 124 | ||
@@ -105,6 +130,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
105 | { | 130 | { |
106 | m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); | 131 | m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); |
107 | m_Initialized = true; | 132 | m_Initialized = true; |
133 | |||
134 | scene.AddCommand( | ||
135 | "HG", this, "send inventory", | ||
136 | "send inventory", | ||
137 | "Don't use this", | ||
138 | HandleSendInventory); | ||
139 | |||
108 | } | 140 | } |
109 | 141 | ||
110 | } | 142 | } |
@@ -369,7 +401,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
369 | InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); | 401 | InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); |
370 | if (root != null) | 402 | if (root != null) |
371 | { | 403 | { |
372 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory"); | 404 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.AgentId); |
373 | InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); | 405 | InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); |
374 | UUID[] ids = new UUID[content.Folders.Count]; | 406 | UUID[] ids = new UUID[content.Folders.Count]; |
375 | int i = 0; | 407 | int i = 0; |
@@ -388,12 +420,25 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
388 | 420 | ||
389 | private void RestoreRootFolderContents(IClientAPI client) | 421 | private void RestoreRootFolderContents(IClientAPI client) |
390 | { | 422 | { |
391 | // Restore the user's inventory, because we removed it earlier on | 423 | if (client is IClientCore) |
392 | InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); | ||
393 | if (root != null) | ||
394 | { | 424 | { |
395 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory"); | 425 | IClientCore core = (IClientCore)client; |
396 | client.SendBulkUpdateInventory(root); | 426 | IClientInventory inv; |
427 | |||
428 | if (core.TryGet<IClientInventory>(out inv)) | ||
429 | { | ||
430 | InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); | ||
431 | if (root != null) | ||
432 | { | ||
433 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); | ||
434 | InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); | ||
435 | m_log.DebugFormat("[XXX]: Folder name {0}, id {1}, parent {2}", root.Name, root.ID, root.ParentID); | ||
436 | foreach (InventoryItemBase i in content.Items) | ||
437 | m_log.DebugFormat("[XXX]: Name={0}, folderID={1}", i.Name, i.Folder); | ||
438 | |||
439 | inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); | ||
440 | } | ||
441 | } | ||
397 | } | 442 | } |
398 | } | 443 | } |
399 | 444 | ||
@@ -413,5 +458,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
413 | region.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), (int)0); | 458 | region.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), (int)0); |
414 | return region; | 459 | return region; |
415 | } | 460 | } |
461 | |||
462 | protected void HandleSendInventory(string module, string[] cmd) | ||
463 | { | ||
464 | m_Scenes[0].ForEachClient(delegate(IClientAPI client) | ||
465 | { | ||
466 | RestoreRootFolderContents(client); | ||
467 | }); | ||
468 | } | ||
469 | |||
416 | } | 470 | } |
417 | } | 471 | } |