From 00a4761b5e0da6cd9f0f980d923ff252776be491 Mon Sep 17 00:00:00 2001 From: jrandom Date: Thu, 13 Oct 2005 09:18:35 +0000 Subject: [PATCH] 2005-10-13 jrandom * SSU retransmission choke bugfix (== != !=) * Include initial transmissions in the retransmission choke, so that if we are already retransmitting a message, we won't send anything to that peer other than that message (or ACKs, if necessary) --- history.txt | 8 ++++++- .../src/net/i2p/router/RouterVersion.java | 4 ++-- .../udp/OutboundMessageFragments.java | 21 +++++++++---------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/history.txt b/history.txt index 848c61681..ff464701a 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,10 @@ -$Id: history.txt,v 1.291 2005/10/11 16:05:15 jrandom Exp $ +$Id: history.txt,v 1.292 2005/10/12 22:54:54 jrandom Exp $ + +2005-10-13 jrandom + * SSU retransmission choke bugfix (== != !=) + * Include initial transmissions in the retransmission choke, so that + if we are already retransmitting a message, we won't send anything + to that peer other than that message (or ACKs, if necessary) 2005-10-12 jrandom * Choke SSU retransmissions to a peer while there is already a diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 4d32874f7..201f37f4a 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -15,9 +15,9 @@ import net.i2p.CoreVersion; * */ public class RouterVersion { - public final static String ID = "$Revision: 1.266 $ $Date: 2005/10/11 16:05:14 $"; + public final static String ID = "$Revision: 1.267 $ $Date: 2005/10/12 22:54:54 $"; public final static String VERSION = "0.6.1.2"; - public final static long BUILD = 7; + public final static long BUILD = 8; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID); diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java index f6a10c6cc..1faf8f7e9 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java @@ -344,6 +344,14 @@ public class OutboundMessageFragments { _log.info("Fragmenting " + state); } + OutboundMessageState curRetransMsg = (OutboundMessageState)_retransmitters.get(peer); + if ( (curRetransMsg != null) && (curRetransMsg != state) ) { + // choke it, since there's already another message retransmitting to this + // peer. + _context.statManager().addRateData("udp.blockedRetransmissions", peer.getPacketsRetransmitted(), peer.getPacketsTransmitted()); + return false; + } + int size = state.getUnackedSize(); if (peer.allocateSendingBytes(size)) { if (_log.shouldLog(Log.INFO)) @@ -354,17 +362,8 @@ public class OutboundMessageFragments { + " for message " + state.getMessageId() + ": " + state); if (state.getPushCount() > 0) { - OutboundMessageState curRetransMsg = (OutboundMessageState)_retransmitters.get(peer); - if ( (curRetransMsg != null) && (curRetransMsg == state) ) { - // choke it, there's already another message to this peer in flight - // perhaps we should release the sendingBytes? or maybe not, since we - // *do* want to choke the peer... - _context.statManager().addRateData("udp.blockedRetransmissions", peer.getPacketsRetransmitted(), peer.getPacketsTransmitted()); - return false; - } else { - _retransmitters.put(peer, state); - } - + _retransmitters.put(peer, state); + int fragments = state.getFragmentCount(); int toSend = 0; for (int i = 0; i < fragments; i++) {