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