Merge branch 'avination' into careminster

Conflicts:
	OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
This commit is contained in:
Melanie
2013-03-03 13:24:37 +00:00
15 changed files with 122 additions and 59 deletions

View File

@@ -40,19 +40,19 @@ namespace OpenSim.Region.Framework.Interfaces
/// </summary>
/// <param name="agentId"></param>
/// <param name="capsObjectPath"></param>
void CreateCaps(UUID agentId);
void CreateCaps(UUID agentId, uint circuitCode);
/// <summary>
/// Remove the caps handler for a given agent.
/// </summary>
/// <param name="agentId"></param>
void RemoveCaps(UUID agentId);
void RemoveCaps(UUID agentId, uint circuitCode);
/// <summary>
/// Will return null if the agent doesn't have a caps handler registered
/// </summary>
/// <param name="agentId"></param>
Caps GetCapsForUser(UUID agentId);
Caps GetCapsForUser(uint circuitCode);
void SetAgentCapsSeeds(AgentCircuitData agent);
@@ -65,5 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
void DropChildSeed(UUID agentID, ulong handle);
string GetCapsPath(UUID agentId);
void ActivateCaps(uint circuitCode);
}
}

View File

@@ -276,6 +276,7 @@ namespace OpenSim.Region.Framework.Scenes
}
newMotion.m_timerStopped = false;
newMotion.m_running = true;
newMotion.m_isCrossing = false;
newMotion.m_waitingCrossing = false;
}

View File

@@ -2758,8 +2758,6 @@ namespace OpenSim.Region.Framework.Scenes
if (newPosition != Vector3.Zero)
newObject.RootPart.GroupPosition = newPosition;
if (newObject.RootPart.KeyframeMotion != null)
newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
if (!AddSceneObject(newObject))
{
@@ -2787,6 +2785,9 @@ namespace OpenSim.Region.Framework.Scenes
// before we restart the scripts, or else some functions won't work.
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
newObject.ResumeScripts();
if (newObject.RootPart.KeyframeMotion != null)
newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
}
// Do this as late as possible so that listeners have full access to the incoming object
@@ -3611,7 +3612,7 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: We shouldn't use closeChildAgents here - it's being used by the NPC module to stop
// unnecessary operations. This should go away once NPCs have no accompanying IClientAPI
if (closeChildAgents && CapsModule != null)
CapsModule.RemoveCaps(agentID);
CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode);
// // REFACTORING PROBLEM -- well not really a problem, but just to point out that whatever
// // this method is doing is HORRIBLE!!!
@@ -3842,20 +3843,36 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
ScenePresence sp = GetScenePresence(agent.AgentID);
if (sp != null && !sp.IsChildAgent)
// 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))
{
// 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 (CapsModule != null)
{
lock (agent)
{
CapsModule.SetAgentCapsSeeds(agent);
CapsModule.CreateCaps(agent.AgentID, agent.circuitcode);
}
}
}
sp.ControllingClient.Close(true, true);
sp = null;
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);
sp.ControllingClient.Close(true, true);
sp = null;
}
}
lock (agent)
@@ -3896,7 +3913,9 @@ namespace OpenSim.Region.Framework.Scenes
if (vialogin || (!m_seeIntoBannedRegion))
{
if (!AuthorizeUser(agent, out reason))
{
return false;
}
}
}
catch (Exception e)
@@ -3911,11 +3930,6 @@ namespace OpenSim.Region.Framework.Scenes
RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
agent.AgentID, agent.circuitcode);
if (CapsModule != null)
{
CapsModule.SetAgentCapsSeeds(agent);
CapsModule.CreateCaps(agent.AgentID);
}
}
else
{
@@ -3941,6 +3955,11 @@ namespace OpenSim.Region.Framework.Scenes
agent.teleportFlags = teleportFlags;
m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
if (CapsModule != null)
{
CapsModule.ActivateCaps(agent.circuitcode);
}
if (vialogin)
{
// CleanDroppedAttachments();