From 51dc1e709c1941c7a436fa50cf84a6381591b990 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 28 Mar 2012 15:01:37 -0700
Subject: 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.

---
 .../EntityTransfer/HGEntityTransferModule.cs       | 68 +++++++++++++++++++---
 OpenSim/Region/Framework/Scenes/ScenePresence.cs   | 16 -----
 2 files changed, 61 insertions(+), 23 deletions(-)

(limited to 'OpenSim/Region')

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
                 if (name == Name)
                 {
                     InitialiseCommon(source);
-                    IConfig transferConfig = source.Configs["HGEntityTransfer"];
+                    IConfig transferConfig = source.Configs["HGEntityTransferModule"];
                     if (transferConfig != null)
                         m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false);
 
@@ -94,6 +94,31 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
             client.OnTeleportHomeRequest += TeleportHome;
             client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
             client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed);
+            client.OnCompleteMovementToRegion += new Action<IClientAPI, bool>(OnCompleteMovementToRegion);
+        }
+
+        protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2)
+        {
+            // HACK HACK -- just seeing how the viewer responds
+            // Let's send the Suitcase or the real root folder folder for incoming HG agents
+            // Visiting agents get their suitcase contents; incoming local users get their real root folder's content
+            m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: OnCompleteMovementToRegion of user {0}", client.AgentId);
+            object sp = null;
+            if (client.Scene.TryGetScenePresence(client.AgentId, out sp))
+            {
+                if (sp is ScenePresence)
+                {
+                    AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId);
+                    if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0)
+                    {
+                        m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: ViaHGLogin");
+                        if (m_RestrictInventoryAccessAbroad)
+                        {
+                            RestoreRootFolderContents(client);
+                        }
+                    }
+                }
+            }
         }
 
 
@@ -105,6 +130,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
                 {
                     m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService);
                     m_Initialized = true;
+
+                    scene.AddCommand(
+                    "HG", this, "send inventory",
+                    "send inventory",
+                    "Don't use this",
+                    HandleSendInventory);
+
                 }
 
         }
@@ -369,7 +401,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
                     InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
                     if (root != null)
                     {
-                        m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory");
+                        m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.AgentId);
                         InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
                         UUID[] ids = new UUID[content.Folders.Count];
                         int i = 0;
@@ -388,12 +420,25 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
 
         private void RestoreRootFolderContents(IClientAPI client)
         {
-            // Restore the user's inventory, because we removed it earlier on
-            InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
-            if (root != null)
+            if (client is IClientCore)
             {
-                m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory");
-                client.SendBulkUpdateInventory(root);
+                IClientCore core = (IClientCore)client;
+                IClientInventory inv;
+
+                if (core.TryGet<IClientInventory>(out inv))
+                {
+                    InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
+                    if (root != null)
+                    {
+                        m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId);
+                        InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
+                        m_log.DebugFormat("[XXX]: Folder name {0}, id {1}, parent {2}", root.Name, root.ID, root.ParentID);
+                        foreach (InventoryItemBase i in content.Items)
+                            m_log.DebugFormat("[XXX]:   Name={0}, folderID={1}", i.Name, i.Folder);
+
+                        inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray());
+                    }
+                }
             }
         }
 
@@ -413,5 +458,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
             region.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), (int)0);
             return region;
         }
+
+        protected void HandleSendInventory(string module, string[] cmd)
+        {
+            m_Scenes[0].ForEachClient(delegate(IClientAPI client)
+            {
+                RestoreRootFolderContents(client);
+            });
+        }
+
     }
 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 547f66f..19dab32 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1163,22 +1163,6 @@ namespace OpenSim.Region.Framework.Scenes
                     friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
             }
 
-            // HACK HACK -- just seeing how the viewer responds
-            // Let's send the Suitcase or the real root folder folder for incoming HG agents
-            // Visiting agents get their suitcase contents; incoming local users get their real root folder's content
-            AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(UUID);
-            if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0)
-            {
-                // HACK FOR NOW. JUST TESTING, SO KEEPING EVERYONE ELSE OUT OF THESE TESTS
-                IConfig config = m_scene.Config.Configs["HGEntityTransferModule"];
-                if (config != null && config.GetBoolean("RestrictInventoryAccessAbroad", false))
-                {
-                    m_log.DebugFormat("[SCENE]: Sending root folder to viewer...");
-                    InventoryFolderBase root = m_scene.InventoryService.GetRootFolder(client.AgentId);
-                    //InventoryCollection rootContents = InventoryService.GetFolderContent(client.AgentId, root.ID);
-                    client.SendBulkUpdateInventory(root);
-                }
-            }
 
 //            m_log.DebugFormat(
 //                "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms", 
-- 
cgit v1.1


From 6bf4d88397bb95cf7d8f304604481838edf75280 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 28 Mar 2012 15:32:19 -0700
Subject: HG 2.0 Suitcase inventory: proof of concept now working properly with
 the heavy SendBulkInventoryUpdate message. Waiting for Melanie to finish the
 light-weight version of that message.

---
 .../EntityTransfer/HGEntityTransferModule.cs        | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index e8d821f..ec260b4 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -428,16 +428,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
                 if (core.TryGet<IClientInventory>(out inv))
                 {
                     InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId);
-                    if (root != null)
-                    {
-                        m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId);
-                        InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
-                        m_log.DebugFormat("[XXX]: Folder name {0}, id {1}, parent {2}", root.Name, root.ID, root.ParentID);
-                        foreach (InventoryItemBase i in content.Items)
-                            m_log.DebugFormat("[XXX]:   Name={0}, folderID={1}", i.Name, i.Folder);
-
-                        inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray());
-                    }
+                    client.SendBulkUpdateInventory(root);
+                    //if (root != null)
+                    //{
+                    //    m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId);
+                    //    InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID);
+                    //    m_log.DebugFormat("[XXX]: Folder name {0}, id {1}, parent {2}", root.Name, root.ID, root.ParentID);
+                    //    foreach (InventoryItemBase i in content.Items)
+                    //        m_log.DebugFormat("[XXX]:   Name={0}, folderID={1}", i.Name, i.Folder);
+
+                    //    inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray());
+                    //}
                 }
             }
         }
-- 
cgit v1.1