diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java index 02297e2e2f8d4617ace169db56a3bf0337ee7308..ad4ee8d0bb1ba9c3dc2ba67e1fc4d28242865fe0 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java @@ -288,6 +288,7 @@ public class PeerHelper extends HelperBase { " </tr>\n"); out.write(buf.toString()); buf.setLength(0); + long now = _context.clock().now(); for (NTCPConnection con : peers) { buf.append("<tr><td class=\"cells\" align=\"left\" nowrap>"); buf.append(_context.commSystem().renderPeerHTML(con.getRemotePeer().calculateHash())); @@ -306,10 +307,10 @@ public class PeerHelper extends HelperBase { buf.append(""); buf.append("</td><td class=\"cells peeripv6\" align=\"center\">").append(con.getVersion()); buf.append("</td><td class=\"cells\" align=\"center\"><span class=\"right\">"); - buf.append(DataHelper.formatDuration2(con.getTimeSinceReceive())); - buf.append("</span>").append(THINSP).append("<span class=\"left\">").append(DataHelper.formatDuration2(con.getTimeSinceSend())); + buf.append(DataHelper.formatDuration2(con.getTimeSinceReceive(now))); + buf.append("</span>").append(THINSP).append("<span class=\"left\">").append(DataHelper.formatDuration2(con.getTimeSinceSend(now))); buf.append("</span></td><td class=\"cells\" align=\"center\"><span class=\"right\">"); - if (con.getTimeSinceReceive() < 2*60*1000) { + if (con.getTimeSinceReceive(now) < 2*60*1000) { float r = con.getRecvRate(); buf.append(formatRate(r / 1000)); bpsRecv += r; @@ -317,7 +318,7 @@ public class PeerHelper extends HelperBase { buf.append(formatRate(0)); } buf.append("</span>").append(THINSP).append("<span class=\"left\">"); - if (con.getTimeSinceSend() < 2*60*1000) { + if (con.getTimeSinceSend(now) < 2*60*1000) { float r = con.getSendRate(); buf.append(formatRate(r / 1000)); bpsSend += r; diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index e64011f0d68758150d7c231e22fd804e9d2f32a4..5c208cd380086f22ddd728214ba65af850acacda 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -262,7 +262,7 @@ class EventPumper implements Runnable { */ if ((!key.isValid()) && (!((SocketChannel)key.channel()).isConnectionPending()) && - con.getTimeSinceCreated() > 2 * NTCPTransport.ESTABLISH_TIMEOUT) { + con.getTimeSinceCreated(now) > 2 * NTCPTransport.ESTABLISH_TIMEOUT) { if (_log.shouldLog(Log.INFO)) _log.info("Removing invalid key for " + con); // this will cancel the key, and it will then be removed from the keyset @@ -293,8 +293,8 @@ class EventPumper implements Runnable { expire = _expireIdleWriteTime; } - if ( con.getTimeSinceSend() > expire && - con.getTimeSinceReceive() > expire) { + if ( con.getTimeSinceSend(now) > expire && + con.getTimeSinceReceive(now) > expire) { // we haven't sent or received anything in a really long time, so lets just close 'er up con.sendTerminationAndClose(); if (_log.shouldInfo()) diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java index 44eaa40c7430a80aad964b17afae4afb5cf8ca42..f34ad600887a440eea29231b1d42efa25a4a9a80 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java @@ -416,16 +416,30 @@ public class NTCPConnection implements Closeable { /** @return milliseconds */ public long getTimeSinceSend() { return _context.clock().now()-_lastSendTime; } + /** + * @return milliseconds + * @since 0.9.38 + */ public long getTimeSinceSend(long now) { return now - _lastSendTime; } /** @return milliseconds */ public long getTimeSinceReceive() { return _context.clock().now()-_lastReceiveTime; } + /** + * @return milliseconds + * @since 0.9.38 + */ public long getTimeSinceReceive(long now) { return now - _lastReceiveTime; } /** @return milliseconds */ public long getTimeSinceCreated() { return _context.clock().now()-_created; } + /** + * @return milliseconds + * @since 0.9.38 + */ + public long getTimeSinceCreated(long now) { return now -_created; } + /** * @return when this connection was created (not established) * @since 0.9.20 diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index 1ac28c64f5bd8713e5d2c140ab06873461f5baa1..e05a935a69f4e28b0aea2a89c8c34a6e4dc8a6a4 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -707,7 +707,7 @@ public class NTCPTransport extends TransportImpl { * As of 0.9.20, actually returns active peer count, not total. */ public int countActivePeers() { - final long now = _context.clock().now(); + final long now = _context.clock().now(); int active = 0; for (NTCPConnection con : _conByIdent.values()) { // con initializes times at construction, @@ -724,11 +724,12 @@ public class NTCPTransport extends TransportImpl { * How many peers are we actively sending messages to (this minute) */ public int countActiveSendPeers() { + final long now = _context.clock().now(); int active = 0; for (NTCPConnection con : _conByIdent.values()) { // con initializes times at construction, // so check message count also - if (con.getMessagesSent() > 0 && con.getTimeSinceSend() <= 60*1000) { + if (con.getMessagesSent() > 0 && con.getTimeSinceSend(now) <= 60*1000) { active++; } } @@ -1104,12 +1105,13 @@ public class NTCPTransport extends TransportImpl { */ void expireTimedOut() { int expired = 0; + final long now = _context.clock().now(); for (Iterator<NTCPConnection> iter = _establishing.iterator(); iter.hasNext(); ) { NTCPConnection con = iter.next(); if (con.isClosed() || con.isEstablished()) { iter.remove(); - } else if (con.getTimeSinceCreated() > ESTABLISH_TIMEOUT) { + } else if (con.getTimeSinceCreated(now) > ESTABLISH_TIMEOUT) { iter.remove(); con.close(); expired++;