From 20b989e048fff3215b90af6a34954b7ceb5e9868 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 24 Jul 2013 17:10:26 -0700
Subject: Increased the wait time to 15 secs. In a 0.7.5 standalone where the
effect was always present, this seems to have fixed it.
---
.../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 70fbfc3..ea2d9b5 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -922,7 +922,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// BEFORE THEY SETTLE IN THE NEW REGION.
// DECREASING THE WAIT TIME HERE WILL EITHER RESULT IN A VIEWER CRASH OR
// IN THE AVIE BEING PLACED IN INFINITY FOR A COUPLE OF SECONDS.
- Thread.Sleep(5000);
+ Thread.Sleep(15000);
sp.Scene.IncomingCloseAgent(sp.UUID, false);
}
@@ -1053,7 +1053,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// BEFORE THEY SETTLE IN THE NEW REGION.
// DECREASING THE WAIT TIME HERE WILL EITHER RESULT IN A VIEWER CRASH OR
// IN THE AVIE BEING PLACED IN INFINITY FOR A COUPLE OF SECONDS.
- Thread.Sleep(5000);
+ Thread.Sleep(15000);
sp.Scene.IncomingCloseAgent(sp.UUID, false);
}
else
--
cgit v1.1
From 1fabdcc43cc2d62ff03888166582b25884056e94 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 01:04:16 +0100
Subject: If a returning teleport starts to reuse a downgraded child connection
that was a previous root agent, do not close that child agent at the end of
the 15 sec teleport timer.
This prevents an issue if the user teleports back to the neighbour simulator of a source before 15 seconds have elapsed.
This more closely emulates observed linden behaviour, though the timeout there is 50 secs and applies to all the pre-teleport agents.
Currently sticks a DoNotClose flag on ScenePresence though this may be temporary as possibly it could be incorporated into the ETM state machine
---
.../EntityTransfer/EntityTransferModule.cs | 10 +++++++-
OpenSim/Region/Framework/Scenes/Scene.cs | 29 ++++++++++++++--------
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 7 ++++++
3 files changed, 34 insertions(+), 12 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index ea2d9b5..31db778 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1054,7 +1054,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// DECREASING THE WAIT TIME HERE WILL EITHER RESULT IN A VIEWER CRASH OR
// IN THE AVIE BEING PLACED IN INFINITY FOR A COUPLE OF SECONDS.
Thread.Sleep(15000);
- sp.Scene.IncomingCloseAgent(sp.UUID, false);
+
+ if (!sp.DoNotClose)
+ {
+ sp.Scene.IncomingCloseAgent(sp.UUID, false);
+ }
+ else
+ {
+ sp.DoNotClose = false;
+ }
}
else
// now we have a child agent in this region.
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 84fdef0..f4622b6 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3682,19 +3682,26 @@ namespace OpenSim.Region.Framework.Scenes
{
ScenePresence sp = GetScenePresence(agent.AgentID);
- if (sp != null && !sp.IsChildAgent)
+ if (sp != null)
{
- // 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);
+ 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);
- sp = null;
+ sp = null;
+ }
+ else
+ {
+ sp.DoNotClose = true;
+ }
}
// Optimistic: add or update the circuit data with the new agent circuit data and teleport flags.
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index f9190d9..d3e1946 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -717,6 +717,13 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ ///
+ /// Used by the entity transfer module to signal when the presence should not be closed because a subsequent
+ /// teleport is reusing the connection.
+ ///
+ /// May be refactored or move somewhere else soon.
+ public bool DoNotClose { get; set; }
+
private float m_speedModifier = 1.0f;
public float SpeedModifier
--
cgit v1.1
From 72ed49af5f864e50fa4453849a94dd9d46533cba Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 01:38:04 +0100
Subject: Reset DoNotClose scene presence teleport flag before pausing. Rename
DoNotClose to DoNotCloseAfterTeleport
---
.../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 6 ++++--
OpenSim/Region/Framework/Scenes/Scene.cs | 2 +-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 2 +-
3 files changed, 6 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 31db778..8ce6bb4 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1047,6 +1047,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
{
+ sp.DoNotCloseAfterTeleport = false;
+
// RED ALERT!!!!
// PLEASE DO NOT DECREASE THIS WAIT TIME UNDER ANY CIRCUMSTANCES.
// THE VIEWERS SEEM TO NEED SOME TIME AFTER RECEIVING MoveAgentIntoRegion
@@ -1055,13 +1057,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// IN THE AVIE BEING PLACED IN INFINITY FOR A COUPLE OF SECONDS.
Thread.Sleep(15000);
- if (!sp.DoNotClose)
+ if (!sp.DoNotCloseAfterTeleport)
{
sp.Scene.IncomingCloseAgent(sp.UUID, false);
}
else
{
- sp.DoNotClose = false;
+ sp.DoNotCloseAfterTeleport = false;
}
}
else
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index f4622b6..705660d 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3700,7 +3700,7 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
- sp.DoNotClose = true;
+ sp.DoNotCloseAfterTeleport = true;
}
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index d3e1946..4044f0c 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -722,7 +722,7 @@ namespace OpenSim.Region.Framework.Scenes
/// teleport is reusing the connection.
///
/// May be refactored or move somewhere else soon.
- public bool DoNotClose { get; set; }
+ public bool DoNotCloseAfterTeleport { get; set; }
private float m_speedModifier = 1.0f;
--
cgit v1.1
From 4cd03d8c314864eeeb9f11b34fc7e687ac96b858 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 01:40:56 +0100
Subject: Return Simulator/0.1 (V1) entity transfer behaviour to waiting only 2
seconds before closing root agent after 15.
This is because a returning viewer by teleport before 15 seconds are up will be disrupted by the close.
The 2 second delay is within the scope where a normal viewer would not allow a teleport back anyway.
Simulator/0.2 (V2) protocol will continue with the longer delay since this is actually the behaviour viewers get from the ll grid
and an early close causes other issues (avatar being sent to infinite locations temporarily, etc.)
---
.../Framework/EntityTransfer/EntityTransferModule.cs | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 8ce6bb4..3f1686c 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -916,13 +916,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
{
- // RED ALERT!!!!
- // PLEASE DO NOT DECREASE THIS WAIT TIME UNDER ANY CIRCUMSTANCES.
- // THE VIEWERS SEEM TO NEED SOME TIME AFTER RECEIVING MoveAgentIntoRegion
- // BEFORE THEY SETTLE IN THE NEW REGION.
- // DECREASING THE WAIT TIME HERE WILL EITHER RESULT IN A VIEWER CRASH OR
- // IN THE AVIE BEING PLACED IN INFINITY FOR A COUPLE OF SECONDS.
- Thread.Sleep(15000);
+ // We need to delay here because Imprudence viewers, unlike v1 or v3, have a short (<200ms, <500ms) delay before
+ // they regard the new region as the current region after receiving the AgentMovementComplete
+ // response. If close is sent before then, it will cause the viewer to quit instead.
+ //
+ // This sleep can be increased if necessary. However, whilst it's active,
+ // an agent cannot teleport back to this region if it has teleported away.
+ Thread.Sleep(2000);
sp.Scene.IncomingCloseAgent(sp.UUID, false);
}
--
cgit v1.1
From 878ce1e6b2b96043052015732286141f5b71310b Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 25 Jul 2013 23:44:58 -0700
Subject: This should fix all issues with teleports. One should be able to TP
as fast as needed. (Although sometimes Justin's state machine kicks in and
doesn't let you) The EventQueues are a hairy mess, and it's very easy to mess
things up. But it looks like this commit makes them work right. Here's what's
going on: - Child and root agents are only closed after 15 sec, maybe - If
the user comes back, they aren't closed, and everything is reused - On the
receiving side, clients and scene presences are reused if they already exist
- Caps are always recreated (this is where I spent most of my time!). It
turns out that, because the agents carry the seeds around, the seed gets the
same URL, except for the root agent coming back to a far away region, which
gets a new seed (because we don't know what was its seed in the departing
region, and we can't send it back to the client when the agent returns
there).
---
.../Linden/Caps/EventQueue/EventQueueGetModule.cs | 58 +++++---------------
.../Framework/Caps/CapabilitiesModule.cs | 11 ++--
.../EntityTransfer/EntityTransferModule.cs | 11 ++--
OpenSim/Region/Framework/Scenes/Scene.cs | 61 ++++++++++------------
4 files changed, 54 insertions(+), 87 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index c5e28ad..d02496f 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -91,7 +91,6 @@ namespace OpenSim.Region.ClientStack.Linden
scene.RegisterModuleInterface(this);
scene.EventManager.OnClientClosed += ClientClosed;
- scene.EventManager.OnMakeChildAgent += MakeChildAgent;
scene.EventManager.OnRegisterCaps += OnRegisterCaps;
MainConsole.Instance.Commands.AddCommand(
@@ -120,7 +119,6 @@ namespace OpenSim.Region.ClientStack.Linden
return;
scene.EventManager.OnClientClosed -= ClientClosed;
- scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
scene.UnregisterModuleInterface(this);
@@ -189,14 +187,12 @@ namespace OpenSim.Region.ClientStack.Linden
{
if (!queues.ContainsKey(agentId))
{
- /*
m_log.DebugFormat(
"[EVENTQUEUE]: Adding new queue for agent {0} in region {1}",
agentId, m_scene.RegionInfo.RegionName);
- */
queues[agentId] = new Queue();
}
-
+
return queues[agentId];
}
}
@@ -228,8 +224,12 @@ namespace OpenSim.Region.ClientStack.Linden
{
Queue queue = GetQueue(avatarID);
if (queue != null)
+ {
lock (queue)
queue.Enqueue(ev);
+ }
+ else
+ m_log.WarnFormat("[EVENTQUEUE]: (Enqueue) No queue found for agent {0} in region {1}", avatarID, m_scene.RegionInfo.RegionName);
}
catch (NullReferenceException e)
{
@@ -244,7 +244,7 @@ namespace OpenSim.Region.ClientStack.Linden
private void ClientClosed(UUID agentID, Scene scene)
{
-// m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
+ //m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
int count = 0;
while (queues.ContainsKey(agentID) && queues[agentID].Count > 0 && count++ < 5)
@@ -261,31 +261,6 @@ namespace OpenSim.Region.ClientStack.Linden
lock (m_AvatarQueueUUIDMapping)
m_AvatarQueueUUIDMapping.Remove(agentID);
-// lock (m_AvatarQueueUUIDMapping)
-// {
-// foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys)
-// {
-//// m_log.DebugFormat("[EVENTQUEUE]: Found key {0} in m_AvatarQueueUUIDMapping while looking for {1}", ky, AgentID);
-// if (ky == agentID)
-// {
-// removeitems.Add(ky);
-// }
-// }
-//
-// foreach (UUID ky in removeitems)
-// {
-// UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky];
-// m_AvatarQueueUUIDMapping.Remove(ky);
-//
-// string eqgPath = GenerateEqgCapPath(eventQueueGetUuid);
-// MainServer.Instance.RemovePollServiceHTTPHandler("", eqgPath);
-//
-//// m_log.DebugFormat(
-//// "[EVENT QUEUE GET MODULE]: Removed EQG handler {0} for {1} in {2}",
-//// eqgPath, agentID, m_scene.RegionInfo.RegionName);
-// }
-// }
-
UUID searchval = UUID.Zero;
removeitems.Clear();
@@ -305,19 +280,9 @@ namespace OpenSim.Region.ClientStack.Linden
foreach (UUID ky in removeitems)
m_QueueUUIDAvatarMapping.Remove(ky);
}
- }
- private void MakeChildAgent(ScenePresence avatar)
- {
- //m_log.DebugFormat("[EVENTQUEUE]: Make Child agent {0} in region {1}.", avatar.UUID, m_scene.RegionInfo.RegionName);
- //lock (m_ids)
- // {
- //if (m_ids.ContainsKey(avatar.UUID))
- //{
- // close the event queue.
- //m_ids[avatar.UUID] = -1;
- //}
- //}
+ // m_log.DebugFormat("[EVENTQUEUE]: Deleted queues for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
+
}
///
@@ -417,7 +382,12 @@ namespace OpenSim.Region.ClientStack.Linden
if (DebugLevel >= 2)
m_log.WarnFormat("POLLED FOR EQ MESSAGES BY {0} in {1}", pAgentId, m_scene.RegionInfo.RegionName);
- Queue queue = TryGetQueue(pAgentId);
+ Queue queue = GetQueue(pAgentId);
+ if (queue == null)
+ {
+ return NoEvents(requestID, pAgentId);
+ }
+
OSD element;
lock (queue)
{
diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
index ad1c4ce..6545a99 100644
--- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
@@ -132,13 +132,9 @@ namespace OpenSim.Region.CoreModules.Framework
{
Caps oldCaps = m_capsObjects[agentId];
- m_log.DebugFormat(
- "[CAPS]: Recreating caps for agent {0}. Old caps path {1}, new caps path {2}. ",
- agentId, oldCaps.CapsObjectPath, capsObjectPath);
- // This should not happen. The caller code is confused. We need to fix that.
- // CAPs can never be reregistered, or the client will be confused.
- // Hence this return here.
- //return;
+ //m_log.WarnFormat(
+ // "[CAPS]: Recreating caps for agent {0} in region {1}. Old caps path {2}, new caps path {3}. ",
+ // agentId, m_scene.RegionInfo.RegionName, oldCaps.CapsObjectPath, capsObjectPath);
}
caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName,
@@ -153,6 +149,7 @@ namespace OpenSim.Region.CoreModules.Framework
public void RemoveCaps(UUID agentId)
{
+ m_log.DebugFormat("[CAPS]: Remove caps for agent {0} in region {1}", agentId, m_scene.RegionInfo.RegionName);
lock (m_childrenSeeds)
{
if (m_childrenSeeds.ContainsKey(agentId))
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 3f1686c..96cd6b9 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -316,7 +316,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Ignoring teleport request of {0} {1} to {2}@{3} - agent is already in transit.",
sp.Name, sp.UUID, position, regionHandle);
-
+
+ sp.ControllingClient.SendTeleportFailed("Slow down!");
return;
}
@@ -1040,9 +1041,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Now let's make it officially a child agent
sp.MakeChildAgent();
- // OK, it got this agent. Let's close some child agents
- sp.CloseChildAgents(newRegionX, newRegionY);
-
// 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))
@@ -1059,10 +1057,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (!sp.DoNotCloseAfterTeleport)
{
+ // OK, it got this agent. Let's close everything
+ m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Closing in agent {0} in region {1}", sp.Name, Scene.RegionInfo.RegionName);
+ sp.CloseChildAgents(newRegionX, newRegionY);
sp.Scene.IncomingCloseAgent(sp.UUID, false);
+
}
else
{
+ m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Not closing agent {0}, user is back in {0}", sp.Name, Scene.RegionInfo.RegionName);
sp.DoNotCloseAfterTeleport = false;
}
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 705660d..6d0b13f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2805,6 +2805,7 @@ namespace OpenSim.Region.Framework.Scenes
{
ScenePresence sp;
bool vialogin;
+ bool reallyNew = true;
// Validation occurs in LLUDPServer
//
@@ -2856,6 +2857,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
@@ -2867,7 +2869,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);
}
@@ -3426,15 +3430,8 @@ namespace OpenSim.Region.Framework.Scenes
if (closeChildAgents && isChildAgent)
{
// Tell a single agent to disconnect from the region.
- IEventQueue eq = RequestModuleInterface();
- 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.
@@ -3686,21 +3683,29 @@ namespace OpenSim.Region.Framework.Scenes
{
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);
+ // 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);
- sp = null;
+ 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);
}
}
@@ -3785,9 +3790,12 @@ namespace OpenSim.Region.Framework.Scenes
agent.AgentID, RegionInfo.RegionName);
sp.AdjustKnownSeeds();
-
+
if (CapsModule != null)
+ {
CapsModule.SetAgentCapsSeeds(agent);
+ CapsModule.CreateCaps(agent.AgentID);
+ }
}
}
@@ -5545,17 +5553,6 @@ namespace OpenSim.Region.Framework.Scenes
{
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;
--
cgit v1.1
From d5367a219daa0b946b3394e342734945d5ef7f1b Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Fri, 26 Jul 2013 07:39:57 -0700
Subject: Slight improvement: no need to delay the removal of the queues in EQ,
because DisableSimulator is now being sent via UDP
---
.../ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | 8 --------
1 file changed, 8 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index d02496f..c69f758 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -246,16 +246,8 @@ namespace OpenSim.Region.ClientStack.Linden
{
//m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
- int count = 0;
- while (queues.ContainsKey(agentID) && queues[agentID].Count > 0 && count++ < 5)
- {
- Thread.Sleep(1000);
- }
-
lock (queues)
- {
queues.Remove(agentID);
- }
List removeitems = new List();
lock (m_AvatarQueueUUIDMapping)
--
cgit v1.1
From dd2c211e62b25f19386c1f4b5bc7ace40efa429a Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Fri, 26 Jul 2013 07:40:55 -0700
Subject: Comment debug message
---
OpenSim/Region/Framework/Scenes/Scene.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6d0b13f..dec493b 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3698,8 +3698,8 @@ namespace OpenSim.Region.Framework.Scenes
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
+ // 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
{
--
cgit v1.1
From a08f01fa8323e18a63e920158c7f51ae78ac0e93 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 18:43:15 +0100
Subject: Fix NPC regression test failures.
These were genuine failures caused by ScenePresence.CompleteMovement() waiting for an UpdateAgent from NPC introduction that would never come.
Instead, we do not wait if the agent is an NPC.
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 4 +++-
OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | 2 +-
OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs | 1 +
3 files changed, 5 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4044f0c..17da0d9 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1357,11 +1357,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;
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
index bf23040..f841d5c 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
@@ -155,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
public void TestCreateWithAttachments()
{
TestHelpers.InMethod();
-// log4net.Config.XmlConfigurator.Configure();
+// TestHelpers.EnableLogging();
UUID userId = TestHelpers.ParseTail(0x1);
UserAccountHelpers.CreateUserWithInventory(m_scene, userId);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
index 74f010e..495e684 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiNpcTests.cs
@@ -180,6 +180,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
public void TestOsNpcLoadAppearance()
{
TestHelpers.InMethod();
+ //TestHelpers.EnableLogging();
// Store an avatar with a different height from default in a notecard.
UUID userId = TestHelpers.ParseTail(0x1);
--
cgit v1.1
From 056a6ee7653b17d8c1d92519f34f029bcd602143 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 19:22:30 +0100
Subject: Fix regression tests relating to agent transfer by making simulator
use last week's SIMULATOR/0.1 protocol for now.
---
.../Avatar/Attachments/Tests/AttachmentsModuleTests.cs | 9 +++++++++
.../Simulation/LocalSimulationConnector.cs | 13 +++++++++----
.../Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | 6 ++++++
3 files changed, 24 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
index 508743c..4ecae73 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
@@ -38,6 +38,8 @@ using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
+using OpenSim.Framework.Servers;
+using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Region.CoreModules.Avatar.Attachments;
using OpenSim.Region.CoreModules.Framework;
using OpenSim.Region.CoreModules.Framework.EntityTransfer;
@@ -802,6 +804,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
TestHelpers.InMethod();
// TestHelpers.EnableLogging();
+ BaseHttpServer httpServer = new BaseHttpServer(99999);
+ MainServer.AddHttpServer(httpServer);
+ MainServer.Instance = httpServer;
+
AttachmentsModule attModA = new AttachmentsModule();
AttachmentsModule attModB = new AttachmentsModule();
EntityTransferModule etmA = new EntityTransferModule();
@@ -830,6 +836,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
SceneHelpers.SetupSceneModules(
sceneB, config, new CapabilitiesModule(), etmB, attModB, new BasicInventoryAccessModule());
+ // FIXME: Hack - this is here temporarily to revert back to older entity transfer behaviour
+ lscm.ServiceVersion = "SIMULATION/0.1";
+
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1);
AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID);
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index 7dd10f7..bee602e 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -46,9 +46,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
- /// Version of this service
+ /// Version of this service.
///
- private const string m_Version = "SIMULATION/0.2";
+ ///
+ /// Currently valid versions are "SIMULATION/0.1" and "SIMULATION/0.2"
+ ///
+ public string ServiceVersion { get; set; }
///
/// Map region ID to scene.
@@ -64,6 +67,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
public void Initialise(IConfigSource config)
{
+ ServiceVersion = "SIMULATION/0.2";
+
IConfig moduleConfig = config.Configs["Modules"];
if (moduleConfig != null)
{
@@ -253,7 +258,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
public bool QueryAccess(GridRegion destination, UUID id, Vector3 position, out string version, out string reason)
{
reason = "Communications failure";
- version = m_Version;
+ version = ServiceVersion;
if (destination == null)
return false;
@@ -359,4 +364,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
#endregion
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
index 297c66b..afd2779 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
@@ -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);
--
cgit v1.1
From 840be97e40179c17d57e1943555643b57f47ae5a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 20:52:30 +0100
Subject: Fix failure in TestCreateDuplicateRootScenePresence().
This is a test setup failure since code paths when adding a duplicate root scene presence now require the EntityTransferModule to be present.
Test fixed by adding this module to test setup
---
.../Framework/Scenes/Tests/ScenePresenceAgentTests.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
index bbfbbfc..bbe34d2 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
@@ -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);
--
cgit v1.1
From ba9daf849e7c8db48e7c03e7cdedb77776b2052f Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 26 Jul 2013 22:52:08 +0100
Subject: Fix regression from 056a6ee7 because the RemoteSimulationConnector
uses a copy of the LocalSimulationConnector but never initializes it (hence
ServiceVersion was never set)
---
.../ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index bee602e..697ce68 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -63,12 +63,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
///
private bool m_ModuleEnabled = false;
+ public LocalSimulationConnectorModule()
+ {
+ ServiceVersion = "SIMULATION/0.2";
+ }
+
#region Region Module interface
public void Initialise(IConfigSource config)
{
- ServiceVersion = "SIMULATION/0.2";
-
IConfig moduleConfig = config.Configs["Modules"];
if (moduleConfig != null)
{
--
cgit v1.1
From 428916a64d27e5f00e74d34fd4b0453f32c3d2de Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Fri, 26 Jul 2013 21:14:21 -0700
Subject: Commented out ChatSessionRequest capability in Vivox and Freeswitch.
We aren't processing it in any meaningful way, and it seems to get invoked
everytime someone types a message in group chat.
---
.../Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 18 +++++++++---------
.../Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | 18 +++++++++---------
2 files changed, 18 insertions(+), 18 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index ef1b92e..5a5a70c 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -326,15 +326,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
"ParcelVoiceInfoRequest",
agentID.ToString()));
- caps.RegisterHandler(
- "ChatSessionRequest",
- new RestStreamHandler(
- "POST",
- capsBase + m_chatSessionRequestPath,
- (request, path, param, httpRequest, httpResponse)
- => ChatSessionRequest(scene, request, path, param, agentID, caps),
- "ChatSessionRequest",
- agentID.ToString()));
+ //caps.RegisterHandler(
+ // "ChatSessionRequest",
+ // new RestStreamHandler(
+ // "POST",
+ // capsBase + m_chatSessionRequestPath,
+ // (request, path, param, httpRequest, httpResponse)
+ // => ChatSessionRequest(scene, request, path, param, agentID, caps),
+ // "ChatSessionRequest",
+ // agentID.ToString()));
}
///
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
index 2d65530..cdab116 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs
@@ -433,15 +433,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice
"ParcelVoiceInfoRequest",
agentID.ToString()));
- caps.RegisterHandler(
- "ChatSessionRequest",
- new RestStreamHandler(
- "POST",
- capsBase + m_chatSessionRequestPath,
- (request, path, param, httpRequest, httpResponse)
- => ChatSessionRequest(scene, request, path, param, agentID, caps),
- "ChatSessionRequest",
- agentID.ToString()));
+ //caps.RegisterHandler(
+ // "ChatSessionRequest",
+ // new RestStreamHandler(
+ // "POST",
+ // capsBase + m_chatSessionRequestPath,
+ // (request, path, param, httpRequest, httpResponse)
+ // => ChatSessionRequest(scene, request, path, param, agentID, caps),
+ // "ChatSessionRequest",
+ // agentID.ToString()));
}
///
--
cgit v1.1
From 69975763d2a735eb2696d2e27e5796a472a208ea Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sat, 27 Jul 2013 15:38:56 -0700
Subject: Several major improvements to group (V2) chat. Specifically: handle
join/drop appropriately, invitechatboxes. The major departure from flotsam is
to send only one message per destination region, as opposed to one message
per group member. This reduces messaging considerably in large groups that
have clusters of members in certain regions.
---
.../Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | 4 ++--
.../Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | 4 ++--
OpenSim/Region/Framework/Interfaces/IEventQueue.cs | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index c69f758..d7afe1a 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -750,12 +750,12 @@ namespace OpenSim.Region.ClientStack.Linden
}
- public void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat,
+ public void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat,
bool isModerator, bool textMute)
{
OSD item = EventQueueHelper.ChatterBoxSessionAgentListUpdates(sessionID, fromAgent, canVoiceChat,
isModerator, textMute);
- Enqueue(item, toAgent);
+ Enqueue(item, fromAgent);
//m_log.InfoFormat("########### eq ChatterBoxSessionAgentListUpdates #############\n{0}", item);
}
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index fa935cd..40a400f 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -372,7 +372,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
gim.fromAgentName = fromAgentName;
gim.fromGroup = fromGroup;
gim.imSessionID = imSessionID.Guid;
- gim.RegionID = UUID.Zero.Guid; // RegionID.Guid;
+ gim.RegionID = RegionID.Guid;
gim.timestamp = timestamp;
gim.toAgentID = toAgentID.Guid;
gim.message = message;
@@ -672,7 +672,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
gim["position_x"] = msg.Position.X.ToString();
gim["position_y"] = msg.Position.Y.ToString();
gim["position_z"] = msg.Position.Z.ToString();
- gim["region_id"] = msg.RegionID.ToString();
+ gim["region_id"] = new UUID(msg.RegionID).ToString();
gim["binary_bucket"] = Convert.ToBase64String(msg.binaryBucket,Base64FormattingOptions.None);
return gim;
}
diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
index 5512642..3780ece 100644
--- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Region.Framework.Interfaces
UUID fromAgent, string message, UUID toAgent, string fromName, byte dialog,
uint timeStamp, bool offline, int parentEstateID, Vector3 position,
uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket);
- void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat,
+ void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat,
bool isModerator, bool textMute);
void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID);
void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID);
--
cgit v1.1
From 6be614ba844ee988859fe7f63db76ef13b9f4962 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 28 Jul 2013 09:54:34 -0700
Subject: This makes people search work.
---
.../UserManagement/UserManagementModule.cs | 41 ++++++++++++++++++++++
1 file changed, 41 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 53bd2e2..295ad64 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -46,6 +46,8 @@ using log4net;
using Nini.Config;
using Mono.Addins;
+using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags;
+
namespace OpenSim.Region.CoreModules.Framework.UserManagement
{
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UserManagementModule")]
@@ -98,6 +100,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
scene.RegisterModuleInterface(this);
scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded);
+ scene.EventManager.OnMakeRootAgent += new Action(EventManager_OnMakeRootAgent);
+ scene.EventManager.OnMakeChildAgent += new EventManager.OnMakeChildAgentDelegate(EventManager_OnMakeChildAgent);
}
}
@@ -153,6 +157,43 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
client.OnAvatarPickerRequest -= new AvatarPickerRequest(HandleAvatarPickerRequest);
}
+ void EventManager_OnMakeRootAgent(ScenePresence sp)
+ {
+ sp.ControllingClient.OnDirFindQuery += OnDirFindQuery;
+ }
+
+ void EventManager_OnMakeChildAgent(ScenePresence sp)
+ {
+ sp.ControllingClient.OnDirFindQuery -= OnDirFindQuery;
+ }
+
+ void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart)
+ {
+ if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People)
+ {
+ if (string.IsNullOrEmpty(queryText))
+ remoteClient.SendDirPeopleReply(queryID, new DirPeopleReplyData[0]);
+
+ List accounts = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, queryText);
+ DirPeopleReplyData[] hits = new DirPeopleReplyData[accounts.Count];
+ int i = 0;
+ foreach (UserAccount acc in accounts)
+ {
+ DirPeopleReplyData d = new DirPeopleReplyData();
+ d.agentID = acc.PrincipalID;
+ d.firstName = acc.FirstName;
+ d.lastName = acc.LastName;
+ d.online = false;
+
+ hits[i++] = d;
+ }
+
+ // TODO: This currently ignores pretty much all the query flags including Mature and sort order
+ remoteClient.SendDirPeopleReply(queryID, hits);
+ }
+
+ }
+
void HandleUUIDNameRequest(UUID uuid, IClientAPI client)
{
// m_log.DebugFormat(
--
cgit v1.1
From 7b0b5c9d97dea840e1ede6e2318b3c049c804983 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 28 Jul 2013 13:49:58 -0700
Subject: Added BasicSearchModule.cs which handles OnDirFindQuery events.
Removed that handler from both Groups modules in core, and replaced them with
an operation on IGroupsModule.
---
.../Framework/Search/BasicSearchModule.cs | 198 +++++++++++++++++++++
.../UserManagement/UserManagementModule.cs | 39 ----
.../Region/Framework/Interfaces/IGroupsModule.cs | 2 +
.../Avatar/XmlRpcGroups/GroupsModule.cs | 22 +--
4 files changed, 206 insertions(+), 55 deletions(-)
create mode 100644 OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
new file mode 100644
index 0000000..a089447
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Threading;
+
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Monitoring;
+using OpenSim.Region.ClientStack.LindenUDP;
+using OpenSim.Region.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+using OpenSim.Services.Connectors.Hypergrid;
+
+using OpenMetaverse;
+using OpenMetaverse.Packets;
+using log4net;
+using Nini.Config;
+using Mono.Addins;
+
+using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags;
+
+namespace OpenSim.Region.CoreModules.Framework.Search
+{
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BasicSearchModule")]
+ public class BasicSearchModule : ISharedRegionModule
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ protected bool m_Enabled;
+ protected List m_Scenes = new List();
+
+ private IGroupsModule m_GroupsService = null;
+
+ #region ISharedRegionModule
+
+ public void Initialise(IConfigSource config)
+ {
+ string umanmod = config.Configs["Modules"].GetString("SearchModule", Name);
+ if (umanmod == Name)
+ {
+ m_Enabled = true;
+ m_log.DebugFormat("[BASIC SEARCH MODULE]: {0} is enabled", Name);
+ }
+ }
+
+ public bool IsSharedModule
+ {
+ get { return true; }
+ }
+
+ public virtual string Name
+ {
+ get { return "BasicSearchModule"; }
+ }
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (m_Enabled)
+ {
+ m_Scenes.Add(scene);
+
+ scene.EventManager.OnMakeRootAgent += new Action(EventManager_OnMakeRootAgent);
+ scene.EventManager.OnMakeChildAgent += new EventManager.OnMakeChildAgentDelegate(EventManager_OnMakeChildAgent);
+ }
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (m_Enabled)
+ {
+ m_Scenes.Remove(scene);
+
+ scene.EventManager.OnMakeRootAgent -= new Action(EventManager_OnMakeRootAgent);
+ scene.EventManager.OnMakeChildAgent -= new EventManager.OnMakeChildAgentDelegate(EventManager_OnMakeChildAgent);
+ }
+ }
+
+ public void RegionLoaded(Scene s)
+ {
+ if (!m_Enabled)
+ return;
+
+ if (m_GroupsService == null)
+ {
+ m_GroupsService = s.RequestModuleInterface();
+
+ // No Groups Service Connector, then group search won't work...
+ if (m_GroupsService == null)
+ m_log.Warn("[BASIC SEARCH MODULE]: Could not get IGroupsModule");
+ }
+ }
+
+ public void PostInitialise()
+ {
+ }
+
+ public void Close()
+ {
+ m_Scenes.Clear();
+ }
+
+ #endregion ISharedRegionModule
+
+
+ #region Event Handlers
+
+ void EventManager_OnMakeRootAgent(ScenePresence sp)
+ {
+ sp.ControllingClient.OnDirFindQuery += OnDirFindQuery;
+ }
+
+ void EventManager_OnMakeChildAgent(ScenePresence sp)
+ {
+ sp.ControllingClient.OnDirFindQuery -= OnDirFindQuery;
+ }
+
+ void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart)
+ {
+ m_log.Debug("[ZZZ]: Got here");
+ if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People)
+ {
+ if (string.IsNullOrEmpty(queryText))
+ remoteClient.SendDirPeopleReply(queryID, new DirPeopleReplyData[0]);
+
+ List accounts = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, queryText);
+ DirPeopleReplyData[] hits = new DirPeopleReplyData[accounts.Count];
+ int i = 0;
+ foreach (UserAccount acc in accounts)
+ {
+ DirPeopleReplyData d = new DirPeopleReplyData();
+ d.agentID = acc.PrincipalID;
+ d.firstName = acc.FirstName;
+ d.lastName = acc.LastName;
+ d.online = false;
+
+ hits[i++] = d;
+ }
+
+ // TODO: This currently ignores pretty much all the query flags including Mature and sort order
+ remoteClient.SendDirPeopleReply(queryID, hits);
+ }
+ else if (((DirFindFlags)queryFlags & DirFindFlags.Groups) == DirFindFlags.Groups)
+ {
+ if (m_GroupsService == null)
+ {
+ m_log.Warn("[BASIC SEARCH MODULE]: Groups service is not available. Unable to search groups.");
+ remoteClient.SendAlertMessage("Groups search is not enabled");
+ return;
+ }
+
+ if (string.IsNullOrEmpty(queryText))
+ remoteClient.SendDirGroupsReply(queryID, new DirGroupsReplyData[0]);
+
+ // TODO: This currently ignores pretty much all the query flags including Mature and sort order
+ remoteClient.SendDirGroupsReply(queryID, m_GroupsService.FindGroups(remoteClient, queryText).ToArray());
+ }
+
+ }
+
+ #endregion Event Handlers
+
+ }
+
+}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 295ad64..7adb203 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -100,8 +100,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
scene.RegisterModuleInterface(this);
scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded);
- scene.EventManager.OnMakeRootAgent += new Action(EventManager_OnMakeRootAgent);
- scene.EventManager.OnMakeChildAgent += new EventManager.OnMakeChildAgentDelegate(EventManager_OnMakeChildAgent);
}
}
@@ -157,43 +155,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
client.OnAvatarPickerRequest -= new AvatarPickerRequest(HandleAvatarPickerRequest);
}
- void EventManager_OnMakeRootAgent(ScenePresence sp)
- {
- sp.ControllingClient.OnDirFindQuery += OnDirFindQuery;
- }
-
- void EventManager_OnMakeChildAgent(ScenePresence sp)
- {
- sp.ControllingClient.OnDirFindQuery -= OnDirFindQuery;
- }
-
- void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart)
- {
- if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People)
- {
- if (string.IsNullOrEmpty(queryText))
- remoteClient.SendDirPeopleReply(queryID, new DirPeopleReplyData[0]);
-
- List accounts = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, queryText);
- DirPeopleReplyData[] hits = new DirPeopleReplyData[accounts.Count];
- int i = 0;
- foreach (UserAccount acc in accounts)
- {
- DirPeopleReplyData d = new DirPeopleReplyData();
- d.agentID = acc.PrincipalID;
- d.firstName = acc.FirstName;
- d.lastName = acc.LastName;
- d.online = false;
-
- hits[i++] = d;
- }
-
- // TODO: This currently ignores pretty much all the query flags including Mature and sort order
- remoteClient.SendDirPeopleReply(queryID, hits);
- }
-
- }
-
void HandleUUIDNameRequest(UUID uuid, IClientAPI client)
{
// m_log.DebugFormat(
diff --git a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
index 6885327..9ae5e87 100644
--- a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs
@@ -97,5 +97,7 @@ namespace OpenSim.Region.Framework.Interfaces
void InviteGroupRequest(IClientAPI remoteClient, UUID GroupID, UUID InviteeID, UUID RoleID);
void InviteGroup(IClientAPI remoteClient, UUID agentID, UUID GroupID, UUID InviteeID, UUID RoleID);
void NotifyChange(UUID GroupID);
+
+ List FindGroups(IClientAPI remoteClient, string query);
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 32fb54b..f4734b7 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -250,7 +250,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest;
client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest;
- client.OnDirFindQuery += OnDirFindQuery;
client.OnRequestAvatarProperties += OnRequestAvatarProperties;
// Used for Notices and Group Invites/Accept/Reject
@@ -303,21 +302,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
}
*/
- void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart)
- {
- if (((DirFindFlags)queryFlags & DirFindFlags.Groups) == DirFindFlags.Groups)
- {
- if (m_debugEnabled)
- m_log.DebugFormat(
- "[GROUPS]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})",
- System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart);
-
- // TODO: This currently ignores pretty much all the query flags including Mature and sort order
- remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetRequestingAgentID(remoteClient), queryText).ToArray());
- }
-
- }
-
private void OnAgentDataUpdateRequest(IClientAPI remoteClient, UUID dataForAgentID, UUID sessionID)
{
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
@@ -1178,6 +1162,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
}
}
+ public List FindGroups(IClientAPI remoteClient, string query)
+ {
+ return m_groupData.FindGroups(GetRequestingAgentID(remoteClient), query);
+ }
+
+
#endregion
#region Client/Update Tools
--
cgit v1.1
From 63f6c8f27ca280a7d362af08ba1716d5f28e3137 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 28 Jul 2013 13:53:47 -0700
Subject: Removed commented lines and useless debug message
---
OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs | 1 -
1 file changed, 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
index a089447..8838612 100644
--- a/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs
@@ -150,7 +150,6 @@ namespace OpenSim.Region.CoreModules.Framework.Search
void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart)
{
- m_log.Debug("[ZZZ]: Got here");
if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People)
{
if (string.IsNullOrEmpty(queryText))
--
cgit v1.1