From 3c85afbb431d14a676c00d20bfeeb5e2d13e8eaf Mon Sep 17 00:00:00 2001 From: BlueWall Date: Thu, 12 Sep 2013 11:46:12 -0400 Subject: Allow setting the EntityTransfer-max_distance to 0 to override distance checks. This is to facilitate current viewer work fixing the distance limitations for teleporting. --- .../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 4219254..9302784 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -518,6 +518,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer /// private bool IsWithinMaxTeleportDistance(RegionInfo sourceRegion, GridRegion destRegion) { + if(MaxTransferDistance == 0) + return true; + // m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Source co-ords are x={0} y={1}", curRegionX, curRegionY); // // m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Final dest is x={0} y={1} {2}@{3}", -- cgit v1.1 From 979b17165b7e504385187ab082ef0a8cd50605bd Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 19 Sep 2013 22:45:50 +0100 Subject: For debug purposes, allow simulators to force use of earlier SIMULATION/0.1 teleport protocol even if SIMULATION/0.2 is available. This is specified in the MaxOutgoingTransferVersion attribute of [EntityTransfer] in OpenSim.ini, see OpenSimDefaults.ini for more details. Default remains "SIMULATION/0.2" Primarily for http://opensimulator.org/mantis/view.php?id=6755 --- .../EntityTransfer/EntityTransferModule.cs | 53 ++++++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 9302784..c1c8672 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -56,6 +56,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer public const int DefaultMaxTransferDistance = 4095; public const bool WaitForAgentArrivedAtDestinationDefault = true; + public string OutgoingTransferVersionName { get; set; } + + /// + /// Determine the maximum entity transfer version we will use for teleports. + /// + public float MaxOutgoingTransferVersion { get; set; } + /// /// The maximum distance, in standard region units (256m) that an agent is allowed to transfer. /// @@ -151,9 +158,35 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer /// protected virtual void InitialiseCommon(IConfigSource source) { + string transferVersionName = "SIMULATION"; + float maxTransferVersion = 0.2f; + IConfig transferConfig = source.Configs["EntityTransfer"]; if (transferConfig != null) { + string rawVersion + = transferConfig.GetString( + "MaxOutgoingTransferVersion", + string.Format("{0}/{1}", transferVersionName, maxTransferVersion)); + + string[] rawVersionComponents = rawVersion.Split(new char[] { '/' }); + + bool versionValid = false; + + if (rawVersionComponents.Length >= 2) + versionValid = float.TryParse(rawVersionComponents[1], out maxTransferVersion); + + if (!versionValid) + { + m_log.ErrorFormat( + "[ENTITY TRANSFER MODULE]: MaxOutgoingTransferVersion {0} is invalid, using {1}", + rawVersion, string.Format("{0}/{1}", transferVersionName, maxTransferVersion)); + } + else + { + transferVersionName = rawVersionComponents[0]; + } + DisableInterRegionTeleportCancellation = transferConfig.GetBoolean("DisableInterRegionTeleportCancellation", false); @@ -167,6 +200,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer MaxTransferDistance = DefaultMaxTransferDistance; } + OutgoingTransferVersionName = transferVersionName; + MaxOutgoingTransferVersion = maxTransferVersion; + m_entityTransferStateMachine = new EntityTransferStateMachine(this); m_Enabled = true; @@ -623,7 +659,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (!sp.ValidateAttachments()) m_log.DebugFormat( "[ENTITY TRANSFER MODULE]: Failed validation of all attachments for teleport of {0} from {1} to {2}. Continuing.", - sp.Name, sp.Scene.RegionInfo.RegionName, finalDestination.RegionName); + sp.Name, sp.Scene.Name, finalDestination.RegionName); string reason; string version; @@ -634,7 +670,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_log.DebugFormat( "[ENTITY TRANSFER MODULE]: {0} was stopped from teleporting from {1} to {2} because {3}", - sp.Name, sp.Scene.RegionInfo.RegionName, finalDestination.RegionName, reason); + sp.Name, sp.Scene.Name, finalDestination.RegionName, reason); return; } @@ -644,7 +680,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer // as server attempts. m_interRegionTeleportAttempts.Value++; - m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Destination is running version {0}", version); + m_log.DebugFormat( + "[ENTITY TRANSFER MODULE]: {0} max transfer version is {1}/{2}, {3} max version is {4}", + sp.Scene.Name, OutgoingTransferVersionName, MaxOutgoingTransferVersion, finalDestination.RegionName, version); // Fixing a bug where teleporting while sitting results in the avatar ending up removed from // both regions @@ -689,7 +727,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer agentCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath(); } - if (version.Equals("SIMULATION/0.2")) + // We're going to fallback to V1 if the destination gives us anything smaller than 0.2 or we're forcing + // use of the earlier protocol + float versionNumber = 0.1f; + string[] versionComponents = version.Split(new char[] { '/' }); + if (versionComponents.Length >= 2) + float.TryParse(versionComponents[1], out versionNumber); + + if (versionNumber == 0.2f && MaxOutgoingTransferVersion >= versionNumber) TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason); else TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason); -- cgit v1.1 From babfbe8d6d29380e42242008b6a743bc895ddb96 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 26 Sep 2013 00:31:33 +0100 Subject: minor: log MaxOutgoingTransferVersion at EntityTransferModule startup --- .../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index c1c8672..8ae81ac 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -185,6 +185,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer else { transferVersionName = rawVersionComponents[0]; + + m_log.InfoFormat( + "[ENTITY TRANSFER MODULE]: MaxOutgoingTransferVersion set to {0}", + string.Format("{0}/{1}", transferVersionName, maxTransferVersion)); } DisableInterRegionTeleportCancellation -- cgit v1.1 From d6d82dbd3c9d081209914351ff3cc18c349e362b Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 26 Sep 2013 20:13:29 +0100 Subject: minor: correct attachment spelling mistake in log message in HGEntityTransferModule.OnIncomingSceneObject() --- .../CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 76dbc72..04a0db6 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -181,7 +181,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (aCircuit.ServiceURLs != null && aCircuit.ServiceURLs.ContainsKey("AssetServerURI")) { string url = aCircuit.ServiceURLs["AssetServerURI"].ToString(); - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Incoming attachement {0} for HG user {1} with asset server {2}", so.Name, so.AttachedAvatar, url); + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Incoming attachment {0} for HG user {1} with asset server {2}", so.Name, so.AttachedAvatar, url); Dictionary ids = new Dictionary(); HGUuidGatherer uuidGatherer = new HGUuidGatherer(Scene.AssetService, url); uuidGatherer.GatherAssetUuids(so, ids); -- cgit v1.1 From b16bc7b01ca0691758e66f85238d657f02271082 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 27 Sep 2013 19:14:21 +0100 Subject: refactor: rename Scene.IncomingCloseAgent() to CloseAgent() in order to make it clear that all non-clientstack callers should be using this rather than RemoveClient() in order to step through the ScenePresence state machine properly. Adds IScene.CloseAgent() to replace RemoveClient() --- .../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 8ae81ac..aa8a4db 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -972,7 +972,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) { - if (!sp.Scene.IncomingPreCloseAgent(sp)) + if (!sp.Scene.IncomingPreCloseClient(sp)) return; // We need to delay here because Imprudence viewers, unlike v1 or v3, have a short (<200ms, <500ms) delay before @@ -983,7 +983,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer // an agent cannot teleport back to this region if it has teleported away. Thread.Sleep(2000); - sp.Scene.IncomingCloseAgent(sp.UUID, false); + sp.Scene.CloseAgent(sp.UUID, false); } else { @@ -1137,7 +1137,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) { - if (!sp.Scene.IncomingPreCloseAgent(sp)) + if (!sp.Scene.IncomingPreCloseClient(sp)) return; // RED ALERT!!!! @@ -1154,7 +1154,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_log.DebugFormat( "[ENTITY TRANSFER MODULE]: Closing agent {0} in {1} after teleport", sp.Name, Scene.Name); - sp.Scene.IncomingCloseAgent(sp.UUID, false); + sp.Scene.CloseAgent(sp.UUID, false); } else { -- cgit v1.1