diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 0d053e4db4..f4b35a6019 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -184,7 +184,7 @@ namespace OpenSim.Framework
/// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json
///
/// map of the agent circuit data
- public OSDMap PackAgentCircuitData()
+ public OSDMap PackAgentCircuitData(int wearablesCount)
{
OSDMap args = new OSDMap();
args["agent_id"] = OSD.FromUUID(AgentID);
@@ -224,7 +224,7 @@ namespace OpenSim.Framework
{
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
- OSDMap appmap = Appearance.Pack();
+ OSDMap appmap = Appearance.Pack(wearablesCount);
args["packed_appearance"] = appmap;
}
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 72c6bfc2df..50746a08d0 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -211,13 +211,12 @@ namespace OpenSim.Framework
m_serial = appearance.Serial;
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
- m_wearables[i] = new AvatarWearable();
+ ClearWearables();
if (copyWearables && (appearance.Wearables != null))
{
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ m_wearables = new AvatarWearable[appearance.Wearables.Length];
+ for (int i = 0; i < appearance.Wearables.Length; i++)
SetWearable(i,appearance.Wearables[i]);
}
@@ -247,7 +246,7 @@ namespace OpenSim.Framework
public void GetAssetsFrom(AvatarAppearance app)
{
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ for (int i = 0; i < m_wearables.Length; i++)
{
for (int j = 0; j < m_wearables[i].Count; j++)
{
@@ -262,8 +261,8 @@ namespace OpenSim.Framework
public void ClearWearables()
{
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ m_wearables = new AvatarWearable[AvatarWearable.LEGACY_VERSION_MAX_WEARABLES];
+ for (int i = 0; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES; i++)
m_wearables[i] = new AvatarWearable();
}
@@ -470,11 +469,15 @@ namespace OpenSim.Framework
// DEBUG ON
// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
// DEBUG OFF
+ if (wearableId >= m_wearables.Length)
+ {
+ int currentLength = m_wearables.Length;
+ Array.Resize(ref m_wearables, wearableId + 1);
+ for (int i = currentLength ; i < m_wearables.Length ; i++)
+ m_wearables[i] = new AvatarWearable();
+ }
m_wearables[wearableId].Clear();
- int count = wearable.Count;
- if (count > AvatarWearable.MAX_WEARABLES)
- count = AvatarWearable.MAX_WEARABLES;
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < wearable.Count; i++)
m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
}
@@ -714,7 +717,7 @@ namespace OpenSim.Framework
///
/// Create an OSDMap from the appearance data
///
- public OSDMap Pack()
+ public OSDMap Pack(int wearablesCount)
{
OSDMap data = new OSDMap();
@@ -722,9 +725,22 @@ namespace OpenSim.Framework
data["height"] = OSD.FromReal(m_avatarHeight);
// Wearables
- OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES);
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
- wears.Add(m_wearables[i].Pack());
+ //
+ // This will send as many or as few wearables as we have, unless a count
+ // is given. Used for legacy (pre 0.4) versions.
+ int count = wearablesCount;
+ if (wearablesCount == -1)
+ count = m_wearables.Length;
+ OSDArray wears = new OSDArray(count);
+ for (int i = 0; i < count; i++)
+ {
+ AvatarWearable dummyWearable = new AvatarWearable();
+
+ if (i < m_wearables.Length)
+ wears.Add(m_wearables[i].Pack());
+ else
+ wears.Add(dummyWearable.Pack());
+ }
data["wearables"] = wears;
// Avatar Textures
@@ -782,8 +798,8 @@ namespace OpenSim.Framework
OSDArray wears = (OSDArray)(data["wearables"]);
int count = wears.Count;
- if (count > AvatarWearable.MAX_WEARABLES)
- count = AvatarWearable.MAX_WEARABLES;
+
+ m_wearables = new AvatarWearable[count];
for (int i = 0; i < count; i++)
m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index e662d5f42e..80ed77f5a3 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -68,7 +68,7 @@ namespace OpenSim.Framework
public static readonly int ALPHA = 13;
public static readonly int TATTOO = 14;
- public static readonly int MAX_WEARABLES = 15;
+ public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15;
// public static readonly int PHYSICS = 15;
// public static int MAX_WEARABLES = 16;
@@ -225,8 +225,9 @@ namespace OpenSim.Framework
{
get
{
- AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES];
- for (int i = 0; i < MAX_WEARABLES; i++)
+ // We use the legacy count here because this is just a fallback anyway
+ AvatarWearable[] defaultWearables = new AvatarWearable[LEGACY_VERSION_MAX_WEARABLES];
+ for (int i = 0; i < LEGACY_VERSION_MAX_WEARABLES; i++)
{
defaultWearables[i] = new AvatarWearable();
}
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index a714d867b9..2fce155208 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -61,7 +61,7 @@ namespace OpenSim.Framework
{
UUID AgentID { get; set; }
- OSDMap Pack();
+ OSDMap Pack(Object parms = null);
void Unpack(OSDMap map, IScene scene);
}
@@ -96,7 +96,7 @@ namespace OpenSim.Framework
public Dictionary ChildrenCapSeeds = null;
- public OSDMap Pack()
+ public OSDMap Pack(Object parms = null)
{
OSDMap args = new OSDMap();
args["message_type"] = OSD.FromString("AgentPosition");
@@ -391,8 +391,18 @@ namespace OpenSim.Framework
public Dictionary MovementAnimationOverRides = new Dictionary();
- public virtual OSDMap Pack()
+ public virtual OSDMap Pack(Object parms = null)
{
+ int wearablesCount = -1;
+
+ if (parms != null)
+ {
+ Hashtable p = (Hashtable)parms;
+
+ if (p.ContainsKey("wearablesCount"))
+ wearablesCount = (int)p["wearablesCount"];
+ }
+
// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data");
OSDMap args = new OSDMap();
@@ -493,7 +503,7 @@ namespace OpenSim.Framework
}
if (Appearance != null)
- args["packed_appearance"] = Appearance.Pack();
+ args["packed_appearance"] = Appearance.Pack(wearablesCount);
//if ((AgentTextures != null) && (AgentTextures.Length > 0))
//{
@@ -800,11 +810,7 @@ namespace OpenSim.Framework
{
OSDArray wears = (OSDArray)(args["wearables"]);
- int count = wears.Count;
- if (count > AvatarWearable.MAX_WEARABLES)
- count = AvatarWearable.MAX_WEARABLES;
-
- for (int i = 0; i < count / 2; i++)
+ for (int i = 0; i < wears.Count / 2; i++)
{
AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
Appearance.SetWearable(i, awear);
@@ -897,9 +903,9 @@ namespace OpenSim.Framework
public class CompleteAgentData : AgentData
{
- public override OSDMap Pack()
+ public override OSDMap Pack(object parms = null)
{
- return base.Pack();
+ return base.Pack(parms);
}
public override void Unpack(OSDMap map, IScene scene)
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
index 95e9439019..a2a2eea2aa 100644
--- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
+++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
@@ -312,7 +312,7 @@ namespace OpenSim.Framework.Tests
Agent1Data.startpos = StartPos;
OSDMap map2;
- OSDMap map = Agent1Data.PackAgentCircuitData();
+ OSDMap map = Agent1Data.PackAgentCircuitData(-1);
try
{
string str = OSDParser.SerializeJsonString(map);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 51c59e92e3..e20ab5035d 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -12233,10 +12233,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cachedresp.WearableData =
new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length];
- int maxWearablesLoop = cachedtex.WearableData.Length;
- if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES)
- maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
-
int cacheHits = 0;
// We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid
@@ -12250,6 +12246,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cacheItems = p.Appearance.WearableCacheItems;
}
+ int maxWearablesLoop = cachedtex.WearableData.Length;
+ if (maxWearablesLoop > cacheItems.Length)
+ maxWearablesLoop = cacheItems.Length;
+
if (cacheItems != null)
{
for (int i = 0; i < maxWearablesLoop; i++)
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 0d3b39e7f2..cdcd6b9e7f 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -853,7 +853,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
if (invService.GetRootFolder(userID) != null)
{
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ for (int i = 0; i < appearance.Wearables.Length; i++)
{
for (int j = 0; j < appearance.Wearables[i].Count; j++)
{
@@ -1258,8 +1258,17 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
{
- if (wear.Type < AvatarWearable.MAX_WEARABLES)
- avatAppearance.Wearables[wear.Type].Add(wear.ItemID, UUID.Zero);
+ // If the wearable type is larger than the current array, expand it
+ if (avatAppearance.Wearables.Length <= wear.Type)
+ {
+ int currentLength = avatAppearance.Wearables.Length;
+ AvatarWearable[] wears = avatAppearance.Wearables;
+ Array.Resize(ref wears, wear.Type + 1);
+ for (int i = currentLength ; i <= wear.Type ; i++)
+ wears[i] = new AvatarWearable();
+ avatAppearance.Wearables = wears;
+ }
+ avatAppearance.Wearables[wear.Type].Add(wear.ItemID, UUID.Zero);
}
avatAppearance.GetAssetsFrom(sp.Appearance);
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 4d70c54bb9..ed93f05b4c 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -849,7 +849,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Let's create an agent there if one doesn't exist yet.
// NOTE: logout will always be false for a non-HG teleport.
bool logout = false;
- if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
+ if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout))
{
m_interRegionTeleportFailures.Value++;
@@ -948,7 +948,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// destination region but the viewer cannot establish the connection (e.g. due to network issues between
// the viewer and the destination). In this case, UpdateAgent timesout after 10 seconds, although then
// there's a further 10 second wait whilst we attempt to tell the destination to delete the agent in Fail().
- if (!UpdateAgent(reg, finalDestination, agent, sp))
+ if (!UpdateAgent(reg, finalDestination, agent, sp, ctx))
{
if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
{
@@ -1084,7 +1084,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Let's create an agent there if one doesn't exist yet.
// NOTE: logout will always be false for a non-HG teleport.
bool logout = false;
- if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
+ if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout))
{
m_interRegionTeleportFailures.Value++;
@@ -1158,7 +1158,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Send the Update. If this returns true, we know the client has contacted the destination
// via CompleteMovementIntoRegion, so we can let go.
// If it returns false, something went wrong, and we need to abort.
- if (!UpdateAgent(reg, finalDestination, agent, sp))
+ if (!UpdateAgent(reg, finalDestination, agent, sp, ctx))
{
if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
{
@@ -1280,13 +1280,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
sp.Scene.EventManager.TriggerTeleportFail(sp.ControllingClient, logout);
}
- protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
+ protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason, out bool logout)
{
GridRegion source = new GridRegion(Scene.RegionInfo);
source.RawServerURI = m_GatekeeperURI;
logout = false;
- bool success = Scene.SimulationService.CreateAgent(source, finalDestination, agentCircuit, teleportFlags, out reason);
+ bool success = Scene.SimulationService.CreateAgent(source, finalDestination, agentCircuit, teleportFlags, ctx, out reason);
if (success)
sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout);
@@ -1294,9 +1294,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return success;
}
- protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent, ScenePresence sp)
+ protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent, ScenePresence sp, EntityTransferContext ctx)
{
- return Scene.SimulationService.UpdateAgent(finalDestination, agent);
+ return Scene.SimulationService.UpdateAgent(finalDestination, agent, ctx);
}
protected virtual void SetCallbackURL(AgentData agent, RegionInfo region)
@@ -1679,7 +1679,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
}
- if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying))
+ if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying, ctx))
{
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: cross main failed. Resetting transfer state", LogHeader);
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
@@ -1695,7 +1695,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return agent;
}
- public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying)
+ public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx)
{
int ts = Util.EnvironmentTickCount();
try
@@ -1718,7 +1718,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Beyond this point, extra cleanup is needed beyond removing transit state
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.Transferring);
- if (!agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
+ if (!agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent, ctx))
{
// region doesn't take it
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp);
@@ -2360,7 +2360,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string reason = String.Empty;
- bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, out reason);
+ EntityTransferContext ctx = new EntityTransferContext();
+ bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, ctx, out reason);
if (regionAccepted)
{
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index dcc4746d67..1783e0a7c5 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -263,7 +263,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
}
}
- protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
+ protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason, out bool logout)
{
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: CreateAgent {0} {1}", reg.ServerURI, finalDestination.ServerURI);
reason = string.Empty;
@@ -308,7 +308,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
}
}
- return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout);
+ return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout);
}
public void TriggerTeleportHome(UUID id, IClientAPI client)
@@ -333,7 +333,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: RestrictAppearanceAbroad is ON. Checking generic appearance");
// Check wearables
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ for (int i = 0; i < sp.Appearance.Wearables.Length ; i++)
{
for (int j = 0; j < sp.Appearance.Wearables[i].Count; j++)
{
@@ -342,7 +342,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
bool found = false;
foreach (AvatarAppearance a in ExportedAppearance)
- if (a.Wearables[i] != null)
+ if (i < a.Wearables.Length && a.Wearables[i] != null)
{
found = true;
break;
@@ -356,7 +356,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
found = false;
foreach (AvatarAppearance a in ExportedAppearance)
- if (sp.Appearance.Wearables[i][j].AssetID == a.Wearables[i][j].AssetID)
+ if (i < a.Wearables.Length && sp.Appearance.Wearables[i][j].AssetID == a.Wearables[i][j].AssetID)
{
found = true;
break;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index 6cb15f60f4..3755650894 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -185,7 +185,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
* Agent-related communications
*/
- public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
+ public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason)
{
if (destination == null)
{
@@ -204,7 +204,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
return false;
}
- public bool UpdateAgent(GridRegion destination, AgentData cAgentData)
+ public bool UpdateAgent(GridRegion destination, AgentData cAgentData, EntityTransferContext ctx)
{
if (destination == null)
return false;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
index cf19eddf63..0ebdbce21c 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
@@ -160,7 +160,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
* Agent-related communications
*/
- public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
+ public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason)
{
if (destination == null)
{
@@ -170,27 +170,27 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
}
// Try local first
- if (m_localBackend.CreateAgent(source, destination, aCircuit, teleportFlags, out reason))
+ if (m_localBackend.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason))
return true;
// else do the remote thing
if (!m_localBackend.IsLocalRegion(destination.RegionID))
{
- return m_remoteConnector.CreateAgent(source, destination, aCircuit, teleportFlags, out reason);
+ return m_remoteConnector.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason);
}
return false;
}
- public bool UpdateAgent(GridRegion destination, AgentData cAgentData)
+ public bool UpdateAgent(GridRegion destination, AgentData cAgentData, EntityTransferContext ctx)
{
if (destination == null)
return false;
// Try local first
if (m_localBackend.IsLocalRegion(destination.RegionID))
- return m_localBackend.UpdateAgent(destination, cAgentData);
+ return m_localBackend.UpdateAgent(destination, cAgentData, ctx);
- return m_remoteConnector.UpdateAgent(destination, cAgentData);
+ return m_remoteConnector.UpdateAgent(destination, cAgentData, ctx);
}
public bool UpdateAgent(GridRegion destination, AgentPosition cAgentData)
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
index 96d112d9f1..568cd34205 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
@@ -44,6 +44,7 @@ using OpenSim.Region.CoreModules.World.Serialiser;
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
using OpenSim.Tests.Common;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
+using OpenSim.Services.Interfaces;
namespace OpenSim.Region.Framework.Scenes.Tests
{
@@ -226,7 +227,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// *** This is the first stage, when a neighbouring region is told that a viewer is about to try and
// establish a child scene presence. We pass in the circuit code that the client has to connect with ***
// XXX: ViaLogin may not be correct here.
- scene.SimulationService.CreateAgent(null, region, acd, (uint)TeleportFlags.ViaLogin, out reason);
+ EntityTransferContext ctx = new EntityTransferContext();
+ scene.SimulationService.CreateAgent(null, region, acd, (uint)TeleportFlags.ViaLogin, ctx, out reason);
Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(agentId), Is.Not.Null);
Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1));
@@ -287,4 +289,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
// Assert.That(childPresence.IsChildAgent, Is.True);
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index fae0bda75a..e945b3045d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -3114,7 +3114,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (appearanceModule != null)
{
appearanceModule.SaveBakedTextures(sp.UUID);
- OSDMap appearancePacked = sp.Appearance.Pack();
+ OSDMap appearancePacked = sp.Appearance.Pack(-1);
TaskInventoryItem item
= SaveNotecard(notecard, "Avatar Appearance", Util.GetFormattedXml(appearancePacked as OSD), true);
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
index 0e6710d3e3..f6a7e1996f 100644
--- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
@@ -461,6 +461,7 @@ namespace OpenSim.Server.Handlers.Simulation
// This is the meaning of POST agent
//m_regionClient.AdjustUserInformation(aCircuit);
//bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
+
bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, out reason);
resp["reason"] = OSD.FromString(reason);
@@ -539,12 +540,15 @@ namespace OpenSim.Server.Handlers.Simulation
AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason)
{
reason = String.Empty;
+ // The data and protocols are already defined so this is just a dummy to satisfy the interface
+ // TODO: make this end-to-end
+ EntityTransferContext ctx = new EntityTransferContext();
if ((teleportFlags & (uint)TeleportFlags.ViaLogin) == 0)
{
Util.FireAndForget(x =>
{
string r;
- m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out r);
+ m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out r);
m_log.DebugFormat("[AGENT HANDLER]: ASYNC CreateAgent {0}", r);
});
@@ -553,7 +557,7 @@ namespace OpenSim.Server.Handlers.Simulation
else
{
- bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out reason);
+ bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason);
m_log.DebugFormat("[AGENT HANDLER]: SYNC CreateAgent {0} {1}", ret.ToString(), reason);
return ret;
}
@@ -739,7 +743,10 @@ namespace OpenSim.Server.Handlers.Simulation
// subclasses can override this
protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
{
- return m_SimulationService.UpdateAgent(destination, agent);
+ // The data and protocols are already defined so this is just a dummy to satisfy the interface
+ // TODO: make this end-to-end
+ EntityTransferContext ctx = new EntityTransferContext();
+ return m_SimulationService.UpdateAgent(destination, agent, ctx);
}
}
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
index 8abd046780..1dcc82a07d 100644
--- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
@@ -138,7 +138,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
Console.WriteLine(" >>> LoginAgentToGrid <<< " + home.ServerURI);
uint flags = fromLogin ? (uint)TeleportFlags.ViaLogin : (uint)TeleportFlags.ViaHome;
- return CreateAgent(source, home, aCircuit, flags, out reason);
+ EntityTransferContext ctx = new EntityTransferContext();
+ return CreateAgent(source, home, aCircuit, flags, ctx, out reason);
}
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
index a3977407a4..d355eabcd0 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
@@ -152,7 +152,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
//
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
{
- OSDMap map = appearance.Pack();
+ OSDMap map = appearance.Pack(-1);
if (map == null)
{
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}",userID);
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
index 3bf03cfe9f..bb47e6b627 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
@@ -98,13 +98,13 @@ namespace OpenSim.Services.Connectors.Simulation
args["teleport_flags"] = OSD.FromString(flags.ToString());
}
- public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
+ public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason)
{
string tmp = String.Empty;
- return CreateAgent(source, destination, aCircuit, flags, out tmp, out reason);
+ return CreateAgent(source, destination, aCircuit, flags, ctx, out tmp, out reason);
}
- public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason)
+ public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string myipaddress, out string reason)
{
m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI);
reason = String.Empty;
@@ -121,7 +121,7 @@ namespace OpenSim.Services.Connectors.Simulation
try
{
- OSDMap args = aCircuit.PackAgentCircuitData();
+ OSDMap args = aCircuit.PackAgentCircuitData(-1);
PackData(args, source, aCircuit, destination, flags);
OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000);
@@ -172,9 +172,9 @@ namespace OpenSim.Services.Connectors.Simulation
///
/// Send complete data about an agent in this region to a neighbor
///
- public bool UpdateAgent(GridRegion destination, AgentData data)
+ public bool UpdateAgent(GridRegion destination, AgentData data, EntityTransferContext ctx)
{
- return UpdateAgent(destination, (IAgentData)data, 200000); // yes, 200 seconds
+ return UpdateAgent(destination, (IAgentData)data, ctx, 200000); // yes, 200 seconds
}
private ExpiringCache _failedSims = new ExpiringCache();
@@ -235,7 +235,8 @@ namespace OpenSim.Services.Connectors.Simulation
}
}
- success = UpdateAgent(destination, (IAgentData)pos, 10000);
+ EntityTransferContext ctx = new EntityTransferContext(); // Dummy, not needed for position
+ success = UpdateAgent(destination, (IAgentData)pos, ctx, 10000);
}
// we get here iff success == false
// blacklist sim for 2 minutes
@@ -250,7 +251,7 @@ namespace OpenSim.Services.Connectors.Simulation
///
/// This is the worker function to send AgentData to a neighbor region
///
- private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, int timeout)
+ private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, EntityTransferContext ctx, int timeout)
{
// m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: UpdateAgent in {0}", destination.ServerURI);
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 8e10125465..9643a8bd72 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -459,7 +459,7 @@ namespace OpenSim.Services.HypergridService
true, aCircuit.startpos, new List(), ctx, out reason))
return false;
- return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason);
+ return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, ctx, out reason);
}
protected bool Authenticate(AgentCircuitData aCircuit)
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index c65122a4fb..317d0066b3 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -281,7 +281,9 @@ namespace OpenSim.Services.HypergridService
}
else
{
- success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason);
+ //TODO: Should there not be a call to QueryAccess here?
+ EntityTransferContext ctx = new EntityTransferContext();
+ success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, ctx, out myExternalIP, out reason);
}
if (!success)
diff --git a/OpenSim/Services/Interfaces/IAvatarService.cs b/OpenSim/Services/Interfaces/IAvatarService.cs
index bd66dad2a8..99b71b9109 100644
--- a/OpenSim/Services/Interfaces/IAvatarService.cs
+++ b/OpenSim/Services/Interfaces/IAvatarService.cs
@@ -150,7 +150,8 @@ namespace OpenSim.Services.Interfaces
// Wearables
Data["AvatarHeight"] = appearance.AvatarHeight.ToString();
- for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++)
+ // TODO: With COF, is this even needed?
+ for (int i = 0 ; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES ; i++)
{
for (int j = 0 ; j < appearance.Wearables[i].Count ; j++)
{
diff --git a/OpenSim/Services/Interfaces/ISimulationService.cs b/OpenSim/Services/Interfaces/ISimulationService.cs
index 3f6b009e59..4496a9f26a 100644
--- a/OpenSim/Services/Interfaces/ISimulationService.cs
+++ b/OpenSim/Services/Interfaces/ISimulationService.cs
@@ -74,7 +74,7 @@ namespace OpenSim.Services.Interfaces
///
///
/// Reason message in the event of a failure.
- bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason);
+ bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason);
///
/// Full child agent update.
@@ -82,7 +82,7 @@ namespace OpenSim.Services.Interfaces
///
///
///
- bool UpdateAgent(GridRegion destination, AgentData data);
+ bool UpdateAgent(GridRegion destination, AgentData data, EntityTransferContext ctx);
///
/// Short child agent update, mostly for position.
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 619a5273ec..6681f1a902 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -999,7 +999,7 @@ namespace OpenSim.Services.LLLoginService
region, aCircuit.AgentID, null, true, aCircuit.startpos, new List(), ctx, out reason))
return false;
- return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason);
+ return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, ctx, out reason);
}
private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason)