From 592e9dc3ff2063da721f8e4cb2a0e3b80abd706c Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Sat, 6 Nov 2004 08:02:02 +0000 Subject: [PATCH] * limit the resend delay to a max of 60s between resends * reduce the max # resends to 5 * if the session.sendMessage fails, we're fucked, so kill the socket --- .../src/net/i2p/client/streaming/Connection.java | 15 +++++++++++++-- .../i2p/client/streaming/ConnectionOptions.java | 2 +- .../src/net/i2p/client/streaming/PacketQueue.java | 3 +++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java index e0163f16ba..73c33ca630 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java @@ -54,6 +54,8 @@ public class Connection { /** set to an error cause if the connection could not be established */ private String _connectionError; + public static final long MAX_RESEND_DELAY = 60*1000; + public Connection(I2PAppContext ctx, ConnectionManager manager, SchedulerChooser chooser, PacketQueue queue, ConnectionPacketHandler handler) { this(ctx, manager, chooser, queue, handler, null); } @@ -175,9 +177,14 @@ public class Connection { _log.debug("Requesting ack delay of " + delay + "ms for packet " + packet); } packet.setFlag(Packet.FLAG_DELAY_REQUESTED); + + long timeout = (_options.getRTT() < 10000 ? 10000 : _options.getRTT()); + if (timeout > MAX_RESEND_DELAY) + timeout = MAX_RESEND_DELAY; if (_log.shouldLog(Log.DEBUG)) - _log.debug("Resend in " + (_options.getRTT()*2) + " for " + packet); - SimpleTimer.getInstance().addEvent(new ResendPacketEvent(packet), (_options.getRTT()*2 < 5000 ? 5000 : _options.getRTT()*2)); + _log.debug("Resend in " + timeout + " for " + packet); + + SimpleTimer.getInstance().addEvent(new ResendPacketEvent(packet), timeout); } _lastSendTime = _context.clock().now(); @@ -439,6 +446,8 @@ public class Connection { } public void timeReached() { + if (!_connected) return; + //if (_log.shouldLog(Log.DEBUG)) // _log.debug("Resend period reached for " + _packet); boolean resend = false; @@ -477,6 +486,8 @@ public class Connection { } else { //long timeout = _options.getResendDelay() << numSends; long timeout = _options.getRTT() << (numSends-1); + if ( (timeout > MAX_RESEND_DELAY) || (timeout <= 0) ) + timeout = MAX_RESEND_DELAY; if (_log.shouldLog(Log.DEBUG)) _log.debug("Scheduling resend in " + timeout + "ms for " + _packet); SimpleTimer.getInstance().addEvent(ResendPacketEvent.this, timeout); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java index 06d67c0d1f..49e41229a9 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java @@ -57,7 +57,7 @@ public class ConnectionOptions extends I2PSocketOptions { setResendDelay(5*1000); setSendAckDelay(2*1000); setWindowSize(1); - setMaxResends(10); + setMaxResends(5); setWriteTimeout(-1); } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java index 53f33c1692..3bc9c4370c 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java @@ -48,6 +48,8 @@ class PacketQueue { if (packet.getAckTime() > 0) { _log.debug("Not resending " + packet); return; + } else { + _log.debug("Sending... " + packet); } // this should not block! long begin = _context.clock().now(); @@ -56,6 +58,7 @@ class PacketQueue { if (!sent) { if (_log.shouldLog(Log.WARN)) _log.warn("Send failed for " + packet); + packet.getConnection().disconnect(false); } else { packet.setKeyUsed(keyUsed); packet.setTagsSent(tagsSent); -- GitLab