aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
authorDiva Canto2012-03-28 15:01:37 -0700
committerDiva Canto2012-03-28 15:01:37 -0700
commit51dc1e709c1941c7a436fa50cf84a6381591b990 (patch)
tree1896055e4dcc5fba846f8d34ab2322fc916196ff /OpenSim/Region/CoreModules
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC-51dc1e709c1941c7a436fa50cf84a6381591b990.zip
opensim-SC-51dc1e709c1941c7a436fa50cf84a6381591b990.tar.gz
opensim-SC-51dc1e709c1941c7a436fa50cf84a6381591b990.tar.bz2
opensim-SC-51dc1e709c1941c7a436fa50cf84a6381591b990.tar.xz
HG 2.0: added the beginning of HGSuitcaseInventoryService. Plus moved the hack away from ScenePresence. This is better but it still doesn't restore the inventory upon arrival.
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs68
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}