Kick the user from the region in the circumstance that the TP home failed - ONLY if it was triggered by an estate ban. This makes baby jesus cry, and should be fixed to search for alternative regions if the home region is unavailable.
parent
8a1640f0a1
commit
4cf5ef3cd4
|
@ -99,7 +99,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
protected virtual void OnNewClient(IClientAPI client)
|
protected virtual void OnNewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnTeleportHomeRequest += TeleportHome;
|
client.OnTeleportHomeRequest += TeleportHomeFired;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Close()
|
public virtual void Close()
|
||||||
|
@ -552,7 +552,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
#region Teleport Home
|
#region Teleport Home
|
||||||
|
|
||||||
public virtual void TeleportHome(UUID id, IClientAPI client)
|
public void TeleportHomeFired(UUID id, IClientAPI client)
|
||||||
|
{
|
||||||
|
TeleportHome(id, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool TeleportHome(UUID id, IClientAPI client)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName);
|
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName);
|
||||||
|
|
||||||
|
@ -565,14 +570,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
// can't find the Home region: Tell viewer and abort
|
// can't find the Home region: Tell viewer and abort
|
||||||
client.SendTeleportFailed("You don't have a home position set.");
|
client.SendTeleportFailed("You don't have a home position set.");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
GridRegion regionInfo = m_aScene.GridService.GetRegionByUUID(UUID.Zero, uinfo.HomeRegionID);
|
GridRegion regionInfo = m_aScene.GridService.GetRegionByUUID(UUID.Zero, uinfo.HomeRegionID);
|
||||||
if (regionInfo == null)
|
if (regionInfo == null)
|
||||||
{
|
{
|
||||||
// can't find the Home region: Tell viewer and abort
|
// can't find the Home region: Tell viewer and abort
|
||||||
client.SendTeleportFailed("Your home region could not be found.");
|
client.SendTeleportFailed("Your home region could not be found.");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})",
|
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})",
|
||||||
regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize);
|
regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize);
|
||||||
|
@ -586,8 +591,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
// can't find the Home region: Tell viewer and abort
|
// can't find the Home region: Tell viewer and abort
|
||||||
client.SendTeleportFailed("Your home region could not be found.");
|
client.SendTeleportFailed("Your home region could not be found.");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -86,7 +86,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
protected override void OnNewClient(IClientAPI client)
|
protected override void OnNewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnTeleportHomeRequest += TeleportHome;
|
client.OnTeleportHomeRequest += TeleportHomeFired;
|
||||||
client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed);
|
client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +174,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason);
|
return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void TeleportHome(UUID id, IClientAPI client)
|
public void TeleportHomeFired(UUID id, IClientAPI client)
|
||||||
|
{
|
||||||
|
TeleportHome(id, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool TeleportHome(UUID id, IClientAPI client)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName);
|
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Request to teleport {0} {1} home", client.FirstName, client.LastName);
|
||||||
|
|
||||||
|
@ -184,8 +189,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
// local grid user
|
// local grid user
|
||||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local");
|
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local");
|
||||||
base.TeleportHome(id, client);
|
return base.TeleportHome(id, client);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Foreign user wants to go home
|
// Foreign user wants to go home
|
||||||
|
@ -195,7 +199,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
client.SendTeleportFailed("Your information has been lost");
|
client.SendTeleportFailed("Your information has been lost");
|
||||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Unable to locate agent's gateway information");
|
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Unable to locate agent's gateway information");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IUserAgentService userAgentService = new UserAgentServiceConnector(aCircuit.ServiceURLs["HomeURI"].ToString());
|
IUserAgentService userAgentService = new UserAgentServiceConnector(aCircuit.ServiceURLs["HomeURI"].ToString());
|
||||||
|
@ -205,7 +209,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
client.SendTeleportFailed("Your home region could not be found");
|
client.SendTeleportFailed("Your home region could not be found");
|
||||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent's home region not found");
|
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent's home region not found");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScenePresence sp = ((Scene)(client.Scene)).GetScenePresence(client.AgentId);
|
ScenePresence sp = ((Scene)(client.Scene)).GetScenePresence(client.AgentId);
|
||||||
|
@ -213,7 +217,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
client.SendTeleportFailed("Internal error");
|
client.SendTeleportFailed("Internal error");
|
||||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent not found in the scene where it is supposed to be");
|
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Agent not found in the scene where it is supposed to be");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>();
|
IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>();
|
||||||
|
@ -223,6 +227,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
aCircuit.firstname, aCircuit.lastname, finalDestination.RegionName, homeGatekeeper.ExternalHostName, homeGatekeeper.HttpPort, homeGatekeeper.RegionName);
|
aCircuit.firstname, aCircuit.lastname, finalDestination.RegionName, homeGatekeeper.ExternalHostName, homeGatekeeper.HttpPort, homeGatekeeper.RegionName);
|
||||||
|
|
||||||
DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome), eq);
|
DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome), eq);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -345,7 +345,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
{
|
{
|
||||||
if (!s.IsChildAgent)
|
if (!s.IsChildAgent)
|
||||||
{
|
{
|
||||||
m_scene.TeleportClientHome(user, s.ControllingClient);
|
if (!m_scene.TeleportClientHome(user, s.ControllingClient))
|
||||||
|
{
|
||||||
|
s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
|
||||||
|
s.ControllingClient.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,7 +483,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
ScenePresence s = m_scene.GetScenePresence(prey);
|
ScenePresence s = m_scene.GetScenePresence(prey);
|
||||||
if (s != null)
|
if (s != null)
|
||||||
{
|
{
|
||||||
m_scene.TeleportClientHome(prey, s.ControllingClient);
|
if (!m_scene.TeleportClientHome(prey, s.ControllingClient))
|
||||||
|
{
|
||||||
|
s.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
|
||||||
|
s.ControllingClient.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -498,7 +506,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
// Also make sure they are actually in the region
|
// Also make sure they are actually in the region
|
||||||
if (p != null && !p.IsChildAgent)
|
if (p != null && !p.IsChildAgent)
|
||||||
{
|
{
|
||||||
m_scene.TeleportClientHome(p.UUID, p.ControllingClient);
|
if (!m_scene.TeleportClientHome(p.UUID, p.ControllingClient))
|
||||||
|
{
|
||||||
|
p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
|
||||||
|
p.ControllingClient.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
void Teleport(ScenePresence agent, ulong regionHandle, Vector3 position,
|
void Teleport(ScenePresence agent, ulong regionHandle, Vector3 position,
|
||||||
Vector3 lookAt, uint teleportFlags);
|
Vector3 lookAt, uint teleportFlags);
|
||||||
|
|
||||||
void TeleportHome(UUID id, IClientAPI client);
|
bool TeleportHome(UUID id, IClientAPI client);
|
||||||
|
|
||||||
void Cross(ScenePresence agent, bool isFlying);
|
void Cross(ScenePresence agent, bool isFlying);
|
||||||
|
|
||||||
|
|
|
@ -2985,15 +2985,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="agentId">The avatar's Unique ID</param>
|
/// <param name="agentId">The avatar's Unique ID</param>
|
||||||
/// <param name="client">The IClientAPI for the client</param>
|
/// <param name="client">The IClientAPI for the client</param>
|
||||||
public virtual void TeleportClientHome(UUID agentId, IClientAPI client)
|
public virtual bool TeleportClientHome(UUID agentId, IClientAPI client)
|
||||||
{
|
{
|
||||||
if (m_teleportModule != null)
|
if (m_teleportModule != null)
|
||||||
m_teleportModule.TeleportHome(agentId, client);
|
return m_teleportModule.TeleportHome(agentId, client);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active");
|
m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active");
|
||||||
client.SendTeleportFailed("Unable to perform teleports on this simulator.");
|
client.SendTeleportFailed("Unable to perform teleports on this simulator.");
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue