diff --git a/apps/routerconsole/jsp/nav.jsp b/apps/routerconsole/jsp/nav.jsp index b52821f1f..414b7c7f2 100644 --- a/apps/routerconsole/jsp/nav.jsp +++ b/apps/routerconsole/jsp/nav.jsp @@ -16,9 +16,9 @@

Susimail | - SusiDNS | + SusiDNS | Syndie | - I2PTunnel | + I2PTunnel | Tunnels | Profiles | NetDB | diff --git a/history.txt b/history.txt index 01b8c6025..7cc2b5d6c 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,12 @@ -$Id: history.txt,v 1.314 2005/11/05 06:01:57 dust Exp $ +$Id: history.txt,v 1.315 2005/11/05 16:12:57 jrandom Exp $ + +2005-11-06 jrandom + * Include SSU establishment failure in the peer profile as a commError, + as we do for TCP establishment failures. + * Don't throttle the initial transmission of a message because of ongoing + retransmissions to a peer, since the initial transmission of a message + is more valuable than a retransmission (since it has less latency). + * Cleaned up links to SusiDNS and I2PTunnel (thanks zzz!) 2005-11-05 jrandom * Include the most recent ACKs with packets, rather than only sending an diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 8337157e5..380d825e2 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.283 $ $Date: 2005/11/05 06:01:58 $"; + public final static String ID = "$Revision: 1.284 $ $Date: 2005/11/05 16:12:59 $"; public final static String VERSION = "0.6.1.4"; - public final static long BUILD = 4; + public final static long BUILD = 5; 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/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index 3baf7317a..4434a0fef 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -10,6 +10,7 @@ import java.util.Map; import net.i2p.crypto.DHSessionKeyBuilder; import net.i2p.data.Base64; +import net.i2p.data.Hash; import net.i2p.data.RouterAddress; import net.i2p.data.RouterIdentity; import net.i2p.data.SessionKey; @@ -760,7 +761,9 @@ public class EstablishmentManager { err = "Took too long to establish remote connection (unknown state)"; } - _context.shitlist().shitlistRouter(outboundState.getRemoteIdentity().calculateHash(), err); + Hash peer = outboundState.getRemoteIdentity().calculateHash(); + _context.shitlist().shitlistRouter(peer, err); + _context.profileManager().commErrorOccurred(peer); } else { while (true) { OutNetMessage msg = outboundState.getNextQueuedMessage(); 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 50aadf3b0..997b4f42f 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java @@ -359,6 +359,13 @@ public class OutboundMessageFragments { * message to a peer while a retransmission is going on. */ private static final boolean THROTTLE_RESENDS = true; + /** + * if true, throttle the initial volley of a message if there is a resend in progress. + * if false, always send the first volley, regardless of retransmissions (but keeping in + * mind bw/cwin throttle, etc) + * + */ + private static final boolean THROTTLE_INITIAL_SEND = false; private boolean locked_shouldSend(OutboundMessageState state, PeerState peer) { long now = _context.clock().now(); @@ -373,17 +380,23 @@ public class OutboundMessageFragments { } OutboundMessageState curRetransMsg = (OutboundMessageState)_retransmitters.get(peer); + if ( (curRetransMsg != null) && ( (curRetransMsg.isExpired() || curRetransMsg.isComplete()) ) ) { + _retransmitters.remove(peer); + curRetransMsg = null; + } + 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()); - if ( (state.getMaxSends() <= 0) || (THROTTLE_RESENDS) ) { + if ( (state.getMaxSends() <= 0) && (!THROTTLE_INITIAL_SEND) ) { + if (state.getMessage() != null) + state.getMessage().timestamp("another message is retransmitting, but we want to send our first volley..."); + } else if ( (state.getMaxSends() <= 0) || (THROTTLE_RESENDS) ) { if (state.getMessage() != null) state.getMessage().timestamp("choked, with another message retransmitting"); return false; } else { - if (curRetransMsg.isExpired() || curRetransMsg.isComplete()) - _retransmitters.remove(peer); if (state.getMessage() != null) state.getMessage().timestamp("another message is retransmitting, but since we've already begun sending..."); }