diff options
author | Melanie | 2010-03-03 02:07:03 +0000 |
---|---|---|
committer | Melanie | 2010-03-03 02:07:03 +0000 |
commit | 028a87fe37002e7a0611f66babf1deee46c83804 (patch) | |
tree | 387aec499fd60c2012bed8148e6a2ddc847c3d95 /OpenSim/Region/Framework/Scenes/Scene.cs | |
parent | Revert "test" (diff) | |
parent | Fixes Region.Framework tests. Although these tests don't fail, they need to b... (diff) | |
download | opensim-SC-028a87fe37002e7a0611f66babf1deee46c83804.zip opensim-SC-028a87fe37002e7a0611f66babf1deee46c83804.tar.gz opensim-SC-028a87fe37002e7a0611f66babf1deee46c83804.tar.bz2 opensim-SC-028a87fe37002e7a0611f66babf1deee46c83804.tar.xz |
Merge branch 'master' into careminster-presence-refactor
This brings careminster on the level of master. To be tested
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 661 |
1 files changed, 226 insertions, 435 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 4d357fd..181b7c5 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -41,8 +41,7 @@ using OpenMetaverse.Imaging; | |||
41 | using OpenSim.Framework; | 41 | using OpenSim.Framework; |
42 | using OpenSim.Services.Interfaces; | 42 | using OpenSim.Services.Interfaces; |
43 | using OpenSim.Framework.Communications; | 43 | using OpenSim.Framework.Communications; |
44 | using OpenSim.Framework.Communications.Cache; | 44 | |
45 | using OpenSim.Framework.Communications.Clients; | ||
46 | using OpenSim.Framework.Console; | 45 | using OpenSim.Framework.Console; |
47 | using OpenSim.Region.Framework.Interfaces; | 46 | using OpenSim.Region.Framework.Interfaces; |
48 | using OpenSim.Region.Framework.Scenes.Scripting; | 47 | using OpenSim.Region.Framework.Scenes.Scripting; |
@@ -141,7 +140,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
141 | protected ModuleLoader m_moduleLoader; | 140 | protected ModuleLoader m_moduleLoader; |
142 | protected StorageManager m_storageManager; | 141 | protected StorageManager m_storageManager; |
143 | protected AgentCircuitManager m_authenticateHandler; | 142 | protected AgentCircuitManager m_authenticateHandler; |
144 | public CommunicationsManager CommsManager; | ||
145 | 143 | ||
146 | protected SceneCommunicationService m_sceneGridService; | 144 | protected SceneCommunicationService m_sceneGridService; |
147 | public bool LoginsDisabled = true; | 145 | public bool LoginsDisabled = true; |
@@ -189,11 +187,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
189 | { | 187 | { |
190 | m_AuthorizationService = RequestModuleInterface<IAuthorizationService>(); | 188 | m_AuthorizationService = RequestModuleInterface<IAuthorizationService>(); |
191 | 189 | ||
192 | if (m_AuthorizationService == null) | 190 | //if (m_AuthorizationService == null) |
193 | { | 191 | //{ |
194 | // don't throw an exception if no authorization service is set for the time being | 192 | // // don't throw an exception if no authorization service is set for the time being |
195 | m_log.InfoFormat("[SCENE]: No Authorization service is configured"); | 193 | // m_log.InfoFormat("[SCENE]: No Authorization service is configured"); |
196 | } | 194 | //} |
197 | } | 195 | } |
198 | 196 | ||
199 | return m_AuthorizationService; | 197 | return m_AuthorizationService; |
@@ -240,6 +238,73 @@ namespace OpenSim.Region.Framework.Scenes | |||
240 | } | 238 | } |
241 | } | 239 | } |
242 | 240 | ||
241 | protected ILibraryService m_LibraryService; | ||
242 | |||
243 | public ILibraryService LibraryService | ||
244 | { | ||
245 | get | ||
246 | { | ||
247 | if (m_LibraryService == null) | ||
248 | m_LibraryService = RequestModuleInterface<ILibraryService>(); | ||
249 | |||
250 | return m_LibraryService; | ||
251 | } | ||
252 | } | ||
253 | |||
254 | protected ISimulationService m_simulationService; | ||
255 | public ISimulationService SimulationService | ||
256 | { | ||
257 | get | ||
258 | { | ||
259 | if (m_simulationService == null) | ||
260 | m_simulationService = RequestModuleInterface<ISimulationService>(); | ||
261 | return m_simulationService; | ||
262 | } | ||
263 | } | ||
264 | |||
265 | protected IAuthenticationService m_AuthenticationService; | ||
266 | public IAuthenticationService AuthenticationService | ||
267 | { | ||
268 | get | ||
269 | { | ||
270 | if (m_AuthenticationService == null) | ||
271 | m_AuthenticationService = RequestModuleInterface<IAuthenticationService>(); | ||
272 | return m_AuthenticationService; | ||
273 | } | ||
274 | } | ||
275 | |||
276 | protected IPresenceService m_PresenceService; | ||
277 | public IPresenceService PresenceService | ||
278 | { | ||
279 | get | ||
280 | { | ||
281 | if (m_PresenceService == null) | ||
282 | m_PresenceService = RequestModuleInterface<IPresenceService>(); | ||
283 | return m_PresenceService; | ||
284 | } | ||
285 | } | ||
286 | protected IUserAccountService m_UserAccountService; | ||
287 | public IUserAccountService UserAccountService | ||
288 | { | ||
289 | get | ||
290 | { | ||
291 | if (m_UserAccountService == null) | ||
292 | m_UserAccountService = RequestModuleInterface<IUserAccountService>(); | ||
293 | return m_UserAccountService; | ||
294 | } | ||
295 | } | ||
296 | |||
297 | protected OpenSim.Services.Interfaces.IAvatarService m_AvatarService; | ||
298 | public OpenSim.Services.Interfaces.IAvatarService AvatarService | ||
299 | { | ||
300 | get | ||
301 | { | ||
302 | if (m_AvatarService == null) | ||
303 | m_AvatarService = RequestModuleInterface<IAvatarService>(); | ||
304 | return m_AvatarService; | ||
305 | } | ||
306 | } | ||
307 | |||
243 | protected IXMLRPC m_xmlrpcModule; | 308 | protected IXMLRPC m_xmlrpcModule; |
244 | protected IWorldComm m_worldCommModule; | 309 | protected IWorldComm m_worldCommModule; |
245 | protected IAvatarFactory m_AvatarFactory; | 310 | protected IAvatarFactory m_AvatarFactory; |
@@ -249,10 +314,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
249 | } | 314 | } |
250 | protected IConfigSource m_config; | 315 | protected IConfigSource m_config; |
251 | protected IRegionSerialiserModule m_serialiser; | 316 | protected IRegionSerialiserModule m_serialiser; |
252 | protected IInterregionCommsOut m_interregionCommsOut; | ||
253 | protected IInterregionCommsIn m_interregionCommsIn; | ||
254 | protected IDialogModule m_dialogModule; | 317 | protected IDialogModule m_dialogModule; |
255 | protected ITeleportModule m_teleportModule; | 318 | protected IEntityTransferModule m_teleportModule; |
256 | 319 | ||
257 | protected ICapabilitiesModule m_capsModule; | 320 | protected ICapabilitiesModule m_capsModule; |
258 | public ICapabilitiesModule CapsModule | 321 | public ICapabilitiesModule CapsModule |
@@ -483,7 +546,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
483 | #region Constructors | 546 | #region Constructors |
484 | 547 | ||
485 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, | 548 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, |
486 | CommunicationsManager commsMan, SceneCommunicationService sceneGridService, | 549 | SceneCommunicationService sceneGridService, |
487 | StorageManager storeManager, | 550 | StorageManager storeManager, |
488 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, | 551 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, |
489 | bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) | 552 | bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) |
@@ -519,7 +582,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
519 | m_lastAllocatedLocalId = (uint)(random.NextDouble() * (double)(uint.MaxValue/2))+(uint)(uint.MaxValue/4); | 582 | m_lastAllocatedLocalId = (uint)(random.NextDouble() * (double)(uint.MaxValue/2))+(uint)(uint.MaxValue/4); |
520 | m_moduleLoader = moduleLoader; | 583 | m_moduleLoader = moduleLoader; |
521 | m_authenticateHandler = authen; | 584 | m_authenticateHandler = authen; |
522 | CommsManager = commsMan; | ||
523 | m_sceneGridService = sceneGridService; | 585 | m_sceneGridService = sceneGridService; |
524 | m_storageManager = storeManager; | 586 | m_storageManager = storeManager; |
525 | m_regInfo = regInfo; | 587 | m_regInfo = regInfo; |
@@ -778,6 +840,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
778 | return m_simulatorVersion; | 840 | return m_simulatorVersion; |
779 | } | 841 | } |
780 | 842 | ||
843 | public string[] GetUserNames(UUID uuid) | ||
844 | { | ||
845 | string[] returnstring = new string[0]; | ||
846 | |||
847 | UserAccount account = UserAccountService.GetUserAccount(RegionInfo.ScopeID, uuid); | ||
848 | |||
849 | if (account != null) | ||
850 | { | ||
851 | returnstring = new string[2]; | ||
852 | returnstring[0] = account.FirstName; | ||
853 | returnstring[1] = account.LastName; | ||
854 | } | ||
855 | |||
856 | return returnstring; | ||
857 | } | ||
858 | |||
859 | public string GetUserName(UUID uuid) | ||
860 | { | ||
861 | string[] names = GetUserNames(uuid); | ||
862 | if (names.Length == 2) | ||
863 | { | ||
864 | string firstname = names[0]; | ||
865 | string lastname = names[1]; | ||
866 | |||
867 | return firstname + " " + lastname; | ||
868 | |||
869 | } | ||
870 | return "(hippos)"; | ||
871 | } | ||
872 | |||
781 | /// <summary> | 873 | /// <summary> |
782 | /// Another region is up. | 874 | /// Another region is up. |
783 | /// | 875 | /// |
@@ -811,7 +903,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
811 | regInfo.RegionName = otherRegion.RegionName; | 903 | regInfo.RegionName = otherRegion.RegionName; |
812 | regInfo.ScopeID = otherRegion.ScopeID; | 904 | regInfo.ScopeID = otherRegion.ScopeID; |
813 | regInfo.ExternalHostName = otherRegion.ExternalHostName; | 905 | regInfo.ExternalHostName = otherRegion.ExternalHostName; |
814 | 906 | GridRegion r = new GridRegion(regInfo); | |
815 | try | 907 | try |
816 | { | 908 | { |
817 | ForEachScenePresence(delegate(ScenePresence agent) | 909 | ForEachScenePresence(delegate(ScenePresence agent) |
@@ -825,7 +917,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
825 | List<ulong> old = new List<ulong>(); | 917 | List<ulong> old = new List<ulong>(); |
826 | old.Add(otherRegion.RegionHandle); | 918 | old.Add(otherRegion.RegionHandle); |
827 | agent.DropOldNeighbours(old); | 919 | agent.DropOldNeighbours(old); |
828 | InformClientOfNeighbor(agent, regInfo); | 920 | if (m_teleportModule != null) |
921 | m_teleportModule.EnableChildAgent(agent, r); | ||
829 | } | 922 | } |
830 | } | 923 | } |
831 | ); | 924 | ); |
@@ -985,6 +1078,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
985 | { | 1078 | { |
986 | foreach (RegionInfo region in m_regionRestartNotifyList) | 1079 | foreach (RegionInfo region in m_regionRestartNotifyList) |
987 | { | 1080 | { |
1081 | GridRegion r = new GridRegion(region); | ||
988 | try | 1082 | try |
989 | { | 1083 | { |
990 | ForEachScenePresence(delegate(ScenePresence agent) | 1084 | ForEachScenePresence(delegate(ScenePresence agent) |
@@ -992,9 +1086,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
992 | // If agent is a root agent. | 1086 | // If agent is a root agent. |
993 | if (!agent.IsChildAgent) | 1087 | if (!agent.IsChildAgent) |
994 | { | 1088 | { |
995 | //agent.ControllingClient.new | 1089 | if (m_teleportModule != null) |
996 | //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); | 1090 | m_teleportModule.EnableChildAgent(agent, r); |
997 | InformClientOfNeighbor(agent, region); | ||
998 | } | 1091 | } |
999 | } | 1092 | } |
1000 | ); | 1093 | ); |
@@ -1137,11 +1230,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1137 | XferManager = RequestModuleInterface<IXfer>(); | 1230 | XferManager = RequestModuleInterface<IXfer>(); |
1138 | m_AvatarFactory = RequestModuleInterface<IAvatarFactory>(); | 1231 | m_AvatarFactory = RequestModuleInterface<IAvatarFactory>(); |
1139 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); | 1232 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); |
1140 | m_interregionCommsOut = RequestModuleInterface<IInterregionCommsOut>(); | ||
1141 | m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>(); | ||
1142 | m_dialogModule = RequestModuleInterface<IDialogModule>(); | 1233 | m_dialogModule = RequestModuleInterface<IDialogModule>(); |
1143 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); | 1234 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); |
1144 | m_teleportModule = RequestModuleInterface<ITeleportModule>(); | 1235 | m_teleportModule = RequestModuleInterface<IEntityTransferModule>(); |
1145 | } | 1236 | } |
1146 | 1237 | ||
1147 | #endregion | 1238 | #endregion |
@@ -1591,7 +1682,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1591 | GridRegion region = new GridRegion(RegionInfo); | 1682 | GridRegion region = new GridRegion(RegionInfo); |
1592 | string error = GridService.RegisterRegion(RegionInfo.ScopeID, region); | 1683 | string error = GridService.RegisterRegion(RegionInfo.ScopeID, region); |
1593 | if (error != String.Empty) | 1684 | if (error != String.Empty) |
1685 | { | ||
1594 | throw new Exception(error); | 1686 | throw new Exception(error); |
1687 | } | ||
1595 | 1688 | ||
1596 | m_sceneGridService.SetScene(this); | 1689 | m_sceneGridService.SetScene(this); |
1597 | m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo); | 1690 | m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo); |
@@ -1978,7 +2071,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1978 | /// Move the given scene object into a new region depending on which region its absolute position has moved | 2071 | /// Move the given scene object into a new region depending on which region its absolute position has moved |
1979 | /// into. | 2072 | /// into. |
1980 | /// | 2073 | /// |
1981 | /// This method locates the new region handle and offsets the prim position for the new region | ||
1982 | /// </summary> | 2074 | /// </summary> |
1983 | /// <param name="attemptedPosition">the attempted out of region position of the scene object</param> | 2075 | /// <param name="attemptedPosition">the attempted out of region position of the scene object</param> |
1984 | /// <param name="grp">the scene object that we're crossing</param> | 2076 | /// <param name="grp">the scene object that we're crossing</param> |
@@ -2003,185 +2095,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
2003 | return; | 2095 | return; |
2004 | } | 2096 | } |
2005 | 2097 | ||
2006 | int thisx = (int)RegionInfo.RegionLocX; | 2098 | if (grp.RootPart.RETURN_AT_EDGE) |
2007 | int thisy = (int)RegionInfo.RegionLocY; | ||
2008 | Vector3 EastCross = new Vector3(0.1f,0,0); | ||
2009 | Vector3 WestCross = new Vector3(-0.1f, 0, 0); | ||
2010 | Vector3 NorthCross = new Vector3(0, 0.1f, 0); | ||
2011 | Vector3 SouthCross = new Vector3(0, -0.1f, 0); | ||
2012 | |||
2013 | |||
2014 | // use this if no borders were crossed! | ||
2015 | ulong newRegionHandle | ||
2016 | = Util.UIntsToLong((uint)((thisx) * Constants.RegionSize), | ||
2017 | (uint)((thisy) * Constants.RegionSize)); | ||
2018 | |||
2019 | Vector3 pos = attemptedPosition; | ||
2020 | |||
2021 | int changeX = 1; | ||
2022 | int changeY = 1; | ||
2023 | |||
2024 | if (TestBorderCross(attemptedPosition + WestCross, Cardinals.W)) | ||
2025 | { | ||
2026 | if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S)) | ||
2027 | { | ||
2028 | |||
2029 | Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W); | ||
2030 | |||
2031 | if (crossedBorderx.BorderLine.Z > 0) | ||
2032 | { | ||
2033 | pos.X = ((pos.X + crossedBorderx.BorderLine.Z)); | ||
2034 | changeX = (int)(crossedBorderx.BorderLine.Z /(int) Constants.RegionSize); | ||
2035 | } | ||
2036 | else | ||
2037 | pos.X = ((pos.X + Constants.RegionSize)); | ||
2038 | |||
2039 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); | ||
2040 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) | ||
2041 | |||
2042 | if (crossedBordery.BorderLine.Z > 0) | ||
2043 | { | ||
2044 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); | ||
2045 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); | ||
2046 | } | ||
2047 | else | ||
2048 | pos.Y = ((pos.Y + Constants.RegionSize)); | ||
2049 | |||
2050 | |||
2051 | |||
2052 | newRegionHandle | ||
2053 | = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), | ||
2054 | (uint)((thisy - changeY) * Constants.RegionSize)); | ||
2055 | // x - 1 | ||
2056 | // y - 1 | ||
2057 | } | ||
2058 | else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N)) | ||
2059 | { | ||
2060 | Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W); | ||
2061 | |||
2062 | if (crossedBorderx.BorderLine.Z > 0) | ||
2063 | { | ||
2064 | pos.X = ((pos.X + crossedBorderx.BorderLine.Z)); | ||
2065 | changeX = (int)(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize); | ||
2066 | } | ||
2067 | else | ||
2068 | pos.X = ((pos.X + Constants.RegionSize)); | ||
2069 | |||
2070 | |||
2071 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); | ||
2072 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) | ||
2073 | |||
2074 | if (crossedBordery.BorderLine.Z > 0) | ||
2075 | { | ||
2076 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); | ||
2077 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); | ||
2078 | } | ||
2079 | else | ||
2080 | pos.Y = ((pos.Y + Constants.RegionSize)); | ||
2081 | |||
2082 | newRegionHandle | ||
2083 | = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), | ||
2084 | (uint)((thisy + changeY) * Constants.RegionSize)); | ||
2085 | // x - 1 | ||
2086 | // y + 1 | ||
2087 | } | ||
2088 | else | ||
2089 | { | ||
2090 | Border crossedBorderx = GetCrossedBorder(attemptedPosition + WestCross, Cardinals.W); | ||
2091 | |||
2092 | if (crossedBorderx.BorderLine.Z > 0) | ||
2093 | { | ||
2094 | pos.X = ((pos.X + crossedBorderx.BorderLine.Z)); | ||
2095 | changeX = (int)(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize); | ||
2096 | } | ||
2097 | else | ||
2098 | pos.X = ((pos.X + Constants.RegionSize)); | ||
2099 | |||
2100 | newRegionHandle | ||
2101 | = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), | ||
2102 | (uint) (thisy*Constants.RegionSize)); | ||
2103 | // x - 1 | ||
2104 | } | ||
2105 | } | ||
2106 | else if (TestBorderCross(attemptedPosition + EastCross, Cardinals.E)) | ||
2107 | { | 2099 | { |
2108 | if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S)) | 2100 | // We remove the object here |
2109 | { | 2101 | try |
2110 | |||
2111 | pos.X = ((pos.X - Constants.RegionSize)); | ||
2112 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); | ||
2113 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) | ||
2114 | |||
2115 | if (crossedBordery.BorderLine.Z > 0) | ||
2116 | { | ||
2117 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); | ||
2118 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); | ||
2119 | } | ||
2120 | else | ||
2121 | pos.Y = ((pos.Y + Constants.RegionSize)); | ||
2122 | |||
2123 | |||
2124 | newRegionHandle | ||
2125 | = Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize), | ||
2126 | (uint)((thisy - changeY) * Constants.RegionSize)); | ||
2127 | // x + 1 | ||
2128 | // y - 1 | ||
2129 | } | ||
2130 | else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N)) | ||
2131 | { | ||
2132 | pos.X = ((pos.X - Constants.RegionSize)); | ||
2133 | pos.Y = ((pos.Y - Constants.RegionSize)); | ||
2134 | newRegionHandle | ||
2135 | = Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize), | ||
2136 | (uint)((thisy + changeY) * Constants.RegionSize)); | ||
2137 | // x + 1 | ||
2138 | // y + 1 | ||
2139 | } | ||
2140 | else | ||
2141 | { | 2102 | { |
2142 | pos.X = ((pos.X - Constants.RegionSize)); | 2103 | List<SceneObjectGroup> objects = new List<SceneObjectGroup>(); |
2143 | newRegionHandle | 2104 | objects.Add(grp); |
2144 | = Util.UIntsToLong((uint)((thisx + changeX) * Constants.RegionSize), | 2105 | SceneObjectGroup[] objectsArray = objects.ToArray(); |
2145 | (uint) (thisy*Constants.RegionSize)); | 2106 | returnObjects(objectsArray, UUID.Zero); |
2146 | // x + 1 | ||
2147 | } | 2107 | } |
2148 | } | 2108 | catch (Exception) |
2149 | else if (TestBorderCross(attemptedPosition + SouthCross, Cardinals.S)) | ||
2150 | { | ||
2151 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); | ||
2152 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) | ||
2153 | |||
2154 | if (crossedBordery.BorderLine.Z > 0) | ||
2155 | { | 2109 | { |
2156 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); | 2110 | m_log.Warn("[DATABASE]: exception when trying to return the prim that crossed the border."); |
2157 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); | ||
2158 | } | 2111 | } |
2159 | else | 2112 | return; |
2160 | pos.Y = ((pos.Y + Constants.RegionSize)); | ||
2161 | |||
2162 | newRegionHandle | ||
2163 | = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - changeY) * Constants.RegionSize)); | ||
2164 | // y - 1 | ||
2165 | } | ||
2166 | else if (TestBorderCross(attemptedPosition + NorthCross, Cardinals.N)) | ||
2167 | { | ||
2168 | |||
2169 | pos.Y = ((pos.Y - Constants.RegionSize)); | ||
2170 | newRegionHandle | ||
2171 | = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + changeY) * Constants.RegionSize)); | ||
2172 | // y + 1 | ||
2173 | } | 2113 | } |
2174 | 2114 | ||
2175 | // Offset the positions for the new region across the border | 2115 | if (m_teleportModule != null) |
2176 | Vector3 oldGroupPosition = grp.RootPart.GroupPosition; | 2116 | m_teleportModule.Cross(grp, attemptedPosition, silent); |
2177 | grp.OffsetForNewRegion(pos); | ||
2178 | |||
2179 | // If we fail to cross the border, then reset the position of the scene object on that border. | ||
2180 | if (!CrossPrimGroupIntoNewRegion(newRegionHandle, grp, silent)) | ||
2181 | { | ||
2182 | grp.OffsetForNewRegion(oldGroupPosition); | ||
2183 | grp.ScheduleGroupForFullUpdate(); | ||
2184 | } | ||
2185 | } | 2117 | } |
2186 | 2118 | ||
2187 | public Border GetCrossedBorder(Vector3 position, Cardinals gridline) | 2119 | public Border GetCrossedBorder(Vector3 position, Cardinals gridline) |
@@ -2365,75 +2297,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2365 | 2297 | ||
2366 | 2298 | ||
2367 | /// <summary> | 2299 | /// <summary> |
2368 | /// Move the given scene object into a new region | ||
2369 | /// </summary> | ||
2370 | /// <param name="newRegionHandle"></param> | ||
2371 | /// <param name="grp">Scene Object Group that we're crossing</param> | ||
2372 | /// <returns> | ||
2373 | /// true if the crossing itself was successful, false on failure | ||
2374 | /// FIMXE: we still return true if the crossing object was not successfully deleted from the originating region | ||
2375 | /// </returns> | ||
2376 | public bool CrossPrimGroupIntoNewRegion(ulong newRegionHandle, SceneObjectGroup grp, bool silent) | ||
2377 | { | ||
2378 | //m_log.Debug(" >>> CrossPrimGroupIntoNewRegion <<<"); | ||
2379 | |||
2380 | bool successYN = false; | ||
2381 | grp.RootPart.UpdateFlag = 0; | ||
2382 | //int primcrossingXMLmethod = 0; | ||
2383 | |||
2384 | if (newRegionHandle != 0) | ||
2385 | { | ||
2386 | //string objectState = grp.GetStateSnapshot(); | ||
2387 | |||
2388 | //successYN | ||
2389 | // = m_sceneGridService.PrimCrossToNeighboringRegion( | ||
2390 | // newRegionHandle, grp.UUID, m_serialiser.SaveGroupToXml2(grp), primcrossingXMLmethod); | ||
2391 | //if (successYN && (objectState != "") && m_allowScriptCrossings) | ||
2392 | //{ | ||
2393 | // successYN = m_sceneGridService.PrimCrossToNeighboringRegion( | ||
2394 | // newRegionHandle, grp.UUID, objectState, 100); | ||
2395 | //} | ||
2396 | |||
2397 | // And the new channel... | ||
2398 | if (m_interregionCommsOut != null) | ||
2399 | successYN = m_interregionCommsOut.SendCreateObject(newRegionHandle, grp, true); | ||
2400 | |||
2401 | if (successYN) | ||
2402 | { | ||
2403 | // We remove the object here | ||
2404 | try | ||
2405 | { | ||
2406 | DeleteSceneObject(grp, silent); | ||
2407 | } | ||
2408 | catch (Exception e) | ||
2409 | { | ||
2410 | m_log.ErrorFormat( | ||
2411 | "[INTERREGION]: Exception deleting the old object left behind on a border crossing for {0}, {1}", | ||
2412 | grp, e); | ||
2413 | } | ||
2414 | } | ||
2415 | else | ||
2416 | { | ||
2417 | if (!grp.IsDeleted) | ||
2418 | { | ||
2419 | if (grp.RootPart.PhysActor != null) | ||
2420 | { | ||
2421 | grp.RootPart.PhysActor.CrossingFailure(); | ||
2422 | } | ||
2423 | } | ||
2424 | |||
2425 | m_log.ErrorFormat("[INTERREGION]: Prim crossing failed for {0}", grp); | ||
2426 | } | ||
2427 | } | ||
2428 | else | ||
2429 | { | ||
2430 | m_log.Error("[INTERREGION]: region handle was unexpectedly 0 in Scene.CrossPrimGroupIntoNewRegion()"); | ||
2431 | } | ||
2432 | |||
2433 | return successYN; | ||
2434 | } | ||
2435 | |||
2436 | /// <summary> | ||
2437 | /// Called when objects or attachments cross the border between regions. | 2300 | /// Called when objects or attachments cross the border between regions. |
2438 | /// </summary> | 2301 | /// </summary> |
2439 | /// <param name="sog"></param> | 2302 | /// <param name="sog"></param> |
@@ -2505,6 +2368,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2505 | 2368 | ||
2506 | return false; | 2369 | return false; |
2507 | } | 2370 | } |
2371 | |||
2372 | sceneObject.SetScene(this); | ||
2373 | |||
2508 | // Force allocation of new LocalId | 2374 | // Force allocation of new LocalId |
2509 | // | 2375 | // |
2510 | foreach (SceneObjectPart p in sceneObject.Children.Values) | 2376 | foreach (SceneObjectPart p in sceneObject.Children.Values) |
@@ -2545,7 +2411,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2545 | AttachObject( | 2411 | AttachObject( |
2546 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); | 2412 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); |
2547 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); | 2413 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); |
2548 | grp.SendGroupFullUpdate(); | 2414 | grp.SendGroupFullUpdate(); |
2549 | } | 2415 | } |
2550 | else | 2416 | else |
2551 | { | 2417 | { |
@@ -2583,6 +2449,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2583 | /// <param name="client"></param> | 2449 | /// <param name="client"></param> |
2584 | public override void AddNewClient(IClientAPI client) | 2450 | public override void AddNewClient(IClientAPI client) |
2585 | { | 2451 | { |
2452 | bool vialogin = false; | ||
2453 | |||
2586 | m_clientManager.Add(client); | 2454 | m_clientManager.Add(client); |
2587 | 2455 | ||
2588 | CheckHeartbeat(); | 2456 | CheckHeartbeat(); |
@@ -2617,23 +2485,48 @@ namespace OpenSim.Region.Framework.Scenes | |||
2617 | { | 2485 | { |
2618 | AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); | 2486 | AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); |
2619 | 2487 | ||
2620 | m_log.Debug("[Scene] Adding new agent " + client.Name + " to scene " + RegionInfo.RegionName); | 2488 | // Do the verification here |
2621 | /* | 2489 | System.Net.EndPoint ep = client.GetClientEP(); |
2622 | string logMsg = string.Format("[SCENE]: Adding new {0} agent for {1} in {2}", | 2490 | if (aCircuit != null) |
2623 | ((aCircuit.child == true) ? "child" : "root"), client.Name, | 2491 | { |
2624 | RegionInfo.RegionName); | 2492 | if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0) |
2625 | 2493 | { | |
2626 | m_log.Debug(logMsg); | 2494 | m_log.DebugFormat("[Scene]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); |
2627 | */ | 2495 | vialogin = true; |
2496 | IUserAgentVerificationModule userVerification = RequestModuleInterface<IUserAgentVerificationModule>(); | ||
2497 | if (userVerification != null && ep != null) | ||
2498 | { | ||
2499 | if (!userVerification.VerifyClient(aCircuit, ep.ToString())) | ||
2500 | { | ||
2501 | // uh-oh, this is fishy | ||
2502 | m_log.WarnFormat("[Scene]: Agent {0} with session {1} connecting with unidentified end point {2}. Refusing service.", | ||
2503 | client.AgentId, client.SessionId, ep.ToString()); | ||
2504 | try | ||
2505 | { | ||
2506 | client.Close(); | ||
2507 | } | ||
2508 | catch (Exception e) | ||
2509 | { | ||
2510 | m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); | ||
2511 | } | ||
2512 | return; | ||
2513 | } | ||
2514 | else | ||
2515 | m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} returned true", aCircuit.firstname, aCircuit.lastname); | ||
2516 | } | ||
2517 | } | ||
2518 | } | ||
2628 | 2519 | ||
2629 | CommsManager.UserProfileCacheService.AddNewUser(client.AgentId); | 2520 | m_log.Debug("[Scene] Adding new agent " + client.Name + " to scene " + RegionInfo.RegionName); |
2630 | 2521 | ||
2631 | ScenePresence sp = CreateAndAddScenePresence(client); | 2522 | ScenePresence sp = CreateAndAddScenePresence(client); |
2523 | if (aCircuit != null) | ||
2524 | sp.Appearance = aCircuit.Appearance; | ||
2632 | 2525 | ||
2633 | // HERE!!! Do the initial attachments right here | 2526 | // HERE!!! Do the initial attachments right here |
2634 | // first agent upon login is a root agent by design. | 2527 | // first agent upon login is a root agent by design. |
2635 | // All other AddNewClient calls find aCircuit.child to be true | 2528 | // All other AddNewClient calls find aCircuit.child to be true |
2636 | if (aCircuit == null || aCircuit.child == false) | 2529 | if (aCircuit == null || (aCircuit != null && aCircuit.child == false)) |
2637 | { | 2530 | { |
2638 | sp.IsChildAgent = false; | 2531 | sp.IsChildAgent = false; |
2639 | Util.FireAndForget(delegate(object o) { sp.RezAttachments(); }); | 2532 | Util.FireAndForget(delegate(object o) { sp.RezAttachments(); }); |
@@ -2642,6 +2535,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2642 | 2535 | ||
2643 | m_LastLogin = Util.EnvironmentTickCount(); | 2536 | m_LastLogin = Util.EnvironmentTickCount(); |
2644 | EventManager.TriggerOnNewClient(client); | 2537 | EventManager.TriggerOnNewClient(client); |
2538 | if (vialogin) | ||
2539 | EventManager.TriggerOnClientLogin(client); | ||
2645 | } | 2540 | } |
2646 | 2541 | ||
2647 | 2542 | ||
@@ -2711,6 +2606,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2711 | client.OnGrabUpdate += ProcessObjectGrabUpdate; | 2606 | client.OnGrabUpdate += ProcessObjectGrabUpdate; |
2712 | client.OnDeGrabObject += ProcessObjectDeGrab; | 2607 | client.OnDeGrabObject += ProcessObjectDeGrab; |
2713 | client.OnUndo += m_sceneGraph.HandleUndo; | 2608 | client.OnUndo += m_sceneGraph.HandleUndo; |
2609 | client.OnRedo += m_sceneGraph.HandleRedo; | ||
2714 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | 2610 | client.OnObjectDescription += m_sceneGraph.PrimDescription; |
2715 | client.OnObjectDrop += m_sceneGraph.DropObject; | 2611 | client.OnObjectDrop += m_sceneGraph.DropObject; |
2716 | client.OnObjectSaleInfo += ObjectSaleInfo; | 2612 | client.OnObjectSaleInfo += ObjectSaleInfo; |
@@ -2758,7 +2654,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2758 | { | 2654 | { |
2759 | client.OnTeleportLocationRequest += RequestTeleportLocation; | 2655 | client.OnTeleportLocationRequest += RequestTeleportLocation; |
2760 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | 2656 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; |
2761 | client.OnTeleportHomeRequest += TeleportClientHome; | ||
2762 | } | 2657 | } |
2763 | 2658 | ||
2764 | public virtual void SubscribeToClientScriptEvents(IClientAPI client) | 2659 | public virtual void SubscribeToClientScriptEvents(IClientAPI client) |
@@ -2778,7 +2673,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2778 | 2673 | ||
2779 | public virtual void SubscribeToClientGridEvents(IClientAPI client) | 2674 | public virtual void SubscribeToClientGridEvents(IClientAPI client) |
2780 | { | 2675 | { |
2781 | client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest; | 2676 | client.OnNameFromUUIDRequest += HandleUUIDNameRequest; |
2782 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; | 2677 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; |
2783 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; | 2678 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; |
2784 | client.OnSetStartLocationRequest += SetHomeRezPoint; | 2679 | client.OnSetStartLocationRequest += SetHomeRezPoint; |
@@ -2865,6 +2760,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2865 | client.OnGrabObject -= ProcessObjectGrab; | 2760 | client.OnGrabObject -= ProcessObjectGrab; |
2866 | client.OnDeGrabObject -= ProcessObjectDeGrab; | 2761 | client.OnDeGrabObject -= ProcessObjectDeGrab; |
2867 | client.OnUndo -= m_sceneGraph.HandleUndo; | 2762 | client.OnUndo -= m_sceneGraph.HandleUndo; |
2763 | client.OnRedo -= m_sceneGraph.HandleRedo; | ||
2868 | client.OnObjectDescription -= m_sceneGraph.PrimDescription; | 2764 | client.OnObjectDescription -= m_sceneGraph.PrimDescription; |
2869 | client.OnObjectDrop -= m_sceneGraph.DropObject; | 2765 | client.OnObjectDrop -= m_sceneGraph.DropObject; |
2870 | client.OnObjectSaleInfo -= ObjectSaleInfo; | 2766 | client.OnObjectSaleInfo -= ObjectSaleInfo; |
@@ -2913,7 +2809,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2913 | { | 2809 | { |
2914 | client.OnTeleportLocationRequest -= RequestTeleportLocation; | 2810 | client.OnTeleportLocationRequest -= RequestTeleportLocation; |
2915 | client.OnTeleportLandmarkRequest -= RequestTeleportLandmark; | 2811 | client.OnTeleportLandmarkRequest -= RequestTeleportLandmark; |
2916 | client.OnTeleportHomeRequest -= TeleportClientHome; | 2812 | //client.OnTeleportHomeRequest -= TeleportClientHome; |
2917 | } | 2813 | } |
2918 | 2814 | ||
2919 | public virtual void UnSubscribeToClientScriptEvents(IClientAPI client) | 2815 | public virtual void UnSubscribeToClientScriptEvents(IClientAPI client) |
@@ -2933,7 +2829,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2933 | 2829 | ||
2934 | public virtual void UnSubscribeToClientGridEvents(IClientAPI client) | 2830 | public virtual void UnSubscribeToClientGridEvents(IClientAPI client) |
2935 | { | 2831 | { |
2936 | client.OnNameFromUUIDRequest -= CommsManager.HandleUUIDNameRequest; | 2832 | client.OnNameFromUUIDRequest -= HandleUUIDNameRequest; |
2937 | client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest; | 2833 | client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest; |
2938 | client.OnAvatarPickerRequest -= ProcessAvatarPickerRequest; | 2834 | client.OnAvatarPickerRequest -= ProcessAvatarPickerRequest; |
2939 | client.OnSetStartLocationRequest -= SetHomeRezPoint; | 2835 | client.OnSetStartLocationRequest -= SetHomeRezPoint; |
@@ -2960,30 +2856,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2960 | /// <param name="client">The IClientAPI for the client</param> | 2856 | /// <param name="client">The IClientAPI for the client</param> |
2961 | public virtual void TeleportClientHome(UUID agentId, IClientAPI client) | 2857 | public virtual void TeleportClientHome(UUID agentId, IClientAPI client) |
2962 | { | 2858 | { |
2963 | UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(agentId); | 2859 | if (m_teleportModule != null) |
2964 | if (UserProfile != null) | 2860 | m_teleportModule.TeleportHome(agentId, client); |
2861 | else | ||
2965 | { | 2862 | { |
2966 | GridRegion regionInfo = GridService.GetRegionByUUID(UUID.Zero, UserProfile.HomeRegionID); | 2863 | m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active"); |
2967 | if (regionInfo == null) | 2864 | client.SendTeleportFailed("Unable to perform teleports on this simulator."); |
2968 | { | ||
2969 | uint x = 0, y = 0; | ||
2970 | Utils.LongToUInts(UserProfile.HomeRegion, out x, out y); | ||
2971 | regionInfo = GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
2972 | if (regionInfo != null) // home region can be away temporarily, too | ||
2973 | { | ||
2974 | UserProfile.HomeRegionID = regionInfo.RegionID; | ||
2975 | CommsManager.UserService.UpdateUserProfile(UserProfile); | ||
2976 | } | ||
2977 | } | ||
2978 | if (regionInfo == null) | ||
2979 | { | ||
2980 | // can't find the Home region: Tell viewer and abort | ||
2981 | client.SendTeleportFailed("Your home-region could not be found."); | ||
2982 | return; | ||
2983 | } | ||
2984 | RequestTeleportLocation( | ||
2985 | client, regionInfo.RegionHandle, UserProfile.HomeLocation, UserProfile.HomeLookAt, | ||
2986 | (uint)(TPFlags.SetLastToTarget | TPFlags.ViaHome)); | ||
2987 | } | 2865 | } |
2988 | } | 2866 | } |
2989 | 2867 | ||
@@ -3074,7 +2952,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3074 | } | 2952 | } |
3075 | 2953 | ||
3076 | /// <summary> | 2954 | /// <summary> |
3077 | /// Sets the Home Point. The GridService uses this to know where to put a user when they log-in | 2955 | /// Sets the Home Point. The LoginService uses this to know where to put a user when they log-in |
3078 | /// </summary> | 2956 | /// </summary> |
3079 | /// <param name="remoteClient"></param> | 2957 | /// <param name="remoteClient"></param> |
3080 | /// <param name="regionHandle"></param> | 2958 | /// <param name="regionHandle"></param> |
@@ -3083,27 +2961,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3083 | /// <param name="flags"></param> | 2961 | /// <param name="flags"></param> |
3084 | public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags) | 2962 | public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags) |
3085 | { | 2963 | { |
3086 | UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId); | 2964 | if (PresenceService.SetHomeLocation(remoteClient.AgentId.ToString(), RegionInfo.RegionID, position, lookAt)) |
3087 | if (UserProfile != null) | ||
3088 | { | ||
3089 | // I know I'm ignoring the regionHandle provided by the teleport location request. | ||
3090 | // reusing the TeleportLocationRequest delegate, so regionHandle isn't valid | ||
3091 | UserProfile.HomeRegionID = RegionInfo.RegionID; | ||
3092 | // TODO: The next line can be removed, as soon as only homeRegionID based UserServers are around. | ||
3093 | // TODO: The HomeRegion property can be removed then, too | ||
3094 | UserProfile.HomeRegion = RegionInfo.RegionHandle; | ||
3095 | |||
3096 | UserProfile.HomeLocation = position; | ||
3097 | UserProfile.HomeLookAt = lookAt; | ||
3098 | CommsManager.UserService.UpdateUserProfile(UserProfile); | ||
3099 | |||
3100 | // FUBAR ALERT: this needs to be "Home position set." so the viewer saves a home-screenshot. | 2965 | // FUBAR ALERT: this needs to be "Home position set." so the viewer saves a home-screenshot. |
3101 | m_dialogModule.SendAlertToUser(remoteClient, "Home position set."); | 2966 | m_dialogModule.SendAlertToUser(remoteClient, "Home position set."); |
3102 | } | ||
3103 | else | 2967 | else |
3104 | { | ||
3105 | m_dialogModule.SendAlertToUser(remoteClient, "Set Home request Failed."); | 2968 | m_dialogModule.SendAlertToUser(remoteClient, "Set Home request Failed."); |
3106 | } | ||
3107 | } | 2969 | } |
3108 | 2970 | ||
3109 | /// <summary> | 2971 | /// <summary> |
@@ -3176,14 +3038,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3176 | m_sceneGraph.removeUserCount(!childagentYN); | 3038 | m_sceneGraph.removeUserCount(!childagentYN); |
3177 | CapsModule.RemoveCapsHandler(agentID); | 3039 | CapsModule.RemoveCapsHandler(agentID); |
3178 | 3040 | ||
3179 | if (avatar.Scene.NeedSceneCacheClear(avatar.UUID)) | 3041 | // REFACTORING PROBLEM -- well not really a problem, but just to point out that whatever |
3180 | { | 3042 | // this method is doing is HORRIBLE!!! |
3181 | CommsManager.UserProfileCacheService.RemoveUser(agentID); | 3043 | avatar.Scene.NeedSceneCacheClear(avatar.UUID); |
3182 | } | ||
3183 | 3044 | ||
3184 | if (!avatar.IsChildAgent) | 3045 | if (!avatar.IsChildAgent) |
3185 | { | 3046 | { |
3186 | m_sceneGridService.LogOffUser(agentID, RegionInfo.RegionID, RegionInfo.RegionHandle, avatar.AbsolutePosition, avatar.Lookat); | ||
3187 | //List<ulong> childknownRegions = new List<ulong>(); | 3047 | //List<ulong> childknownRegions = new List<ulong>(); |
3188 | //List<ulong> ckn = avatar.KnownChildRegionHandles; | 3048 | //List<ulong> ckn = avatar.KnownChildRegionHandles; |
3189 | //for (int i = 0; i < ckn.Count; i++) | 3049 | //for (int i = 0; i < ckn.Count; i++) |
@@ -3238,12 +3098,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3238 | m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e.ToString()); | 3098 | m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e.ToString()); |
3239 | } | 3099 | } |
3240 | 3100 | ||
3241 | // Remove client agent from profile, so new logins will work | ||
3242 | if (!childagentYN) | ||
3243 | { | ||
3244 | m_sceneGridService.ClearUserAgent(agentID); | ||
3245 | } | ||
3246 | |||
3247 | m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); | 3101 | m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); |
3248 | 3102 | ||
3249 | //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)); | 3103 | //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)); |
@@ -3317,14 +3171,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3317 | m_sceneGridService.KiPrimitive += SendKillObject; | 3171 | m_sceneGridService.KiPrimitive += SendKillObject; |
3318 | m_sceneGridService.OnGetLandData += GetLandData; | 3172 | m_sceneGridService.OnGetLandData += GetLandData; |
3319 | 3173 | ||
3320 | if (m_interregionCommsIn != null) | ||
3321 | { | ||
3322 | m_log.Debug("[SCENE]: Registering with InterregionCommsIn"); | ||
3323 | m_interregionCommsIn.OnChildAgentUpdate += IncomingChildAgentDataUpdate; | ||
3324 | } | ||
3325 | else | ||
3326 | m_log.Debug("[SCENE]: Unable to register with InterregionCommsIn"); | ||
3327 | |||
3328 | } | 3174 | } |
3329 | 3175 | ||
3330 | /// <summary> | 3176 | /// <summary> |
@@ -3342,9 +3188,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3342 | m_sceneGridService.OnCloseAgentConnection -= IncomingCloseAgent; | 3188 | m_sceneGridService.OnCloseAgentConnection -= IncomingCloseAgent; |
3343 | m_sceneGridService.OnGetLandData -= GetLandData; | 3189 | m_sceneGridService.OnGetLandData -= GetLandData; |
3344 | 3190 | ||
3345 | if (m_interregionCommsIn != null) | ||
3346 | m_interregionCommsIn.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; | ||
3347 | |||
3348 | // this does nothing; should be removed | 3191 | // this does nothing; should be removed |
3349 | m_sceneGridService.Close(); | 3192 | m_sceneGridService.Close(); |
3350 | 3193 | ||
@@ -3401,7 +3244,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3401 | agent.AgentID, agent.circuitcode, teleportFlags); | 3244 | agent.AgentID, agent.circuitcode, teleportFlags); |
3402 | 3245 | ||
3403 | reason = String.Empty; | 3246 | reason = String.Empty; |
3404 | if (!AuthenticateUser(agent, out reason)) | 3247 | if (!VerifyUserPresence(agent, out reason)) |
3405 | return false; | 3248 | return false; |
3406 | 3249 | ||
3407 | if (!AuthorizeUser(agent, out reason)) | 3250 | if (!AuthorizeUser(agent, out reason)) |
@@ -3501,40 +3344,39 @@ namespace OpenSim.Region.Framework.Scenes | |||
3501 | */// This is now handled properly in ScenePresence.MakeRootAgent | 3344 | */// This is now handled properly in ScenePresence.MakeRootAgent |
3502 | } | 3345 | } |
3503 | 3346 | ||
3347 | agent.teleportFlags = teleportFlags; | ||
3504 | m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); | 3348 | m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); |
3505 | 3349 | ||
3506 | // rewrite session_id | ||
3507 | CachedUserInfo userinfo = CommsManager.UserProfileCacheService.GetUserDetails(agent.AgentID); | ||
3508 | if (userinfo != null) | ||
3509 | { | ||
3510 | userinfo.SessionID = agent.SessionID; | ||
3511 | } | ||
3512 | else | ||
3513 | { | ||
3514 | m_log.WarnFormat( | ||
3515 | "[CONNECTION BEGIN]: We couldn't find a User Info record for {0}. This is usually an indication that the UUID we're looking up is invalid", agent.AgentID); | ||
3516 | } | ||
3517 | |||
3518 | return true; | 3350 | return true; |
3519 | } | 3351 | } |
3520 | 3352 | ||
3521 | /// <summary> | 3353 | /// <summary> |
3522 | /// Verifies that the user has a session on the Grid | 3354 | /// Verifies that the user has a presence on the Grid |
3523 | /// </summary> | 3355 | /// </summary> |
3524 | /// <param name="agent">Circuit Data of the Agent we're verifying</param> | 3356 | /// <param name="agent">Circuit Data of the Agent we're verifying</param> |
3525 | /// <param name="reason">Outputs the reason for the false response on this string</param> | 3357 | /// <param name="reason">Outputs the reason for the false response on this string</param> |
3526 | /// <returns>True if the user has a session on the grid. False if it does not. False will | 3358 | /// <returns>True if the user has a session on the grid. False if it does not. False will |
3527 | /// also return a reason.</returns> | 3359 | /// also return a reason.</returns> |
3528 | public virtual bool AuthenticateUser(AgentCircuitData agent, out string reason) | 3360 | public virtual bool VerifyUserPresence(AgentCircuitData agent, out string reason) |
3529 | { | 3361 | { |
3530 | reason = String.Empty; | 3362 | reason = String.Empty; |
3531 | 3363 | ||
3532 | bool result = CommsManager.UserService.VerifySession(agent.AgentID, agent.SessionID); | 3364 | IPresenceService presence = RequestModuleInterface<IPresenceService>(); |
3533 | m_log.Debug("[CONNECTION BEGIN]: User authentication returned " + result); | 3365 | if (presence == null) |
3534 | if (!result) | 3366 | { |
3535 | reason = String.Format("Failed to authenticate user {0} {1}, access denied.", agent.firstname, agent.lastname); | 3367 | reason = String.Format("Failed to verify user {0} {1} in region {2}. Presence service does not exist.", agent.firstname, agent.lastname, RegionInfo.RegionName); |
3368 | return false; | ||
3369 | } | ||
3370 | |||
3371 | OpenSim.Services.Interfaces.PresenceInfo pinfo = presence.GetAgent(agent.SessionID); | ||
3536 | 3372 | ||
3537 | return result; | 3373 | if (pinfo == null || (pinfo != null && pinfo.Online == false)) |
3374 | { | ||
3375 | reason = String.Format("Failed to verify user {0} {1}, access denied to region {2}.", agent.firstname, agent.lastname, RegionInfo.RegionName); | ||
3376 | return false; | ||
3377 | } | ||
3378 | |||
3379 | return true; | ||
3538 | } | 3380 | } |
3539 | 3381 | ||
3540 | /// <summary> | 3382 | /// <summary> |
@@ -3735,8 +3577,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3735 | /// <returns>true if we handled it.</returns> | 3577 | /// <returns>true if we handled it.</returns> |
3736 | public virtual bool IncomingChildAgentDataUpdate(AgentData cAgentData) | 3578 | public virtual bool IncomingChildAgentDataUpdate(AgentData cAgentData) |
3737 | { | 3579 | { |
3738 | // m_log.DebugFormat( | 3580 | m_log.DebugFormat( |
3739 | // "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); | 3581 | "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); |
3740 | 3582 | ||
3741 | // We have to wait until the viewer contacts this region after receiving EAC. | 3583 | // We have to wait until the viewer contacts this region after receiving EAC. |
3742 | // That calls AddNewClient, which finally creates the ScenePresence | 3584 | // That calls AddNewClient, which finally creates the ScenePresence |
@@ -3805,16 +3647,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3805 | return false; | 3647 | return false; |
3806 | } | 3648 | } |
3807 | 3649 | ||
3808 | public virtual bool IncomingReleaseAgent(UUID id) | ||
3809 | { | ||
3810 | return m_sceneGridService.ReleaseAgent(id); | ||
3811 | } | ||
3812 | |||
3813 | public void SendReleaseAgent(ulong regionHandle, UUID id, string uri) | ||
3814 | { | ||
3815 | m_interregionCommsOut.SendReleaseAgent(regionHandle, id, uri); | ||
3816 | } | ||
3817 | |||
3818 | /// <summary> | 3650 | /// <summary> |
3819 | /// Tell a single agent to disconnect from the region. | 3651 | /// Tell a single agent to disconnect from the region. |
3820 | /// </summary> | 3652 | /// </summary> |
@@ -3859,30 +3691,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3859 | } | 3691 | } |
3860 | 3692 | ||
3861 | /// <summary> | 3693 | /// <summary> |
3862 | /// Tell neighboring regions about this agent | ||
3863 | /// When the regions respond with a true value, | ||
3864 | /// tell the agents about the region. | ||
3865 | /// | ||
3866 | /// We have to tell the regions about the agents first otherwise it'll deny them access | ||
3867 | /// | ||
3868 | /// </summary> | ||
3869 | /// <param name="presence"></param> | ||
3870 | public void InformClientOfNeighbours(ScenePresence presence) | ||
3871 | { | ||
3872 | m_sceneGridService.EnableNeighbourChildAgents(presence, m_neighbours); | ||
3873 | } | ||
3874 | |||
3875 | /// <summary> | ||
3876 | /// Tell a neighboring region about this agent | ||
3877 | /// </summary> | ||
3878 | /// <param name="presence"></param> | ||
3879 | /// <param name="region"></param> | ||
3880 | public void InformClientOfNeighbor(ScenePresence presence, RegionInfo region) | ||
3881 | { | ||
3882 | m_sceneGridService.EnableNeighbourChildAgents(presence, m_neighbours); | ||
3883 | } | ||
3884 | |||
3885 | /// <summary> | ||
3886 | /// Tries to teleport agent to other region. | 3694 | /// Tries to teleport agent to other region. |
3887 | /// </summary> | 3695 | /// </summary> |
3888 | /// <param name="remoteClient"></param> | 3696 | /// <param name="remoteClient"></param> |
@@ -3957,16 +3765,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3957 | } | 3765 | } |
3958 | 3766 | ||
3959 | if (m_teleportModule != null) | 3767 | if (m_teleportModule != null) |
3960 | { | 3768 | m_teleportModule.Teleport(sp, regionHandle, position, lookAt, teleportFlags); |
3961 | m_teleportModule.RequestTeleportToLocation(sp, regionHandle, | ||
3962 | position, lookAt, teleportFlags); | ||
3963 | } | ||
3964 | else | 3769 | else |
3965 | { | 3770 | { |
3966 | m_sceneGridService.RequestTeleportToLocation(sp, regionHandle, | 3771 | m_log.DebugFormat("[SCENE]: Unable to perform teleports: no AgentTransferModule is active"); |
3967 | position, lookAt, teleportFlags); | 3772 | sp.ControllingClient.SendTeleportFailed("Unable to perform teleports on this simulator."); |
3968 | } | 3773 | } |
3969 | |||
3970 | } | 3774 | } |
3971 | } | 3775 | } |
3972 | 3776 | ||
@@ -3992,7 +3796,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3992 | 3796 | ||
3993 | public void CrossAgentToNewRegion(ScenePresence agent, bool isFlying) | 3797 | public void CrossAgentToNewRegion(ScenePresence agent, bool isFlying) |
3994 | { | 3798 | { |
3995 | m_sceneGridService.CrossAgentToNewRegion(this, agent, isFlying); | 3799 | if (m_teleportModule != null) |
3800 | m_teleportModule.Cross(agent, isFlying); | ||
3801 | else | ||
3802 | { | ||
3803 | m_log.DebugFormat("[SCENE]: Unable to cross agent to neighbouring region, because there is no AgentTransferModule"); | ||
3804 | } | ||
3996 | } | 3805 | } |
3997 | 3806 | ||
3998 | public void SendOutChildAgentUpdates(AgentPosition cadu, ScenePresence presence) | 3807 | public void SendOutChildAgentUpdates(AgentPosition cadu, ScenePresence presence) |
@@ -4018,35 +3827,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
4018 | objectCapacity = objects; | 3827 | objectCapacity = objects; |
4019 | } | 3828 | } |
4020 | 3829 | ||
4021 | public List<FriendListItem> GetFriendList(string id) | ||
4022 | { | ||
4023 | UUID avatarID; | ||
4024 | if (!UUID.TryParse(id, out avatarID)) | ||
4025 | return new List<FriendListItem>(); | ||
4026 | |||
4027 | return CommsManager.GetUserFriendList(avatarID); | ||
4028 | } | ||
4029 | |||
4030 | public Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos(List<UUID> uuids) | ||
4031 | { | ||
4032 | return CommsManager.GetFriendRegionInfos(uuids); | ||
4033 | } | ||
4034 | |||
4035 | public virtual void StoreAddFriendship(UUID ownerID, UUID friendID, uint perms) | ||
4036 | { | ||
4037 | m_sceneGridService.AddNewUserFriend(ownerID, friendID, perms); | ||
4038 | } | ||
4039 | |||
4040 | public virtual void StoreUpdateFriendship(UUID ownerID, UUID friendID, uint perms) | ||
4041 | { | ||
4042 | m_sceneGridService.UpdateUserFriendPerms(ownerID, friendID, perms); | ||
4043 | } | ||
4044 | |||
4045 | public virtual void StoreRemoveFriendship(UUID ownerID, UUID ExfriendID) | ||
4046 | { | ||
4047 | m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID); | ||
4048 | } | ||
4049 | |||
4050 | #endregion | 3830 | #endregion |
4051 | 3831 | ||
4052 | public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) | 3832 | public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) |
@@ -4638,7 +4418,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4638 | group.GetPartName(localID), | 4418 | group.GetPartName(localID), |
4639 | group.GetPartDescription(localID), | 4419 | group.GetPartDescription(localID), |
4640 | (sbyte)AssetType.Object, | 4420 | (sbyte)AssetType.Object, |
4641 | Utils.StringToBytes(sceneObjectXml)); | 4421 | Utils.StringToBytes(sceneObjectXml), |
4422 | group.OwnerID); | ||
4642 | AssetService.Store(asset); | 4423 | AssetService.Store(asset); |
4643 | 4424 | ||
4644 | InventoryItemBase item = new InventoryItemBase(); | 4425 | InventoryItemBase item = new InventoryItemBase(); |
@@ -4962,5 +4743,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
4962 | if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 2000) | 4743 | if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 2000) |
4963 | StartTimer(); | 4744 | StartTimer(); |
4964 | } | 4745 | } |
4746 | |||
4747 | public override ISceneObject DeserializeObject(string representation) | ||
4748 | { | ||
4749 | return SceneObjectSerializer.FromXml2Format(representation); | ||
4750 | } | ||
4751 | |||
4752 | public override bool AllowScriptCrossings | ||
4753 | { | ||
4754 | get { return m_allowScriptCrossings; } | ||
4755 | } | ||
4965 | } | 4756 | } |
4966 | } | 4757 | } |