aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs74
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs17
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs5
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs8
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs31
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs21
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs1
11 files changed, 80 insertions, 87 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index f63089d..d3d6f25 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -373,7 +373,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
373 // Save avatar attachment information 373 // Save avatar attachment information
374 if (m_scene.AvatarFactory != null) 374 if (m_scene.AvatarFactory != null)
375 { 375 {
376 m_log.Debug("[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId + ", ItemID: " + itemID); 376 m_log.Debug("[ATTACHMENTS MODULE]: Dettaching from UserID: " + remoteClient.AgentId + ", ItemID: " + itemID);
377 m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); 377 m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
378 } 378 }
379 } 379 }
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 22c8937..7e5a8ec 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -198,7 +198,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
198 198
199 public void UpdateDatabase(UUID user, AvatarAppearance appearance) 199 public void UpdateDatabase(UUID user, AvatarAppearance appearance)
200 { 200 {
201 //m_log.DebugFormat("[APPEARANCE]: UpdateDatabase"); 201 m_log.DebugFormat("[APPEARANCE]: UpdateDatabase");
202 AvatarData adata = new AvatarData(appearance); 202 AvatarData adata = new AvatarData(appearance);
203 m_scene.AvatarService.SetAvatar(user, adata); 203 m_scene.AvatarService.SetAvatar(user, adata);
204 } 204 }
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 3fcc0e8..927eeab 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -396,7 +396,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
396 agent.Position = position; 396 agent.Position = position;
397 SetCallbackURL(agent, sp.Scene.RegionInfo); 397 SetCallbackURL(agent, sp.Scene.RegionInfo);
398 398
399 UpdateAgent(reg, finalDestination, agent); 399 if (!UpdateAgent(reg, finalDestination, agent))
400 {
401 // Region doesn't take it
402 Fail(sp, finalDestination);
403 return;
404 }
400 405
401 m_log.DebugFormat( 406 m_log.DebugFormat(
402 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID); 407 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID);
@@ -421,21 +426,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
421 // that the client contacted the destination before we send the attachments and close things here. 426 // that the client contacted the destination before we send the attachments and close things here.
422 if (!WaitForCallback(sp.UUID)) 427 if (!WaitForCallback(sp.UUID))
423 { 428 {
424 // Client never contacted destination. Let's restore everything back 429 Fail(sp, finalDestination);
425 sp.ControllingClient.SendTeleportFailed("Problems connecting to destination.");
426
427 // Fail. Reset it back
428 sp.IsChildAgent = false;
429
430 ResetFromTransit(sp.UUID);
431
432 // Yikes! We should just have a ref to scene here.
433 //sp.Scene.InformClientOfNeighbours(sp);
434 EnableChildAgents(sp);
435
436 // Finally, kill the agent we just created at the destination.
437 m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID);
438
439 return; 430 return;
440 } 431 }
441 432
@@ -475,6 +466,22 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
475 } 466 }
476 } 467 }
477 468
469 private void Fail(ScenePresence sp, GridRegion finalDestination)
470 {
471 // Client never contacted destination. Let's restore everything back
472 sp.ControllingClient.SendTeleportFailed("Problems connecting to destination.");
473
474 // Fail. Reset it back
475 sp.IsChildAgent = false;
476
477 ResetFromTransit(sp.UUID);
478
479 EnableChildAgents(sp);
480
481 // Finally, kill the agent we just created at the destination.
482 m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID);
483
484 }
478 485
479 protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason) 486 protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason)
480 { 487 {
@@ -813,7 +820,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
813 cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort + 820 cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort +
814 "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/"; 821 "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/";
815 822
816 m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent); 823 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
824 {
825 // region doesn't take it
826 ResetFromTransit(agent.UUID);
827 return agent;
828 }
817 829
818 // Next, let's close the child agent connections that are too far away. 830 // Next, let's close the child agent connections that are too far away.
819 agent.CloseChildAgents(neighbourx, neighboury); 831 agent.CloseChildAgents(neighbourx, neighboury);
@@ -914,12 +926,40 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
914 /// </summary> 926 /// </summary>
915 public void EnableChildAgent(ScenePresence sp, GridRegion region) 927 public void EnableChildAgent(ScenePresence sp, GridRegion region)
916 { 928 {
929 m_log.DebugFormat("[ENTITY TRANSFER]: Enabling child agent in new neighour {0}", region.RegionName);
930
931 AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
917 AgentCircuitData agent = sp.ControllingClient.RequestClientInfo(); 932 AgentCircuitData agent = sp.ControllingClient.RequestClientInfo();
918 agent.BaseFolder = UUID.Zero; 933 agent.BaseFolder = UUID.Zero;
919 agent.InventoryFolder = UUID.Zero; 934 agent.InventoryFolder = UUID.Zero;
920 agent.startpos = new Vector3(128, 128, 70); 935 agent.startpos = new Vector3(128, 128, 70);
921 agent.child = true; 936 agent.child = true;
922 agent.Appearance = sp.Appearance; 937 agent.Appearance = sp.Appearance;
938 agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
939
940 agent.ChildrenCapSeeds = new Dictionary<ulong, string>(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID));
941 m_log.DebugFormat("[XXX] Seeds 1 {0}", agent.ChildrenCapSeeds.Count);
942
943 if (!agent.ChildrenCapSeeds.ContainsKey(sp.Scene.RegionInfo.RegionHandle))
944 agent.ChildrenCapSeeds.Add(sp.Scene.RegionInfo.RegionHandle, sp.ControllingClient.RequestClientInfo().CapsPath);
945 m_log.DebugFormat("[XXX] Seeds 2 {0}", agent.ChildrenCapSeeds.Count);
946
947 sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath);
948 foreach (ulong h in agent.ChildrenCapSeeds.Keys)
949 m_log.DebugFormat("[XXX] --> {0}", h);
950 m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle);
951 agent.ChildrenCapSeeds.Add(region.RegionHandle, agent.CapsPath);
952
953 if (sp.Scene.CapsModule != null)
954 {
955 sp.Scene.CapsModule.SetChildrenSeed(sp.UUID, agent.ChildrenCapSeeds);
956 }
957
958 if (currentAgentCircuit != null)
959 {
960 agent.ServiceURLs = currentAgentCircuit.ServiceURLs;
961 agent.Viewer = currentAgentCircuit.Viewer;
962 }
923 963
924 IPEndPoint external = region.ExternalEndPoint; 964 IPEndPoint external = region.ExternalEndPoint;
925 if (external != null) 965 if (external != null)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs
index 8a90370..35518d5 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs
@@ -123,17 +123,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour
123 123
124 public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) 124 public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
125 { 125 {
126 m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}",
127 thisRegion.RegionName, regionHandle, m_Scenes.Count);
128 foreach (Scene s in m_Scenes) 126 foreach (Scene s in m_Scenes)
129 { 127 {
130 if (s.RegionInfo.RegionHandle == regionHandle) 128 if (s.RegionInfo.RegionHandle == regionHandle)
131 { 129 {
132 m_log.Debug("[NEIGHBOUR IN CONNECTOR]: Found region to SendHelloNeighbour"); 130 //m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0} to {1}", thisRegion.RegionName, s.RegionInfo.RegionName);
133 return s.IncomingHelloNeighbour(thisRegion); 131 return s.IncomingHelloNeighbour(thisRegion);
134 } 132 }
135 } 133 }
136 m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle);
137 return null; 134 return null;
138 } 135 }
139 136
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
index 1b00c8a..b2e3f4f 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs
@@ -181,22 +181,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
181 181
182 public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) 182 public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID)
183 { 183 {
184 if (m_LocalCache.ContainsKey(regionID)) 184 return m_GridService.GetNeighbours(scopeID, regionID);
185 {
186 List<GridRegion> neighbours = m_LocalCache[regionID].GetNeighbours();
187 if (neighbours.Count == 0)
188 // try the DB
189 neighbours = m_GridService.GetNeighbours(scopeID, regionID);
190 return neighbours;
191 }
192 else
193 {
194 m_log.WarnFormat("[LOCAL GRID CONNECTOR]: GetNeighbours: Requested region {0} is not on this sim", regionID);
195 return new List<GridRegion>();
196 }
197
198 // Don't go to the DB
199 //return m_GridService.GetNeighbours(scopeID, regionID);
200 } 185 }
201 186
202 public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) 187 public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs
index 46741a5..16e25e6 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs
@@ -153,12 +153,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
153 return false; 153 return false;
154 } 154 }
155 155
156 // Let's override GetNeighbours completely -- never go to the grid server
157 // Neighbours are/should be cached locally
158 // For retrieval from the DB, caller should call GetRegionByPosition
159 public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) 156 public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID)
160 { 157 {
161 return m_LocalGridService.GetNeighbours(scopeID, regionID); 158 return base.GetNeighbours(scopeID, regionID);
162 } 159 }
163 160
164 public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) 161 public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs
index daba0b3..f71bf46 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs
@@ -121,17 +121,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour
121 121
122 public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) 122 public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
123 { 123 {
124 m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", 124 m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}.",
125 thisRegion.RegionName, regionHandle, m_Scenes.Count); 125 thisRegion.RegionName, regionHandle);
126 foreach (Scene s in m_Scenes) 126 foreach (Scene s in m_Scenes)
127 { 127 {
128 if (s.RegionInfo.RegionHandle == regionHandle) 128 if (s.RegionInfo.RegionHandle == regionHandle)
129 { 129 {
130 m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour"); 130 //m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour");
131 return s.IncomingHelloNeighbour(thisRegion); 131 return s.IncomingHelloNeighbour(thisRegion);
132 } 132 }
133 } 133 }
134 m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); 134 //m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle);
135 return null; 135 return null;
136 } 136 }
137 137
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
index 377c868..e16e273 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
@@ -181,7 +181,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
181 // else do the remote thing 181 // else do the remote thing
182 if (!m_localBackend.IsLocalRegion(destination.RegionHandle)) 182 if (!m_localBackend.IsLocalRegion(destination.RegionHandle))
183 { 183 {
184 //m_regionClient.SendUserInformation(regInfo, aCircuit);
185 return m_remoteConnector.CreateAgent(destination, aCircuit, teleportFlags, out reason); 184 return m_remoteConnector.CreateAgent(destination, aCircuit, teleportFlags, out reason);
186 } 185 }
187 return false; 186 return false;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b58bfb8..82d4759 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -964,12 +964,6 @@ namespace OpenSim.Region.Framework.Scenes
964 // Let the grid service module know, so this can be cached 964 // Let the grid service module know, so this can be cached
965 m_eventManager.TriggerOnRegionUp(otherRegion); 965 m_eventManager.TriggerOnRegionUp(otherRegion);
966 966
967 RegionInfo regInfo = new RegionInfo(xcell, ycell, otherRegion.InternalEndPoint, otherRegion.ExternalHostName);
968 regInfo.RegionID = otherRegion.RegionID;
969 regInfo.RegionName = otherRegion.RegionName;
970 regInfo.ScopeID = otherRegion.ScopeID;
971 regInfo.ExternalHostName = otherRegion.ExternalHostName;
972 GridRegion r = new GridRegion(regInfo);
973 try 967 try
974 { 968 {
975 ForEachScenePresence(delegate(ScenePresence agent) 969 ForEachScenePresence(delegate(ScenePresence agent)
@@ -984,7 +978,7 @@ namespace OpenSim.Region.Framework.Scenes
984 old.Add(otherRegion.RegionHandle); 978 old.Add(otherRegion.RegionHandle);
985 agent.DropOldNeighbours(old); 979 agent.DropOldNeighbours(old);
986 if (m_teleportModule != null) 980 if (m_teleportModule != null)
987 m_teleportModule.EnableChildAgent(agent, r); 981 m_teleportModule.EnableChildAgent(agent, otherRegion);
988 } 982 }
989 } 983 }
990 ); 984 );
@@ -1546,6 +1540,7 @@ namespace OpenSim.Region.Framework.Scenes
1546 { 1540 {
1547 m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); 1541 m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName);
1548 LoginsDisabled = false; 1542 LoginsDisabled = false;
1543 m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo);
1549 } 1544 }
1550 } 1545 }
1551 } 1546 }
@@ -1830,6 +1825,8 @@ namespace OpenSim.Region.Framework.Scenes
1830 { 1825 {
1831 RegisterCommsEvents(); 1826 RegisterCommsEvents();
1832 1827
1828 m_sceneGridService.SetScene(this);
1829
1833 // These two 'commands' *must be* next to each other or sim rebooting fails. 1830 // These two 'commands' *must be* next to each other or sim rebooting fails.
1834 //m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo); 1831 //m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo);
1835 1832
@@ -1840,24 +1837,6 @@ namespace OpenSim.Region.Framework.Scenes
1840 throw new Exception(error); 1837 throw new Exception(error);
1841 } 1838 }
1842 1839
1843 m_sceneGridService.SetScene(this);
1844 m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo);
1845
1846 //Dictionary<string, string> dGridSettings = m_sceneGridService.GetGridSettings();
1847
1848 //if (dGridSettings.ContainsKey("allow_forceful_banlines"))
1849 //{
1850 // if (dGridSettings["allow_forceful_banlines"] != "TRUE")
1851 // {
1852 // m_log.Info("[GRID]: Grid is disabling forceful parcel banlists");
1853 // EventManager.TriggerSetAllowForcefulBan(false);
1854 // }
1855 // else
1856 // {
1857 // m_log.Info("[GRID]: Grid is allowing forceful parcel banlists");
1858 // EventManager.TriggerSetAllowForcefulBan(true);
1859 // }
1860 //}
1861 } 1840 }
1862 1841
1863 /// <summary> 1842 /// <summary>
@@ -3934,6 +3913,8 @@ namespace OpenSim.Region.Framework.Scenes
3934 m_log.DebugFormat( 3913 m_log.DebugFormat(
3935 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); 3914 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName);
3936 3915
3916 // XPTO: if this agent is not allowed here as root, always return false
3917
3937 // We have to wait until the viewer contacts this region after receiving EAC. 3918 // We have to wait until the viewer contacts this region after receiving EAC.
3938 // That calls AddNewClient, which finally creates the ScenePresence 3919 // That calls AddNewClient, which finally creates the ScenePresence
3939 ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID); 3920 ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID);
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 6309cd9..a9ecde8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -182,24 +182,17 @@ namespace OpenSim.Region.Framework.Scenes
182 { 182 {
183 //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName); 183 //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName);
184 184
185 for (int x = (int)region.RegionLocX - 1; x <= region.RegionLocX + 1; x++) 185 List<GridRegion> neighbours = m_scene.GridService.GetNeighbours(m_scene.RegionInfo.ScopeID, m_scene.RegionInfo.RegionID);
186 m_log.DebugFormat("[INTERGRID]: Informing {0} neighbours that this region is up", neighbours.Count);
187 foreach (GridRegion n in neighbours)
186 { 188 {
187 for (int y = (int)region.RegionLocY - 1; y <= region.RegionLocY + 1; y++) 189 InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync;
188 { 190 d.BeginInvoke(neighbourService, region, n.RegionHandle,
189 if (!((x == region.RegionLocX) && (y == region.RegionLocY))) // skip this region 191 InformNeighborsThatRegionisUpCompleted,
190 { 192 d);
191 ulong handle = Utils.UIntsToLong((uint)x * Constants.RegionSize, (uint)y * Constants.RegionSize);
192 InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync;
193
194 d.BeginInvoke(neighbourService, region, handle,
195 InformNeighborsThatRegionisUpCompleted,
196 d);
197 }
198 }
199 } 193 }
200 } 194 }
201 195
202
203 public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, ulong regionHandle); 196 public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, ulong regionHandle);
204 197
205 /// <summary> 198 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 6d2cd88..d4fc6cd 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3390,6 +3390,7 @@ Console.WriteLine("Scripted Sit ofset {0}", m_pos);
3390 { 3390 {
3391 if (cAgent.Attachments != null) 3391 if (cAgent.Attachments != null)
3392 { 3392 {
3393 m_appearance.ClearAttachments();
3393 foreach (AttachmentData att in cAgent.Attachments) 3394 foreach (AttachmentData att in cAgent.Attachments)
3394 { 3395 {
3395 m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID); 3396 m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID);