aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs58
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs39
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs2
3 files changed, 42 insertions, 57 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
index 5f26469..89f3339 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
@@ -99,26 +99,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
99 // 99 //
100 private Dictionary<uint, uint> m_PendingAcks = new Dictionary<uint, uint>(); 100 private Dictionary<uint, uint> m_PendingAcks = new Dictionary<uint, uint>();
101 101
102 // Dictionary of the packets that need acks from the client. 102 private Dictionary<uint, LLQueItem> m_NeedAck =
103 // 103 new Dictionary<uint, LLQueItem>();
104 private class AckData
105 {
106 public AckData(Packet packet, Object identifier, int tickCount, int resends)
107 {
108 Packet = packet;
109 Identifier = identifier;
110 TickCount = tickCount;
111 Resends = resends;
112 }
113
114 public Packet Packet;
115 public Object Identifier;
116 public int TickCount;
117 public int Resends;
118 }
119
120 private Dictionary<uint, AckData> m_NeedAck =
121 new Dictionary<uint, AckData>();
122 104
123 /// <summary> 105 /// <summary>
124 /// The number of milliseconds that can pass before a packet that needs an ack is resent. 106 /// The number of milliseconds that can pass before a packet that needs an ack is resent.
@@ -314,6 +296,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
314 item.throttleType = throttlePacketType; 296 item.throttleType = throttlePacketType;
315 item.TickCount = System.Environment.TickCount; 297 item.TickCount = System.Environment.TickCount;
316 item.Identifier = id; 298 item.Identifier = id;
299 item.Resends = 0;
300 item.Length = packet.ToBytes().Length;
317 301
318 m_PacketQueue.Enqueue(item); 302 m_PacketQueue.Enqueue(item);
319 m_PacketsSent++; 303 m_PacketsSent++;
@@ -333,7 +317,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
333 if (m_DropSafeTimeout > now || 317 if (m_DropSafeTimeout > now ||
334 intervalMs > 500) // We were frozen! 318 intervalMs > 500) // We were frozen!
335 { 319 {
336 foreach (AckData data in new List<AckData> 320 foreach (LLQueItem data in new List<LLQueItem>
337 (m_NeedAck.Values)) 321 (m_NeedAck.Values))
338 { 322 {
339 if (m_DropSafeTimeout > now) 323 if (m_DropSafeTimeout > now)
@@ -364,7 +348,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
364 348
365 int resent = 0; 349 int resent = 0;
366 350
367 foreach (AckData data in new List<AckData>(m_NeedAck.Values)) 351 foreach (LLQueItem data in new List<LLQueItem>(m_NeedAck.Values))
368 { 352 {
369 Packet packet = data.Packet; 353 Packet packet = data.Packet;
370 354
@@ -630,7 +614,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
630 614
631 private void ProcessAck(uint id) 615 private void ProcessAck(uint id)
632 { 616 {
633 AckData data; 617 LLQueItem data;
634 Packet packet; 618 Packet packet;
635 619
636 lock (m_NeedAck) 620 lock (m_NeedAck)
@@ -640,11 +624,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
640 if (!m_NeedAck.TryGetValue(id, out data)) 624 if (!m_NeedAck.TryGetValue(id, out data))
641 return; 625 return;
642 626
643 packet = data.Packet;
644
645 m_NeedAck.Remove(id); 627 m_NeedAck.Remove(id);
646 m_UnackedBytes -= packet.ToBytes().Length;
647 PacketPool.Instance.ReturnPacket(data.Packet); 628 PacketPool.Instance.ReturnPacket(data.Packet);
629 m_UnackedBytes -= data.Length;
648 } 630 }
649 } 631 }
650 632
@@ -697,7 +679,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
697 public void SetClientInfo(ClientInfo info) 679 public void SetClientInfo(ClientInfo info)
698 { 680 {
699 m_PendingAcks = info.pendingAcks; 681 m_PendingAcks = info.pendingAcks;
700 m_NeedAck = new Dictionary<uint, AckData>(); 682 m_NeedAck = new Dictionary<uint, LLQueItem>();
701 683
702 Packet packet = null; 684 Packet packet = null;
703 int packetEnd = 0; 685 int packetEnd = 0;
@@ -716,7 +698,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
716 { 698 {
717 } 699 }
718 700
719 m_NeedAck.Add(key, new AckData(packet, null, System.Environment.TickCount, 0)); 701 LLQueItem item = new LLQueItem();
702 item.Packet = packet;
703 item.Incoming = false;
704 item.throttleType = 0;
705 item.TickCount = System.Environment.TickCount;
706 item.Identifier = 0;
707 item.Resends = 0;
708 item.Length = packet.ToBytes().Length;
709 m_NeedAck.Add(key, item);
720 } 710 }
721 711
722 m_Sequence = info.sequence; 712 m_Sequence = info.sequence;
@@ -740,7 +730,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
740 730
741 private void DropResend(Object id) 731 private void DropResend(Object id)
742 { 732 {
743 foreach (AckData data in new List<AckData>(m_NeedAck.Values)) 733 foreach (LLQueItem data in new List<LLQueItem>(m_NeedAck.Values))
744 { 734 {
745 if (data.Identifier != null && data.Identifier == id) 735 if (data.Identifier != null && data.Identifier == id)
746 { 736 {
@@ -777,12 +767,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
777 // We want to see that packet arrive if it's reliable 767 // We want to see that packet arrive if it's reliable
778 if (packet.Header.Reliable) 768 if (packet.Header.Reliable)
779 { 769 {
780 m_UnackedBytes += packet.ToBytes().Length; 770 m_UnackedBytes += item.Length;
781 771
782 // Keep track of when this packet was sent out 772 // Keep track of when this packet was sent out
783 m_NeedAck[packet.Header.Sequence] = new AckData(packet, 773 item.TickCount = System.Environment.TickCount;
784 item.Identifier, System.Environment.TickCount, 774
785 0); 775 m_NeedAck[packet.Header.Sequence] = item;
786 } 776 }
787 } 777 }
788 } 778 }
@@ -792,7 +782,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
792 Abort(); 782 Abort();
793 783
794 // Actually make the byte array and send it 784 // Actually make the byte array and send it
795 byte[] sendbuffer = packet.ToBytes(); 785 byte[] sendbuffer = item.Packet.ToBytes();
796 786
797 //m_log.DebugFormat( 787 //m_log.DebugFormat(
798 // "[CLIENT]: In {0} sending packet {1}", 788 // "[CLIENT]: In {0} sending packet {1}",
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
index 2d02dfc..4383493 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
@@ -345,9 +345,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
345 LLQueItem qpack = ResendOutgoingPacketQueue.Dequeue(); 345 LLQueItem qpack = ResendOutgoingPacketQueue.Dequeue();
346 346
347 SendQueue.Enqueue(qpack); 347 SendQueue.Enqueue(qpack);
348 int qpackSize = qpack.Packet.ToBytes().Length; 348 TotalThrottle.AddBytes(qpack.Length);
349 TotalThrottle.AddBytes(qpackSize); 349 ResendThrottle.AddBytes(qpack.Length);
350 ResendThrottle.AddBytes(qpackSize);
351 350
352 qchanged = true; 351 qchanged = true;
353 } 352 }
@@ -357,9 +356,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
357 LLQueItem qpack = LandOutgoingPacketQueue.Dequeue(); 356 LLQueItem qpack = LandOutgoingPacketQueue.Dequeue();
358 357
359 SendQueue.Enqueue(qpack); 358 SendQueue.Enqueue(qpack);
360 int qpackSize = qpack.Packet.ToBytes().Length; 359 TotalThrottle.AddBytes(qpack.Length);
361 TotalThrottle.AddBytes(qpackSize); 360 LandThrottle.AddBytes(qpack.Length);
362 LandThrottle.AddBytes(qpackSize);
363 qchanged = true; 361 qchanged = true;
364 } 362 }
365 363
@@ -368,9 +366,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
368 LLQueItem qpack = WindOutgoingPacketQueue.Dequeue(); 366 LLQueItem qpack = WindOutgoingPacketQueue.Dequeue();
369 367
370 SendQueue.Enqueue(qpack); 368 SendQueue.Enqueue(qpack);
371 int qpackSize = qpack.Packet.ToBytes().Length; 369 TotalThrottle.AddBytes(qpack.Length);
372 TotalThrottle.AddBytes(qpackSize); 370 WindThrottle.AddBytes(qpack.Length);
373 WindThrottle.AddBytes(qpackSize);
374 qchanged = true; 371 qchanged = true;
375 } 372 }
376 373
@@ -379,9 +376,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
379 LLQueItem qpack = CloudOutgoingPacketQueue.Dequeue(); 376 LLQueItem qpack = CloudOutgoingPacketQueue.Dequeue();
380 377
381 SendQueue.Enqueue(qpack); 378 SendQueue.Enqueue(qpack);
382 int qpackSize = qpack.Packet.ToBytes().Length; 379 TotalThrottle.AddBytes(qpack.Length);
383 TotalThrottle.AddBytes(qpackSize); 380 CloudThrottle.AddBytes(qpack.Length);
384 CloudThrottle.AddBytes(qpackSize);
385 qchanged = true; 381 qchanged = true;
386 } 382 }
387 383
@@ -399,9 +395,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
399 SendQueue.Enqueue(qpack); 395 SendQueue.Enqueue(qpack);
400 } 396 }
401 397
402 int qpackSize = qpack.Packet.ToBytes().Length; 398 TotalThrottle.AddBytes(qpack.Length);
403 TotalThrottle.AddBytes(qpackSize); 399 TaskThrottle.AddBytes(qpack.Length);
404 TaskThrottle.AddBytes(qpackSize);
405 qchanged = true; 400 qchanged = true;
406 } 401 }
407 402
@@ -410,9 +405,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
410 LLQueItem qpack = TextureOutgoingPacketQueue.Dequeue(); 405 LLQueItem qpack = TextureOutgoingPacketQueue.Dequeue();
411 406
412 SendQueue.Enqueue(qpack); 407 SendQueue.Enqueue(qpack);
413 int qpackSize = qpack.Packet.ToBytes().Length; 408 TotalThrottle.AddBytes(qpack.Length);
414 TotalThrottle.AddBytes(qpackSize); 409 TextureThrottle.AddBytes(qpack.Length);
415 TextureThrottle.AddBytes(qpackSize);
416 qchanged = true; 410 qchanged = true;
417 } 411 }
418 412
@@ -421,9 +415,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
421 LLQueItem qpack = AssetOutgoingPacketQueue.Dequeue(); 415 LLQueItem qpack = AssetOutgoingPacketQueue.Dequeue();
422 416
423 SendQueue.Enqueue(qpack); 417 SendQueue.Enqueue(qpack);
424 int qpackSize = qpack.Packet.ToBytes().Length; 418 TotalThrottle.AddBytes(qpack.Length);
425 TotalThrottle.AddBytes(qpackSize); 419 AssetThrottle.AddBytes(qpack.Length);
426 AssetThrottle.AddBytes(qpackSize);
427 qchanged = true; 420 qchanged = true;
428 } 421 }
429 } 422 }
@@ -451,8 +444,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
451 try 444 try
452 { 445 {
453 Monitor.Enter(this); 446 Monitor.Enter(this);
454 throttle.AddBytes(item.Packet.ToBytes().Length); 447 throttle.AddBytes(item.Length);
455 TotalThrottle.AddBytes(item.Packet.ToBytes().Length); 448 TotalThrottle.AddBytes(item.Length);
456 SendQueue.Enqueue(item); 449 SendQueue.Enqueue(item);
457 } 450 }
458 catch (Exception e) 451 catch (Exception e)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs b/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs
index 494d62b..a5dcf55 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLQueItem.cs
@@ -42,5 +42,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
42 public ThrottleOutPacketType throttleType; 42 public ThrottleOutPacketType throttleType;
43 public int TickCount; 43 public int TickCount;
44 public Object Identifier; 44 public Object Identifier;
45 public int Resends;
46 public int Length;
45 } 47 }
46} 48}