diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index e94cdbe126..2532b7ed28 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -57,13 +57,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
public const int DefaultMaxTransferDistance = 4095;
public const bool WaitForAgentArrivedAtDestinationDefault = true;
- public string OutgoingTransferVersionName { get; set; }
+ private string OutgoingTransferVersionName { get; set; }
///
/// Determine the maximum entity transfer version we will use for teleports.
///
- public float MaxOutgoingTransferVersion { get; set; }
+ private float MaxOutgoingTransferVersion { get; set; }
+ private string m_myVersion = "";
///
/// The maximum distance, in standard region units (256m) that an agent is allowed to transfer.
///
@@ -275,6 +276,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
OutgoingTransferVersionName = transferVersionName;
MaxOutgoingTransferVersion = maxTransferVersion;
+ m_myVersion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
+
m_entityTransferStateMachine = new EntityTransferStateMachine(this);
m_Enabled = true;
@@ -767,9 +770,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string reason;
string version;
- string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
+
if (!Scene.SimulationService.QueryAccess(
- finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason))
+ finalDestination, sp.ControllingClient.AgentId, homeURI, true, position,m_myVersion, sp.Scene.GetFormatsOffered(), out version, out reason))
{
sp.ControllingClient.SendTeleportFailed(reason);
@@ -1489,22 +1492,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (m_bannedRegionCache.IfBanned(destinyHandle, agentID))
{
- reason = "Cannot connect to region";
return false;
}
Scene ascene = agent.Scene;
string homeURI = ascene.GetAgentHomeURI(agentID);
- string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
-
+
if (!ascene.SimulationService.QueryAccess(destiny, agentID, homeURI, false, position,
- myversion, agent.Scene.GetFormatsOffered(), out version, out reason))
+ m_myVersion, agent.Scene.GetFormatsOffered(), out version, out reason))
{
m_bannedRegionCache.Add(destinyHandle, agentID, 30.0, 30.0);
return false;
}
-
return true;
}
@@ -1514,15 +1514,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return GetDestination(scene, agentID, pos, out version, out newpos, out r);
}
- // Given a position relative to the current region (which has previously been tested to
- // see that it is actually outside the current region), find the new region that the
- // point is actually in.
- // Returns the coordinates and information of the new region or 'null' of it doesn't exist.
-
+ // Given a position relative to the current region and outside of it
+ // find the new region that the point is actually in.
+ // returns 'null' if new region not found or if information
+ // and new position relative to it
// now only works for crossings
public GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos,
- out string version, out Vector3 newpos, out string failureReason)
+ out string version, out Vector3 newpos, out string failureReason)
{
version = String.Empty;
newpos = pos;
@@ -1531,64 +1530,43 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// m_log.DebugFormat(
// "[ENTITY TRANSFER MODULE]: Crossing agent {0} at pos {1} in {2}", agent.Name, pos, scene.Name);
- // Compute world location of the object's position
+ // Compute world location of the agente position
double presenceWorldX = (double)scene.RegionInfo.WorldLocX + pos.X;
double presenceWorldY = (double)scene.RegionInfo.WorldLocY + pos.Y;
// Call the grid service to lookup the region containing the new position.
- GridRegion neighbourRegion = GetRegionContainingWorldLocation(scene.GridService, scene.RegionInfo.ScopeID,
- presenceWorldX, presenceWorldY,
- Math.Max(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY));
+ GridRegion neighbourRegion = GetRegionContainingWorldLocation(
+ scene.GridService, scene.RegionInfo.ScopeID,
+ presenceWorldX, presenceWorldY,
+ Math.Max(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY));
- if (neighbourRegion != null)
+ if (neighbourRegion == null)
{
- // Compute the entity's position relative to the new region
- newpos = new Vector3((float)(presenceWorldX - (double)neighbourRegion.RegionLocX),
+ return null;
+ }
+ if (m_bannedRegionCache.IfBanned(neighbourRegion.RegionHandle, agentID))
+ {
+ return null;
+ }
+
+ m_bannedRegionCache.Remove(neighbourRegion.RegionHandle, agentID);
+
+ // Compute the entity's position relative to the new region
+ newpos = new Vector3((float)(presenceWorldX - (double)neighbourRegion.RegionLocX),
(float)(presenceWorldY - (double)neighbourRegion.RegionLocY),
pos.Z);
- if (m_bannedRegionCache.IfBanned(neighbourRegion.RegionHandle, agentID))
- {
- failureReason = "Cannot region cross into banned parcel";
- neighbourRegion = null;
- }
- else
- {
- // If not banned, make sure this agent is not in the list.
- m_bannedRegionCache.Remove(neighbourRegion.RegionHandle, agentID);
- }
+ string homeURI = scene.GetAgentHomeURI(agentID);
- // Check to see if we have access to the target region.
- string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion);
- string homeURI = scene.GetAgentHomeURI(agentID);
- if (neighbourRegion != null
- && !scene.SimulationService.QueryAccess(
- neighbourRegion, agentID, homeURI, false, newpos, myversion,
- new List(), out version, out failureReason))
- {
- // remember banned
- m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
- neighbourRegion = null;
- }
- }
- else
+ if (!scene.SimulationService.QueryAccess(
+ neighbourRegion, agentID, homeURI, false, newpos, m_myVersion,
+ new List(), out version, out failureReason))
{
- // The destination region just doesn't exist
- failureReason = "Cannot cross into non-existent region";
+ // remember the fail
+ m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);
+ return null;
}
- if (neighbourRegion == null)
- m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}",
- LogHeader, scene.RegionInfo.RegionName,
- scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY,
- scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY,
- pos);
- else
- m_log.DebugFormat("{0} GetDestination: new region={1} at <{2},{3}> of size <{4},{5}>, newpos=<{6},{7}>",
- LogHeader, neighbourRegion.RegionName,
- neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY,
- newpos.X, newpos.Y);
-
return neighbourRegion;
}
@@ -1641,9 +1619,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return agent;
}
- public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY,
- Vector3 position,
- Scene initiatingScene);
+ public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY, Vector3 position, Scene initiatingScene);
private void InformClientToInitiateTeleportToLocation(ScenePresence agent, uint regionX, uint regionY, Vector3 position, Scene initiatingScene)
{
@@ -2319,7 +2295,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// thus re-ask the GridService about the location.
if (m_notFoundLocationCache.Contains(px, py))
{
- m_log.DebugFormat("{0} GetRegionContainingWorldLocation: Not found via cache. loc=<{1},{2}>", LogHeader, px, py);
+// m_log.DebugFormat("{0} GetRegionContainingWorldLocation: Not found via cache. loc=<{1},{2}>", LogHeader, px, py);
return null;
}