From cbc89376d3ec27b4d76e9ede809cb0d958af0cb0 Mon Sep 17 00:00:00 2001
From: jrandom <jrandom>
Date: Thu, 16 Dec 2004 05:42:03 +0000
Subject: [PATCH] 2004-12-16  jrandom     * Remove the randomized factor in the
 tunnel rejection by bandwidth -       we now accept the request if we've
 allocated less than our limit       and reject it if we've allocated more.   
  * Stick to the standard capacity scale on tunnel rejection, even for      
 the 10m period.     * Build the time message at the very last possible moment

---
 history.txt                                        | 10 +++++++++-
 .../src/net/i2p/router/RouterThrottleImpl.java     |  2 +-
 router/java/src/net/i2p/router/RouterVersion.java  |  4 ++--
 .../i2p/router/peermanager/CapacityCalculator.java |  8 ++++----
 .../i2p/router/transport/tcp/ConnectionRunner.java | 14 +++++++-------
 .../i2p/router/transport/tcp/MessageHandler.java   | 10 ++++++----
 6 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/history.txt b/history.txt
index 3750d09a7c..627fd73983 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,12 @@
-$Id: history.txt,v 1.107 2004/12/14 11:42:35 jrandom Exp $
+$Id: history.txt,v 1.108 2004/12/15 21:45:56 jrandom Exp $
+
+2004-12-16  jrandom
+    * Remove the randomized factor in the tunnel rejection by bandwidth -
+      we now accept the request if we've allocated less than our limit
+      and reject it if we've allocated more.
+    * Stick to the standard capacity scale on tunnel rejection, even for 
+      the 10m period.
+    * Build the time message at the very last possible moment
 
 2004-12-15  jrandom
     * Handle hard disconnects more gracefully within the streaming lib, and
diff --git a/router/java/src/net/i2p/router/RouterThrottleImpl.java b/router/java/src/net/i2p/router/RouterThrottleImpl.java
index b6ad5f11b6..e52adbbb56 100644
--- a/router/java/src/net/i2p/router/RouterThrottleImpl.java
+++ b/router/java/src/net/i2p/router/RouterThrottleImpl.java
@@ -241,7 +241,7 @@ class RouterThrottleImpl implements RouterThrottle {
         
         double allocatedKBps = toAllocate / (10 * 60 * 1024);
         
-        if (_context.random().nextInt(100) > 100 * pctFull) {
+        if (pctFull < 1.0) { // (_context.random().nextInt(100) > 100 * pctFull) {
             if (_log.shouldLog(Log.DEBUG))
                 _log.debug("Probabalistically allowing the tunnel w/ " + pctFull + " of our " + bytesAllowed
                            + "bytes/" + allocatedKBps + "KBps allocated through " + numTunnels + " tunnels");
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 914b1a82ac..3fc2dce40b 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.112 $ $Date: 2004/12/14 11:42:35 $";
+    public final static String ID = "$Revision: 1.113 $ $Date: 2004/12/15 21:45:55 $";
     public final static String VERSION = "0.4.2.3";
-    public final static long BUILD = 6;
+    public final static long BUILD = 7;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + VERSION);
         System.out.println("Router ID: " + RouterVersion.ID);
diff --git a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
index 35e36043b9..0a8670471a 100644
--- a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
+++ b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java
@@ -101,10 +101,10 @@ public class CapacityCalculator extends Calculator {
             val -= failed * stretch;
         }
         
-        if ( (period <= 10*60*1000) && (curRejected.getCurrentEventCount() + curRejected.getLastEventCount() > 0) ) {
-            //System.out.println("10m period has rejected " + (curRejected.getCurrentEventCount() + curRejected.getLastEventCount()) + " times");
-            return 0.0d;
-        } else
+        //if ( (period <= 10*60*1000) && (curRejected.getCurrentEventCount() + curRejected.getLastEventCount() > 0) ) {
+        //    //System.out.println("10m period has rejected " + (curRejected.getCurrentEventCount() + curRejected.getLastEventCount()) + " times");
+        //    return 0.0d;
+        //} else
             val -= stretch * (curRejected.getCurrentEventCount() + curRejected.getLastEventCount());
         
         val += GROWTH_FACTOR;
diff --git a/router/java/src/net/i2p/router/transport/tcp/ConnectionRunner.java b/router/java/src/net/i2p/router/transport/tcp/ConnectionRunner.java
index 62a1f2e780..c3a7367785 100644
--- a/router/java/src/net/i2p/router/transport/tcp/ConnectionRunner.java
+++ b/router/java/src/net/i2p/router/transport/tcp/ConnectionRunner.java
@@ -92,11 +92,9 @@ class ConnectionRunner implements Runnable {
         
         msg.timestamp("ConnectionRunner.sendMessage data");
 
-        I2NPMessage timeMessage = null;
-        if (_lastTimeSend < _context.clock().now() - TIME_SEND_FREQUENCY) {
-            timeMessage = buildTimeMessage();
-            _lastTimeSend = _context.clock().now();
-        }
+        boolean sendTime = false;
+        if (_lastTimeSend < _context.clock().now() - TIME_SEND_FREQUENCY)
+            sendTime = true;
         
         OutputStream out = _con.getOutputStream();
         boolean ok = false;
@@ -106,8 +104,10 @@ class ConnectionRunner implements Runnable {
             synchronized (out) {
                 before = _context.clock().now();
                 out.write(buf, 0, written);
-                if (timeMessage != null)
-                    out.write(timeMessage.toByteArray());
+                if (sendTime) {
+                    out.write(buildTimeMessage().toByteArray());
+                    _lastTimeSend = _context.clock().now();
+                }
                 out.flush();
                 after = _context.clock().now();
             }
diff --git a/router/java/src/net/i2p/router/transport/tcp/MessageHandler.java b/router/java/src/net/i2p/router/transport/tcp/MessageHandler.java
index cbe1ee7a56..6232debf3b 100644
--- a/router/java/src/net/i2p/router/transport/tcp/MessageHandler.java
+++ b/router/java/src/net/i2p/router/transport/tcp/MessageHandler.java
@@ -54,10 +54,12 @@ public class MessageHandler implements I2NPMessageReader.I2NPMessageEventListene
         long delta = _con.getRouterContext().clock().now() - remoteTime;
         if ( (delta > Router.CLOCK_FUDGE_FACTOR) || (delta < 0 - Router.CLOCK_FUDGE_FACTOR) ) {
             _con.closeConnection();
-            _transport.addConnectionErrorMessage("Peer " + _identHash.toBase64().substring(0,6) 
-                                                 + " is too far skewed (" 
-                                                 + DataHelper.formatDuration(delta) + ") after uptime of " 
-                                                 + DataHelper.formatDuration(_con.getLifetime())); 
+            String msg = "Peer " + _identHash.toBase64().substring(0,6) + " is too far skewed (" 
+                         + DataHelper.formatDuration(delta) + ") after uptime of " 
+                         + DataHelper.formatDuration(_con.getLifetime());
+            if (_log.shouldLog(Log.WARN))
+                _log.warn(msg);
+            _transport.addConnectionErrorMessage(msg); 
             _transport.getContext().statManager().addRateData("tcp.disconnectAfterSkew", delta, _con.getLifetime());
         } else {
             int level = Log.DEBUG;
-- 
GitLab