diff options
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; |