From 6812dc1db81268d5ee17696538f1fbb4c4fcc061 Mon Sep 17 00:00:00 2001 From: zab2 <zab2@mail.i2p> Date: Sat, 31 Aug 2013 18:39:29 +0000 Subject: [PATCH] Ticket #1007 use only non-retransmitted packets in RTT sampling. (RFC 6298) --- .../streaming/ConnectionPacketHandler.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java index 2bc867c475..333a4086b9 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java @@ -290,17 +290,21 @@ class ConnectionPacketHandler { _log.debug(acked.size() + " of our packets acked with " + packet); // use the highest RTT, since these would likely be bunched together, // and the highest rtt lets us set our resend delay properly + // RFC 6298 part 3 dictates only use packets that haven't been re-sent. int highestRTT = -1; for (int i = 0; i < acked.size(); i++) { PacketLocal p = acked.get(i); - if (p.getAckTime() > highestRTT) { - //if (p.getNumSends() <= 1) - highestRTT = p.getAckTime(); - } - _context.statManager().addRateData("stream.sendsBeforeAck", p.getNumSends(), p.getAckTime()); - if (p.getNumSends() > 1) + final int numSends = p.getNumSends(); + final int ackTime = p.getAckTime(); + + if (numSends > 1) numResends++; + else if (ackTime > highestRTT) + highestRTT = ackTime; + + _context.statManager().addRateData("stream.sendsBeforeAck", numSends, ackTime); + // ACK the tags we delivered so we can use them //if ( (p.getKeyUsed() != null) && (p.getTagsSent() != null) @@ -310,7 +314,7 @@ class ConnectionPacketHandler { // p.getTagsSent()); //} if (_log.shouldLog(Log.DEBUG)) - _log.debug("Packet acked after " + p.getAckTime() + "ms: " + p); + _log.debug("Packet acked after " + ackTime + "ms: " + p); } if (highestRTT > 0) { int oldrtt = con.getOptions().getRTT(); -- GitLab