From 1fc6d0ad54eb257bc7723200216d90816ace2e9a Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 25 Oct 2011 21:31:23 +0000 Subject: [PATCH] * UDP: Mark only first fragment as a duplicate --- .../udp/InboundMessageFragments.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/udp/InboundMessageFragments.java b/router/java/src/net/i2p/router/transport/udp/InboundMessageFragments.java index f927d26796..6bb24c225f 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundMessageFragments.java @@ -103,14 +103,18 @@ class InboundMessageFragments /*implements UDPTransport.PartialACKSource */{ Long messageId = Long.valueOf(mid); if (_recentlyCompletedMessages.isKnown(mid)) { - _context.statManager().addRateData("udp.ignoreRecentDuplicate", 1, 0); - from.messageFullyReceived(messageId, -1); - _ackSender.ackPeer(from); - if (_log.shouldLog(Log.INFO)) - _log.info("Message received is a dup: " + mid + " dups: " - + _recentlyCompletedMessages.getCurrentDuplicateCount() + " out of " - + _recentlyCompletedMessages.getInsertedCount()); - _context.messageHistory().droppedInboundMessage(mid, from.getRemotePeer(), "dup"); + // Only update stats for the first fragment, + // otherwise it wildly overstates things + if (data.readMessageFragmentNum(i) == 0) { + _context.statManager().addRateData("udp.ignoreRecentDuplicate", 1); + from.messageFullyReceived(messageId, -1); + _ackSender.ackPeer(from); + if (_log.shouldLog(Log.INFO)) + _log.info("Message received is a dup: " + mid + " dups: " + + _recentlyCompletedMessages.getCurrentDuplicateCount() + " out of " + + _recentlyCompletedMessages.getInsertedCount()); + _context.messageHistory().droppedInboundMessage(mid, from.getRemotePeer(), "dup"); + } continue; } -- GitLab