diff options
Merge branch 'master' into careminster-presence-refactor
Also prevent god takes from ending up in Lost and Found
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index ef0a178..6985449 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | |||
@@ -312,6 +312,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
312 | } | 312 | } |
313 | } | 313 | } |
314 | 314 | ||
315 | /// <summary> | ||
316 | /// Start the process of sending a packet to the client. | ||
317 | /// </summary> | ||
318 | /// <param name="udpClient"></param> | ||
319 | /// <param name="packet"></param> | ||
320 | /// <param name="category"></param> | ||
321 | /// <param name="allowSplitting"></param> | ||
315 | public void SendPacket(LLUDPClient udpClient, Packet packet, ThrottleOutPacketType category, bool allowSplitting) | 322 | public void SendPacket(LLUDPClient udpClient, Packet packet, ThrottleOutPacketType category, bool allowSplitting) |
316 | { | 323 | { |
317 | // CoarseLocationUpdate packets cannot be split in an automated way | 324 | // CoarseLocationUpdate packets cannot be split in an automated way |
@@ -339,6 +346,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
339 | } | 346 | } |
340 | } | 347 | } |
341 | 348 | ||
349 | /// <summary> | ||
350 | /// Start the process of sending a packet to the client. | ||
351 | /// </summary> | ||
352 | /// <param name="udpClient"></param> | ||
353 | /// <param name="data"></param> | ||
354 | /// <param name="type"></param> | ||
355 | /// <param name="category"></param> | ||
342 | public void SendPacketData(LLUDPClient udpClient, byte[] data, PacketType type, ThrottleOutPacketType category) | 356 | public void SendPacketData(LLUDPClient udpClient, byte[] data, PacketType type, ThrottleOutPacketType category) |
343 | { | 357 | { |
344 | int dataLength = data.Length; | 358 | int dataLength = data.Length; |
@@ -396,7 +410,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
396 | 410 | ||
397 | OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category); | 411 | OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category); |
398 | 412 | ||
399 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket)) | 413 | // If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will |
414 | // continue to display the deleted object until relog. Therefore, we need to always queue a kill object | ||
415 | // packet so that it isn't sent before a queued update packet. | ||
416 | bool requestQueue = type == PacketType.KillObject; | ||
417 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue)) | ||
400 | SendPacketFinal(outgoingPacket); | 418 | SendPacketFinal(outgoingPacket); |
401 | 419 | ||
402 | #endregion Queue or Send | 420 | #endregion Queue or Send |
@@ -489,7 +507,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
489 | //Interlocked.Increment(ref Stats.ResentPackets); | 507 | //Interlocked.Increment(ref Stats.ResentPackets); |
490 | 508 | ||
491 | // Requeue or resend the packet | 509 | // Requeue or resend the packet |
492 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket)) | 510 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, false)) |
493 | SendPacketFinal(outgoingPacket); | 511 | SendPacketFinal(outgoingPacket); |
494 | } | 512 | } |
495 | } | 513 | } |