mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
Merge branch 'master' into careminster
Conflicts: OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs OpenSim/Region/Framework/Scenes/Scene.cs
This commit is contained in:
@@ -2955,6 +2955,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
ScenePresence sp;
|
||||
bool vialogin;
|
||||
bool reallyNew = true;
|
||||
|
||||
// Validation occurs in LLUDPServer
|
||||
//
|
||||
@@ -3013,6 +3014,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Already found {0} scene presence for {1} in {2} when asked to add new scene presence",
|
||||
sp.IsChildAgent ? "child" : "root", sp.Name, RegionInfo.RegionName);
|
||||
reallyNew = false;
|
||||
}
|
||||
|
||||
// We must set this here so that TriggerOnNewClient and TriggerOnClientLogin can determine whether the
|
||||
@@ -3024,7 +3026,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
// places. However, we still need to do it here for NPCs.
|
||||
CacheUserName(sp, aCircuit);
|
||||
|
||||
EventManager.TriggerOnNewClient(client);
|
||||
if (reallyNew)
|
||||
EventManager.TriggerOnNewClient(client);
|
||||
|
||||
if (vialogin)
|
||||
EventManager.TriggerOnClientLogin(client);
|
||||
}
|
||||
@@ -3583,15 +3587,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if (closeChildAgents && isChildAgent)
|
||||
{
|
||||
// Tell a single agent to disconnect from the region.
|
||||
IEventQueue eq = RequestModuleInterface<IEventQueue>();
|
||||
if (eq != null)
|
||||
{
|
||||
eq.DisableSimulator(RegionInfo.RegionHandle, avatar.UUID);
|
||||
}
|
||||
else
|
||||
{
|
||||
avatar.ControllingClient.SendShutdownConnectionNotice();
|
||||
}
|
||||
// Let's do this via UDP
|
||||
avatar.ControllingClient.SendShutdownConnectionNotice();
|
||||
}
|
||||
|
||||
// Only applies to root agents.
|
||||
@@ -3834,42 +3831,40 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return false;
|
||||
}
|
||||
|
||||
ScenePresence sp = GetScenePresence(agent.AgentID);
|
||||
|
||||
// If we have noo presence here or if that presence is a zombie root
|
||||
// presence that will be kicled, we need a new CAPS object.
|
||||
if (sp == null || (sp != null && !sp.IsChildAgent))
|
||||
{
|
||||
if (CapsModule != null)
|
||||
{
|
||||
lock (agent)
|
||||
{
|
||||
CapsModule.SetAgentCapsSeeds(agent);
|
||||
CapsModule.CreateCaps(agent.AgentID, agent.circuitcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sp != null)
|
||||
{
|
||||
if (!sp.IsChildAgent)
|
||||
{
|
||||
// We have a zombie from a crashed session.
|
||||
// Or the same user is trying to be root twice here, won't work.
|
||||
// Kill it.
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
|
||||
sp.Name, sp.UUID, RegionInfo.RegionName);
|
||||
|
||||
if (sp.ControllingClient != null)
|
||||
sp.ControllingClient.Close(true, true);
|
||||
|
||||
sp = null;
|
||||
}
|
||||
}
|
||||
|
||||
lock (agent)
|
||||
{
|
||||
ScenePresence sp = GetScenePresence(agent.AgentID);
|
||||
|
||||
if (sp != null)
|
||||
{
|
||||
if (!sp.IsChildAgent)
|
||||
{
|
||||
// We have a root agent. Is it in transit?
|
||||
if (!EntityTransferModule.IsInTransit(sp.UUID))
|
||||
{
|
||||
// We have a zombie from a crashed session.
|
||||
// Or the same user is trying to be root twice here, won't work.
|
||||
// Kill it.
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
|
||||
sp.Name, sp.UUID, RegionInfo.RegionName);
|
||||
|
||||
if (sp.ControllingClient != null)
|
||||
sp.ControllingClient.Close(true, true);
|
||||
|
||||
sp = null;
|
||||
}
|
||||
//else
|
||||
// m_log.WarnFormat("[SCENE]: Existing root scene presence for {0} {1} in {2}, but agent is in trasit", sp.Name, sp.UUID, RegionInfo.RegionName);
|
||||
}
|
||||
else
|
||||
{
|
||||
// We have a child agent here
|
||||
sp.DoNotCloseAfterTeleport = true;
|
||||
//m_log.WarnFormat("[SCENE]: Existing child scene presence for {0} {1} in {2}", sp.Name, sp.UUID, RegionInfo.RegionName);
|
||||
}
|
||||
}
|
||||
|
||||
// Optimistic: add or update the circuit data with the new agent circuit data and teleport flags.
|
||||
// We need the circuit data here for some of the subsequent checks. (groups, for example)
|
||||
// If the checks fail, we remove the circuit.
|
||||
@@ -3950,7 +3945,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
sp.AdjustKnownSeeds();
|
||||
|
||||
if (CapsModule != null)
|
||||
{
|
||||
CapsModule.SetAgentCapsSeeds(agent);
|
||||
CapsModule.CreateCaps(agent.AgentID, agent.circuitcode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5829,17 +5827,6 @@ Environment.Exit(1);
|
||||
{
|
||||
reason = "You are banned from the region";
|
||||
|
||||
if (EntityTransferModule.IsInTransit(agentID))
|
||||
{
|
||||
reason = "Agent is still in transit from this region";
|
||||
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Denying agent {0} entry into {1} since region still has them registered as in transit",
|
||||
agentID, RegionInfo.RegionName);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Permissions.IsGod(agentID))
|
||||
{
|
||||
reason = String.Empty;
|
||||
|
||||
@@ -764,6 +764,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used by the entity transfer module to signal when the presence should not be closed because a subsequent
|
||||
/// teleport is reusing the connection.
|
||||
/// </summary>
|
||||
/// <remarks>May be refactored or move somewhere else soon.</remarks>
|
||||
public bool DoNotCloseAfterTeleport { get; set; }
|
||||
|
||||
private float m_speedModifier = 1.0f;
|
||||
|
||||
public float SpeedModifier
|
||||
@@ -1541,11 +1548,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
client.Name, Scene.RegionInfo.RegionName, AbsolutePosition);
|
||||
|
||||
// Make sure it's not a login agent. We don't want to wait for updates during login
|
||||
if ((m_teleportFlags & TeleportFlags.ViaLogin) == 0)
|
||||
if (PresenceType != PresenceType.Npc && (m_teleportFlags & TeleportFlags.ViaLogin) == 0)
|
||||
{
|
||||
// Let's wait until UpdateAgent (called by departing region) is done
|
||||
if (!WaitForUpdateAgent(client))
|
||||
// The sending region never sent the UpdateAgent data, we have to refuse
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 look = Velocity;
|
||||
|
||||
|
||||
@@ -119,7 +119,20 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
|
||||
UUID spUuid = TestHelpers.ParseTail(0x1);
|
||||
|
||||
// The etm is only invoked by this test to check whether an agent is still in transit if there is a dupe
|
||||
EntityTransferModule etm = new EntityTransferModule();
|
||||
|
||||
IConfigSource config = new IniConfigSource();
|
||||
IConfig modulesConfig = config.AddConfig("Modules");
|
||||
modulesConfig.Set("EntityTransferModule", etm.Name);
|
||||
IConfig entityTransferConfig = config.AddConfig("EntityTransfer");
|
||||
|
||||
// In order to run a single threaded regression test we do not want the entity transfer module waiting
|
||||
// for a callback from the destination scene before removing its avatar data.
|
||||
entityTransferConfig.Set("wait_for_callback", false);
|
||||
|
||||
TestScene scene = new SceneHelpers().SetupScene();
|
||||
SceneHelpers.SetupSceneModules(scene, config, etm);
|
||||
SceneHelpers.AddScenePresence(scene, spUuid);
|
||||
SceneHelpers.AddScenePresence(scene, spUuid);
|
||||
|
||||
|
||||
@@ -136,6 +136,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
SceneHelpers.SetupSceneModules(sceneB, config, etmB);
|
||||
SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
|
||||
|
||||
// FIXME: Hack - this is here temporarily to revert back to older entity transfer behaviour
|
||||
lscm.ServiceVersion = "SIMULATION/0.1";
|
||||
|
||||
Vector3 teleportPosition = new Vector3(10, 11, 12);
|
||||
Vector3 teleportLookAt = new Vector3(20, 21, 22);
|
||||
|
||||
@@ -454,6 +457,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
SceneHelpers.SetupSceneModules(sceneA, config, new CapabilitiesModule(), etmA);
|
||||
SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB);
|
||||
|
||||
// FIXME: Hack - this is here temporarily to revert back to older entity transfer behaviour
|
||||
lscm.ServiceVersion = "SIMULATION/0.1";
|
||||
|
||||
Vector3 teleportPosition = new Vector3(10, 11, 12);
|
||||
Vector3 teleportLookAt = new Vector3(20, 21, 22);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user