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 e0163f16ba2984042240156e68f72e57e1fa8f36..73c33ca630c828610122e4b2dac31e0621378939 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 06d67c0d1f15e1e7832358213e3363d1304b9b3d..49e41229a91a73a80ae316d886575cf2550489fd 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 53f33c1692a3da5f03f94ef3e0ea502a6931dd61..3bc9c4370c1e27a4413516a468bb0097d155b95a 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);