aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs58
-rw-r--r--OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs11
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs61
4 files changed, 54 insertions, 87 deletions
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
91 scene.RegisterModuleInterface<IEventQueue>(this); 91 scene.RegisterModuleInterface<IEventQueue>(this);
92 92
93 scene.EventManager.OnClientClosed += ClientClosed; 93 scene.EventManager.OnClientClosed += ClientClosed;
94 scene.EventManager.OnMakeChildAgent += MakeChildAgent;
95 scene.EventManager.OnRegisterCaps += OnRegisterCaps; 94 scene.EventManager.OnRegisterCaps += OnRegisterCaps;
96 95
97 MainConsole.Instance.Commands.AddCommand( 96 MainConsole.Instance.Commands.AddCommand(
@@ -120,7 +119,6 @@ namespace OpenSim.Region.ClientStack.Linden
120 return; 119 return;
121 120
122 scene.EventManager.OnClientClosed -= ClientClosed; 121 scene.EventManager.OnClientClosed -= ClientClosed;
123 scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
124 scene.EventManager.OnRegisterCaps -= OnRegisterCaps; 122 scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
125 123
126 scene.UnregisterModuleInterface<IEventQueue>(this); 124 scene.UnregisterModuleInterface<IEventQueue>(this);
@@ -189,14 +187,12 @@ namespace OpenSim.Region.ClientStack.Linden
189 { 187 {
190 if (!queues.ContainsKey(agentId)) 188 if (!queues.ContainsKey(agentId))
191 { 189 {
192 /*
193 m_log.DebugFormat( 190 m_log.DebugFormat(
194 "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", 191 "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}",
195 agentId, m_scene.RegionInfo.RegionName); 192 agentId, m_scene.RegionInfo.RegionName);
196 */
197 queues[agentId] = new Queue<OSD>(); 193 queues[agentId] = new Queue<OSD>();
198 } 194 }
199 195
200 return queues[agentId]; 196 return queues[agentId];
201 } 197 }
202 } 198 }
@@ -228,8 +224,12 @@ namespace OpenSim.Region.ClientStack.Linden
228 { 224 {
229 Queue<OSD> queue = GetQueue(avatarID); 225 Queue<OSD> queue = GetQueue(avatarID);
230 if (queue != null) 226 if (queue != null)
227 {
231 lock (queue) 228 lock (queue)
232 queue.Enqueue(ev); 229 queue.Enqueue(ev);
230 }
231 else
232 m_log.WarnFormat("[EVENTQUEUE]: (Enqueue) No queue found for agent {0} in region {1}", avatarID, m_scene.RegionInfo.RegionName);
233 } 233 }
234 catch (NullReferenceException e) 234 catch (NullReferenceException e)
235 { 235 {
@@ -244,7 +244,7 @@ namespace OpenSim.Region.ClientStack.Linden
244 244
245 private void ClientClosed(UUID agentID, Scene scene) 245 private void ClientClosed(UUID agentID, Scene scene)
246 { 246 {
247// m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName); 247 //m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
248 248
249 int count = 0; 249 int count = 0;
250 while (queues.ContainsKey(agentID) && queues[agentID].Count > 0 && count++ < 5) 250 while (queues.ContainsKey(agentID) && queues[agentID].Count > 0 && count++ < 5)
@@ -261,31 +261,6 @@ namespace OpenSim.Region.ClientStack.Linden
261 lock (m_AvatarQueueUUIDMapping) 261 lock (m_AvatarQueueUUIDMapping)
262 m_AvatarQueueUUIDMapping.Remove(agentID); 262 m_AvatarQueueUUIDMapping.Remove(agentID);
263 263
264// lock (m_AvatarQueueUUIDMapping)
265// {
266// foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys)
267// {
268//// m_log.DebugFormat("[EVENTQUEUE]: Found key {0} in m_AvatarQueueUUIDMapping while looking for {1}", ky, AgentID);
269// if (ky == agentID)
270// {
271// removeitems.Add(ky);
272// }
273// }
274//
275// foreach (UUID ky in removeitems)
276// {
277// UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky];
278// m_AvatarQueueUUIDMapping.Remove(ky);
279//
280// string eqgPath = GenerateEqgCapPath(eventQueueGetUuid);
281// MainServer.Instance.RemovePollServiceHTTPHandler("", eqgPath);
282//
283//// m_log.DebugFormat(
284//// "[EVENT QUEUE GET MODULE]: Removed EQG handler {0} for {1} in {2}",
285//// eqgPath, agentID, m_scene.RegionInfo.RegionName);
286// }
287// }
288
289 UUID searchval = UUID.Zero; 264 UUID searchval = UUID.Zero;
290 265
291 removeitems.Clear(); 266 removeitems.Clear();
@@ -305,19 +280,9 @@ namespace OpenSim.Region.ClientStack.Linden
305 foreach (UUID ky in removeitems) 280 foreach (UUID ky in removeitems)
306 m_QueueUUIDAvatarMapping.Remove(ky); 281 m_QueueUUIDAvatarMapping.Remove(ky);
307 } 282 }
308 }
309 283
310 private void MakeChildAgent(ScenePresence avatar) 284 // m_log.DebugFormat("[EVENTQUEUE]: Deleted queues for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
311 { 285
312 //m_log.DebugFormat("[EVENTQUEUE]: Make Child agent {0} in region {1}.", avatar.UUID, m_scene.RegionInfo.RegionName);
313 //lock (m_ids)
314 // {
315 //if (m_ids.ContainsKey(avatar.UUID))
316 //{
317 // close the event queue.
318 //m_ids[avatar.UUID] = -1;
319 //}
320 //}
321 } 286 }
322 287
323 /// <summary> 288 /// <summary>
@@ -417,7 +382,12 @@ namespace OpenSim.Region.ClientStack.Linden
417 if (DebugLevel >= 2) 382 if (DebugLevel >= 2)
418 m_log.WarnFormat("POLLED FOR EQ MESSAGES BY {0} in {1}", pAgentId, m_scene.RegionInfo.RegionName); 383 m_log.WarnFormat("POLLED FOR EQ MESSAGES BY {0} in {1}", pAgentId, m_scene.RegionInfo.RegionName);
419 384
420 Queue<OSD> queue = TryGetQueue(pAgentId); 385 Queue<OSD> queue = GetQueue(pAgentId);
386 if (queue == null)
387 {
388 return NoEvents(requestID, pAgentId);
389 }
390
421 OSD element; 391 OSD element;
422 lock (queue) 392 lock (queue)
423 { 393 {
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
132 { 132 {
133 Caps oldCaps = m_capsObjects[agentId]; 133 Caps oldCaps = m_capsObjects[agentId];
134 134
135 m_log.DebugFormat( 135 //m_log.WarnFormat(
136 "[CAPS]: Recreating caps for agent {0}. Old caps path {1}, new caps path {2}. ", 136 // "[CAPS]: Recreating caps for agent {0} in region {1}. Old caps path {2}, new caps path {3}. ",
137 agentId, oldCaps.CapsObjectPath, capsObjectPath); 137 // agentId, m_scene.RegionInfo.RegionName, oldCaps.CapsObjectPath, capsObjectPath);
138 // This should not happen. The caller code is confused. We need to fix that.
139 // CAPs can never be reregistered, or the client will be confused.
140 // Hence this return here.
141 //return;
142 } 138 }
143 139
144 caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName, 140 caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName,
@@ -153,6 +149,7 @@ namespace OpenSim.Region.CoreModules.Framework
153 149
154 public void RemoveCaps(UUID agentId) 150 public void RemoveCaps(UUID agentId)
155 { 151 {
152 m_log.DebugFormat("[CAPS]: Remove caps for agent {0} in region {1}", agentId, m_scene.RegionInfo.RegionName);
156 lock (m_childrenSeeds) 153 lock (m_childrenSeeds)
157 { 154 {
158 if (m_childrenSeeds.ContainsKey(agentId)) 155 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
316 m_log.DebugFormat( 316 m_log.DebugFormat(
317 "[ENTITY TRANSFER MODULE]: Ignoring teleport request of {0} {1} to {2}@{3} - agent is already in transit.", 317 "[ENTITY TRANSFER MODULE]: Ignoring teleport request of {0} {1} to {2}@{3} - agent is already in transit.",
318 sp.Name, sp.UUID, position, regionHandle); 318 sp.Name, sp.UUID, position, regionHandle);
319 319
320 sp.ControllingClient.SendTeleportFailed("Slow down!");
320 return; 321 return;
321 } 322 }
322 323
@@ -1040,9 +1041,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1040 // Now let's make it officially a child agent 1041 // Now let's make it officially a child agent
1041 sp.MakeChildAgent(); 1042 sp.MakeChildAgent();
1042 1043
1043 // OK, it got this agent. Let's close some child agents
1044 sp.CloseChildAgents(newRegionX, newRegionY);
1045
1046 // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone 1044 // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
1047 1045
1048 if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) 1046 if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
@@ -1059,10 +1057,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1059 1057
1060 if (!sp.DoNotCloseAfterTeleport) 1058 if (!sp.DoNotCloseAfterTeleport)
1061 { 1059 {
1060 // OK, it got this agent. Let's close everything
1061 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Closing in agent {0} in region {1}", sp.Name, Scene.RegionInfo.RegionName);
1062 sp.CloseChildAgents(newRegionX, newRegionY);
1062 sp.Scene.IncomingCloseAgent(sp.UUID, false); 1063 sp.Scene.IncomingCloseAgent(sp.UUID, false);
1064
1063 } 1065 }
1064 else 1066 else
1065 { 1067 {
1068 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Not closing agent {0}, user is back in {0}", sp.Name, Scene.RegionInfo.RegionName);
1066 sp.DoNotCloseAfterTeleport = false; 1069 sp.DoNotCloseAfterTeleport = false;
1067 } 1070 }
1068 } 1071 }
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
2805 { 2805 {
2806 ScenePresence sp; 2806 ScenePresence sp;
2807 bool vialogin; 2807 bool vialogin;
2808 bool reallyNew = true;
2808 2809
2809 // Validation occurs in LLUDPServer 2810 // Validation occurs in LLUDPServer
2810 // 2811 //
@@ -2856,6 +2857,7 @@ namespace OpenSim.Region.Framework.Scenes
2856 m_log.WarnFormat( 2857 m_log.WarnFormat(
2857 "[SCENE]: Already found {0} scene presence for {1} in {2} when asked to add new scene presence", 2858 "[SCENE]: Already found {0} scene presence for {1} in {2} when asked to add new scene presence",
2858 sp.IsChildAgent ? "child" : "root", sp.Name, RegionInfo.RegionName); 2859 sp.IsChildAgent ? "child" : "root", sp.Name, RegionInfo.RegionName);
2860 reallyNew = false;
2859 } 2861 }
2860 2862
2861 // We must set this here so that TriggerOnNewClient and TriggerOnClientLogin can determine whether the 2863 // We must set this here so that TriggerOnNewClient and TriggerOnClientLogin can determine whether the
@@ -2867,7 +2869,9 @@ namespace OpenSim.Region.Framework.Scenes
2867 // places. However, we still need to do it here for NPCs. 2869 // places. However, we still need to do it here for NPCs.
2868 CacheUserName(sp, aCircuit); 2870 CacheUserName(sp, aCircuit);
2869 2871
2870 EventManager.TriggerOnNewClient(client); 2872 if (reallyNew)
2873 EventManager.TriggerOnNewClient(client);
2874
2871 if (vialogin) 2875 if (vialogin)
2872 EventManager.TriggerOnClientLogin(client); 2876 EventManager.TriggerOnClientLogin(client);
2873 } 2877 }
@@ -3426,15 +3430,8 @@ namespace OpenSim.Region.Framework.Scenes
3426 if (closeChildAgents && isChildAgent) 3430 if (closeChildAgents && isChildAgent)
3427 { 3431 {
3428 // Tell a single agent to disconnect from the region. 3432 // Tell a single agent to disconnect from the region.
3429 IEventQueue eq = RequestModuleInterface<IEventQueue>(); 3433 // Let's do this via UDP
3430 if (eq != null) 3434 avatar.ControllingClient.SendShutdownConnectionNotice();
3431 {
3432 eq.DisableSimulator(RegionInfo.RegionHandle, avatar.UUID);
3433 }
3434 else
3435 {
3436 avatar.ControllingClient.SendShutdownConnectionNotice();
3437 }
3438 } 3435 }
3439 3436
3440 // Only applies to root agents. 3437 // Only applies to root agents.
@@ -3686,21 +3683,29 @@ namespace OpenSim.Region.Framework.Scenes
3686 { 3683 {
3687 if (!sp.IsChildAgent) 3684 if (!sp.IsChildAgent)
3688 { 3685 {
3689 // We have a zombie from a crashed session. 3686 // We have a root agent. Is it in transit?
3690 // Or the same user is trying to be root twice here, won't work. 3687 if (!EntityTransferModule.IsInTransit(sp.UUID))
3691 // Kill it. 3688 {
3692 m_log.WarnFormat( 3689 // We have a zombie from a crashed session.
3693 "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.", 3690 // Or the same user is trying to be root twice here, won't work.
3694 sp.Name, sp.UUID, RegionInfo.RegionName); 3691 // Kill it.
3695 3692 m_log.WarnFormat(
3696 if (sp.ControllingClient != null) 3693 "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
3697 sp.ControllingClient.Close(true); 3694 sp.Name, sp.UUID, RegionInfo.RegionName);
3695
3696 if (sp.ControllingClient != null)
3697 sp.ControllingClient.Close(true);
3698 3698
3699 sp = null; 3699 sp = null;
3700 }
3701 else
3702 m_log.WarnFormat("[SCENE]: Existing root scene presence for {0} {1} in {2}, but agent is in trasit", sp.Name, sp.UUID, RegionInfo.RegionName);
3700 } 3703 }
3701 else 3704 else
3702 { 3705 {
3706 // We have a child agent here
3703 sp.DoNotCloseAfterTeleport = true; 3707 sp.DoNotCloseAfterTeleport = true;
3708 //m_log.WarnFormat("[SCENE]: Existing child scene presence for {0} {1} in {2}", sp.Name, sp.UUID, RegionInfo.RegionName);
3704 } 3709 }
3705 } 3710 }
3706 3711
@@ -3785,9 +3790,12 @@ namespace OpenSim.Region.Framework.Scenes
3785 agent.AgentID, RegionInfo.RegionName); 3790 agent.AgentID, RegionInfo.RegionName);
3786 3791
3787 sp.AdjustKnownSeeds(); 3792 sp.AdjustKnownSeeds();
3788 3793
3789 if (CapsModule != null) 3794 if (CapsModule != null)
3795 {
3790 CapsModule.SetAgentCapsSeeds(agent); 3796 CapsModule.SetAgentCapsSeeds(agent);
3797 CapsModule.CreateCaps(agent.AgentID);
3798 }
3791 } 3799 }
3792 } 3800 }
3793 3801
@@ -5545,17 +5553,6 @@ namespace OpenSim.Region.Framework.Scenes
5545 { 5553 {
5546 reason = "You are banned from the region"; 5554 reason = "You are banned from the region";
5547 5555
5548 if (EntityTransferModule.IsInTransit(agentID))
5549 {
5550 reason = "Agent is still in transit from this region";
5551
5552 m_log.WarnFormat(
5553 "[SCENE]: Denying agent {0} entry into {1} since region still has them registered as in transit",
5554 agentID, RegionInfo.RegionName);
5555
5556 return false;
5557 }
5558
5559 if (Permissions.IsGod(agentID)) 5556 if (Permissions.IsGod(agentID))
5560 { 5557 {
5561 reason = String.Empty; 5558 reason = String.Empty;