Merge branch 'master' of /home/opensim/var/repo/opensim
						commit
						d4a6ed3d98
					
				|  | @ -561,12 +561,18 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             // Finally, kill the agent we just created at the destination. |             // Finally, kill the agent we just created at the destination. | ||||||
|             m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID); |             m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID); | ||||||
| 
 | 
 | ||||||
|  |             sp.Scene.EventManager.TriggerTeleportFail(sp.ControllingClient, logout); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) |         protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) | ||||||
|         { |         { | ||||||
|             logout = false; |             logout = false; | ||||||
|             return m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason); |             bool success = m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason); | ||||||
|  | 
 | ||||||
|  |             if (success) | ||||||
|  |                 sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout); | ||||||
|  | 
 | ||||||
|  |             return success; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent) |         protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent) | ||||||
|  |  | ||||||
|  | @ -51,8 +51,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|         private bool m_Initialized = false; |         private bool m_Initialized = false; | ||||||
| 
 | 
 | ||||||
|         private bool m_RestrictInventoryAccessAbroad = false; |  | ||||||
| 
 |  | ||||||
|         private GatekeeperServiceConnector m_GatekeeperConnector; |         private GatekeeperServiceConnector m_GatekeeperConnector; | ||||||
| 
 | 
 | ||||||
|         #region ISharedRegionModule |         #region ISharedRegionModule | ||||||
|  | @ -71,10 +69,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                 if (name == Name) |                 if (name == Name) | ||||||
|                 { |                 { | ||||||
|                     InitialiseCommon(source); |                     InitialiseCommon(source); | ||||||
|                     IConfig transferConfig = source.Configs["HGEntityTransferModule"]; |  | ||||||
|                     if (transferConfig != null) |  | ||||||
|                         m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false); |  | ||||||
| 
 |  | ||||||
|                     m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name); |                     m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | @ -94,44 +88,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             client.OnTeleportHomeRequest += TeleportHome; |             client.OnTeleportHomeRequest += TeleportHome; | ||||||
|             client.OnTeleportLandmarkRequest += RequestTeleportLandmark; |             client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | ||||||
|             client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); |             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) |  | ||||||
|                         { |  | ||||||
|                             IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>(); |  | ||||||
|                             if (uMan.IsLocalGridUser(client.AgentId)) |  | ||||||
|                             { |  | ||||||
|                                 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); |  | ||||||
|                                 RestoreRootFolderContents(client); |  | ||||||
|                             } |  | ||||||
|                             else |  | ||||||
|                             { |  | ||||||
|                                 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); |  | ||||||
|                                 RestoreSuitcaseFolderContents(client); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         public override void RegionLoaded(Scene scene) |         public override void RegionLoaded(Scene scene) | ||||||
|         { |         { | ||||||
|             base.RegionLoaded(scene); |             base.RegionLoaded(scene); | ||||||
|  | @ -141,12 +99,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                     m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); |                     m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); | ||||||
|                     m_Initialized = true; |                     m_Initialized = true; | ||||||
| 
 | 
 | ||||||
|                     scene.AddCommand( |  | ||||||
|                     "HG", this, "send inventory", |  | ||||||
|                     "send inventory", |  | ||||||
|                     "Don't use this", |  | ||||||
|                     HandleSendInventory); |  | ||||||
| 
 |  | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
|  | @ -219,21 +171,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                     bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason); |                     bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason); | ||||||
|                     logout = success; // flag for later logout from this grid; this is an HG TP |                     logout = success; // flag for later logout from this grid; this is an HG TP | ||||||
| 
 | 
 | ||||||
|                     if (success && m_RestrictInventoryAccessAbroad) |                     if (success) | ||||||
|                     { |                         sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout); | ||||||
|                         IUserManagement uMan = m_aScene.RequestModuleInterface<IUserManagement>(); |  | ||||||
|                         if (uMan != null && uMan.IsLocalGridUser(sp.UUID)) |  | ||||||
|                         { |  | ||||||
|                             // local grid user |  | ||||||
|                             m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); |  | ||||||
|                             RemoveRootFolderContents(sp.ControllingClient); |  | ||||||
|                         } |  | ||||||
|                         else |  | ||||||
|                         { |  | ||||||
|                             m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); |  | ||||||
|                             RemoveSuitcaseFolderContents(sp.ControllingClient); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
| 
 | 
 | ||||||
|                     return success; |                     return success; | ||||||
|                 } |                 } | ||||||
|  | @ -244,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason); |             return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public override void TeleportHome(UUID id, IClientAPI client) |         public override void TeleportHome(UUID id, IClientAPI client) | ||||||
|  | @ -348,15 +287,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected override void Fail(ScenePresence sp, GridRegion finalDestination, bool logout) |  | ||||||
|         { |  | ||||||
|             base.Fail(sp, finalDestination, logout); |  | ||||||
|             if (logout && m_RestrictInventoryAccessAbroad) |  | ||||||
|             { |  | ||||||
|                 RestoreRootFolderContents(sp.ControllingClient); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|         #region IUserAgentVerificationModule |         #region IUserAgentVerificationModule | ||||||
|  | @ -411,71 +341,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|         private void RemoveRootFolderContents(IClientAPI client) |  | ||||||
|         { |  | ||||||
|             // TODO tell the viewer to remove the root folder's content |  | ||||||
|             if (client is IClientCore) |  | ||||||
|             { |  | ||||||
|                 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]: Removing root inventory for user {0}", client.Name); |  | ||||||
|                         InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); |  | ||||||
|                         List<UUID> fids = new List<UUID>(); |  | ||||||
|                         List<UUID> iids = new List<UUID>(); |  | ||||||
|                         List<InventoryFolderBase> keep = new List<InventoryFolderBase>(); |  | ||||||
| 
 |  | ||||||
|                         foreach (InventoryFolderBase f in content.Folders) |  | ||||||
|                         { |  | ||||||
|                             if (f.Name != "My Suitcase") |  | ||||||
|                             { |  | ||||||
|                                 f.Name = f.Name + " (Unavailable)"; |  | ||||||
|                                 keep.Add(f); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         // items directly under the root folder |  | ||||||
|                         foreach (InventoryItemBase it in content.Items) |  | ||||||
|                             it.Name = it.Name + " (Unavailable)"; ; |  | ||||||
| 
 |  | ||||||
|                         // Send the new names  |  | ||||||
|                         inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); |  | ||||||
| 
 |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private void RemoveSuitcaseFolderContents(IClientAPI client) |  | ||||||
|         { |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private void RestoreRootFolderContents(IClientAPI client) |  | ||||||
|         { |  | ||||||
|             m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root folder"); |  | ||||||
|             if (client is IClientCore) |  | ||||||
|             { |  | ||||||
|                 IClientCore core = (IClientCore)client; |  | ||||||
|                 IClientInventory inv; |  | ||||||
| 
 |  | ||||||
|                 if (core.TryGet<IClientInventory>(out inv)) |  | ||||||
|                 { |  | ||||||
|                     InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); |  | ||||||
|                     InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); |  | ||||||
| 
 |  | ||||||
|                     inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private void RestoreSuitcaseFolderContents(IClientAPI client) |  | ||||||
|         { |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         private GridRegion MakeRegion(AgentCircuitData aCircuit) |         private GridRegion MakeRegion(AgentCircuitData aCircuit) | ||||||
|         { |         { | ||||||
|  | @ -494,13 +359,5 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             return region; |             return region; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected void HandleSendInventory(string module, string[] cmd) |  | ||||||
|         { |  | ||||||
|             m_Scenes[0].ForEachClient(delegate(IClientAPI client) |  | ||||||
|             { |  | ||||||
|                 RestoreRootFolderContents(client); |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ using System.Collections.Generic; | ||||||
| using System.Reflection; | using System.Reflection; | ||||||
| 
 | 
 | ||||||
| using OpenSim.Framework; | using OpenSim.Framework; | ||||||
|  | using OpenSim.Framework.Client; | ||||||
| using OpenSim.Region.Framework.Interfaces; | using OpenSim.Region.Framework.Interfaces; | ||||||
| using OpenSim.Region.Framework.Scenes; | using OpenSim.Region.Framework.Scenes; | ||||||
| using OpenSim.Services.Connectors.Hypergrid; | using OpenSim.Services.Connectors.Hypergrid; | ||||||
|  | @ -57,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | ||||||
|         private string m_HomeURI; |         private string m_HomeURI; | ||||||
|         private bool m_OutboundPermission; |         private bool m_OutboundPermission; | ||||||
|         private string m_ThisGatekeeper; |         private string m_ThisGatekeeper; | ||||||
|  |         private bool m_RestrictInventoryAccessAbroad; | ||||||
| 
 | 
 | ||||||
| //        private bool m_Initialized = false; | //        private bool m_Initialized = false; | ||||||
| 
 | 
 | ||||||
|  | @ -90,6 +92,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | ||||||
|                         m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); |                         m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); | ||||||
|                         m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); |                         m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); | ||||||
|                         m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); |                         m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); | ||||||
|  |                         m_RestrictInventoryAccessAbroad = thisModuleConfig.GetBoolean("RestrictInventoryAccessAbroad", false); | ||||||
|                     } |                     } | ||||||
|                     else |                     else | ||||||
|                         m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); |                         m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); | ||||||
|  | @ -105,13 +108,79 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | ||||||
|             base.AddRegion(scene); |             base.AddRegion(scene); | ||||||
|             m_assMapper = new HGAssetMapper(scene, m_HomeURI); |             m_assMapper = new HGAssetMapper(scene, m_HomeURI); | ||||||
|             scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; |             scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; | ||||||
| 
 |             scene.EventManager.OnTeleportStart += TeleportStart; | ||||||
|  |             scene.EventManager.OnTeleportFail += TeleportFail; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|         #region Event handlers |         #region Event handlers | ||||||
| 
 | 
 | ||||||
|  |         protected override void OnNewClient(IClientAPI client) | ||||||
|  |         { | ||||||
|  |             base.OnNewClient(client); | ||||||
|  |             client.OnCompleteMovementToRegion += new Action<IClientAPI, bool>(OnCompleteMovementToRegion); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2) | ||||||
|  |         { | ||||||
|  |             //m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: OnCompleteMovementToRegion of user {0}", client.Name); | ||||||
|  |             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) | ||||||
|  |                     { | ||||||
|  |                         if (m_RestrictInventoryAccessAbroad) | ||||||
|  |                         { | ||||||
|  |                             IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>(); | ||||||
|  |                             if (uMan.IsLocalGridUser(client.AgentId)) | ||||||
|  |                                 ProcessInventoryForComingHome(client); | ||||||
|  |                             else | ||||||
|  |                                 ProcessInventoryForArriving(client); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout) | ||||||
|  |         { | ||||||
|  |             if (gridLogout && m_RestrictInventoryAccessAbroad) | ||||||
|  |             { | ||||||
|  |                 IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>(); | ||||||
|  |                 if (uMan != null && uMan.IsLocalGridUser(client.AgentId)) | ||||||
|  |                 { | ||||||
|  |                     // local grid user | ||||||
|  |                     ProcessInventoryForHypergriding(client); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     // Foreigner | ||||||
|  |                     ProcessInventoryForLeaving(client); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected void TeleportFail(IClientAPI client, bool gridLogout) | ||||||
|  |         { | ||||||
|  |             if (gridLogout && m_RestrictInventoryAccessAbroad) | ||||||
|  |             { | ||||||
|  |                 IUserManagement uMan = m_Scene.RequestModuleInterface<IUserManagement>(); | ||||||
|  |                 if (uMan.IsLocalGridUser(client.AgentId)) | ||||||
|  |                 { | ||||||
|  |                     ProcessInventoryForComingHome(client); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     ProcessInventoryForArriving(client); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) |         public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) | ||||||
|         { |         { | ||||||
|             string userAssetServer = string.Empty; |             string userAssetServer = string.Empty; | ||||||
|  | @ -236,8 +305,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |  | ||||||
| 
 |  | ||||||
|         protected override InventoryItemBase GetItem(UUID agentID, UUID itemID) |         protected override InventoryItemBase GetItem(UUID agentID, UUID itemID) | ||||||
|         { |         { | ||||||
|             InventoryItemBase item = base.GetItem(agentID, itemID); |             InventoryItemBase item = base.GetItem(agentID, itemID); | ||||||
|  | @ -248,5 +315,84 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | ||||||
| 
 | 
 | ||||||
|             return item; |             return item; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region Inventory manipulation upon arriving/leaving | ||||||
|  | 
 | ||||||
|  |         // | ||||||
|  |         // These 2 are for local and foreign users coming back, respectively | ||||||
|  |         // | ||||||
|  | 
 | ||||||
|  |         private void ProcessInventoryForComingHome(IClientAPI client) | ||||||
|  |         { | ||||||
|  |             m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Restoring root folder for local user {0}", client.Name); | ||||||
|  |             if (client is IClientCore) | ||||||
|  |             { | ||||||
|  |                 IClientCore core = (IClientCore)client; | ||||||
|  |                 IClientInventory inv; | ||||||
|  | 
 | ||||||
|  |                 if (core.TryGet<IClientInventory>(out inv)) | ||||||
|  |                 { | ||||||
|  |                     InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId); | ||||||
|  |                     InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID); | ||||||
|  | 
 | ||||||
|  |                     inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void ProcessInventoryForArriving(IClientAPI client) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // | ||||||
|  |         // These 2 are for local and foreign users going away respectively | ||||||
|  |         // | ||||||
|  | 
 | ||||||
|  |         private void ProcessInventoryForHypergriding(IClientAPI client) | ||||||
|  |         { | ||||||
|  |             if (client is IClientCore) | ||||||
|  |             { | ||||||
|  |                 IClientCore core = (IClientCore)client; | ||||||
|  |                 IClientInventory inv; | ||||||
|  | 
 | ||||||
|  |                 if (core.TryGet<IClientInventory>(out inv)) | ||||||
|  |                 { | ||||||
|  |                     InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId); | ||||||
|  |                     if (root != null) | ||||||
|  |                     { | ||||||
|  |                         m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Changing root inventory for user {0}", client.Name); | ||||||
|  |                         InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID); | ||||||
|  |                         List<UUID> fids = new List<UUID>(); | ||||||
|  |                         List<UUID> iids = new List<UUID>(); | ||||||
|  |                         List<InventoryFolderBase> keep = new List<InventoryFolderBase>(); | ||||||
|  | 
 | ||||||
|  |                         foreach (InventoryFolderBase f in content.Folders) | ||||||
|  |                         { | ||||||
|  |                             if (f.Name != "My Suitcase") | ||||||
|  |                             { | ||||||
|  |                                 f.Name = f.Name + " (Unavailable)"; | ||||||
|  |                                 keep.Add(f); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                         // items directly under the root folder | ||||||
|  |                         foreach (InventoryItemBase it in content.Items) | ||||||
|  |                             it.Name = it.Name + " (Unavailable)"; ; | ||||||
|  | 
 | ||||||
|  |                         // Send the new names  | ||||||
|  |                         inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); | ||||||
|  | 
 | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void ProcessInventoryForLeaving(IClientAPI client) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -502,6 +502,12 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         public delegate void PrimsLoaded(Scene s); |         public delegate void PrimsLoaded(Scene s); | ||||||
|         public event PrimsLoaded OnPrimsLoaded; |         public event PrimsLoaded OnPrimsLoaded; | ||||||
| 
 | 
 | ||||||
|  |         public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout); | ||||||
|  |         public event TeleportStart OnTeleportStart; | ||||||
|  | 
 | ||||||
|  |         public delegate void TeleportFail(IClientAPI client, bool gridLogout); | ||||||
|  |         public event TeleportFail OnTeleportFail; | ||||||
|  | 
 | ||||||
|         public class MoneyTransferArgs : EventArgs |         public class MoneyTransferArgs : EventArgs | ||||||
|         { |         { | ||||||
|             public UUID sender; |             public UUID sender; | ||||||
|  | @ -2463,5 +2469,48 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         public void TriggerTeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout) | ||||||
|  |         { | ||||||
|  |             TeleportStart handler = OnTeleportStart; | ||||||
|  | 
 | ||||||
|  |             if (handler != null) | ||||||
|  |             { | ||||||
|  |                 foreach (TeleportStart d in handler.GetInvocationList()) | ||||||
|  |                 { | ||||||
|  |                     try | ||||||
|  |                     { | ||||||
|  |                         d(client, destination, finalDestination, teleportFlags, gridLogout); | ||||||
|  |                     } | ||||||
|  |                     catch (Exception e) | ||||||
|  |                     { | ||||||
|  |                         m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TeleportStart failed - continuing {0} - {1}", | ||||||
|  |                             e.Message, e.StackTrace); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void TriggerTeleportFail(IClientAPI client, bool gridLogout) | ||||||
|  |         { | ||||||
|  |             TeleportFail handler = OnTeleportFail; | ||||||
|  | 
 | ||||||
|  |             if (handler != null) | ||||||
|  |             { | ||||||
|  |                 foreach (TeleportFail d in handler.GetInvocationList()) | ||||||
|  |                 { | ||||||
|  |                     try | ||||||
|  |                     { | ||||||
|  |                         d(client, gridLogout); | ||||||
|  |                     } | ||||||
|  |                     catch (Exception e) | ||||||
|  |                     { | ||||||
|  |                         m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TeleportFail failed - continuing {0} - {1}", | ||||||
|  |                             e.Message, e.StackTrace); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 BlueWall
						BlueWall