Author: toad
Date: 2007-11-19 19:34:25 +0000 (Mon, 19 Nov 2007)
New Revision: 15847

Modified:
   trunk/freenet/src/freenet/io/AddressTracker.java
   trunk/freenet/src/freenet/io/AddressTrackerItem.java
   trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
   trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java
   trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
Log:
Packets cannot have been received until we actually start up the receive loop.
OTOH they cannot have been sent since we started starting up the node.

Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-19 19:26:00 UTC 
(rev 15846)
+++ trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-19 19:34:25 UTC 
(rev 15847)
@@ -38,10 +38,12 @@
        /** Maximum number of Item's of either type */
        static final int MAX_ITEMS = 1000;

-       private long timeDefinitelyNoPackets;
+       private long timeDefinitelyNoPacketsReceived;
+       private long timeDefinitelyNoPacketsSent;

        public AddressTracker() {
-               timeDefinitelyNoPackets = System.currentTimeMillis();
+               timeDefinitelyNoPacketsReceived = System.currentTimeMillis();
+               timeDefinitelyNoPacketsSent = System.currentTimeMillis();
        }

        public void sentPacketTo(Peer peer) {
@@ -58,11 +60,12 @@
                synchronized(this) {
                        PeerAddressTrackerItem peerItem = 
(PeerAddressTrackerItem) peerTrackers.get(peer);
                        if(peerItem == null) {
-                               peerItem = new 
PeerAddressTrackerItem(timeDefinitelyNoPackets, peer);
+                               peerItem = new 
PeerAddressTrackerItem(timeDefinitelyNoPacketsReceived, 
timeDefinitelyNoPacketsSent, peer);
                                if(peerTrackers.size() > MAX_ITEMS) {
                                        peerTrackers.clear();
                                        ipTrackers.clear();
-                                       timeDefinitelyNoPackets = now;
+                                       timeDefinitelyNoPacketsReceived = now;
+                                       timeDefinitelyNoPacketsSent = now;
                                }
                                peerTrackers.put(peer, peerItem);
                        }
@@ -72,11 +75,12 @@
                                peerItem.receivedPacket(now);
                        InetAddressAddressTrackerItem ipItem = 
(InetAddressAddressTrackerItem) ipTrackers.get(ip);
                        if(ipItem == null) {
-                               ipItem = new 
InetAddressAddressTrackerItem(timeDefinitelyNoPackets, ip);
+                               ipItem = new 
InetAddressAddressTrackerItem(timeDefinitelyNoPacketsReceived, 
timeDefinitelyNoPacketsSent, ip);
                                if(ipTrackers.size() > MAX_ITEMS) {
                                        peerTrackers.clear();
                                        ipTrackers.clear();
-                                       timeDefinitelyNoPackets = now;
+                                       timeDefinitelyNoPacketsReceived = now;
+                                       timeDefinitelyNoPacketsSent = now;
                                }
                                ipTrackers.put(ip, ipItem);
                        }
@@ -86,4 +90,12 @@
                                ipItem.receivedPacket(now);
                }
        }
+
+       public synchronized void startReceive(long now) {
+               timeDefinitelyNoPacketsReceived = now;
+       }
+
+       public synchronized void startSend(long now) {
+               timeDefinitelyNoPacketsSent = now;
+       }
 }

Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-19 
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-19 
19:34:25 UTC (rev 15847)
@@ -27,10 +27,14 @@
        /** The time at which the first packet was sent to this address. */
        private long timeFirstSentPacket;
        /** The earliest time, before timeFirstReceivedPacket, at which we know 
for 
-        * certain that there was no packet sent or received. This may be the 
-        * startup time of the node, or it may be later, if we have had to 
clear 
-        * the tracker cache. */
-       private long timeDefinitelyNoPackets;
+        * certain that there was no packet received. This is typically the 
startup 
+        * time of the server socket. It may be later if the cache has to be 
+        * flushed. */
+       private long timeDefinitelyNoPacketsReceived;
+       /** The earliest time, before timeFirstSentPacket, at which we know for 
+        * certain that there was no packet sent. This is typically the startup 
+        * time of the node. It may be later if the cache has to be flushed. */
+       private long timeDefinitelyNoPacketsSent;
        /** The time at which we received the most recent packet */
        private long timeLastReceivedPacket;
        /** The time at which we sent the most recent packet */
@@ -40,14 +44,15 @@
        /** The total number of packets received from this address */
        private long packetsReceived;

-       public AddressTrackerItem(long timeDefinitelyNoPackets) {
+       public AddressTrackerItem(long timeDefinitelyNoPacketsReceived, long 
timeDefinitelyNoPacketSent) {
                timeFirstReceivedPacket = -1;
                timeFirstSentPacket = -1;
                timeLastReceivedPacket = -1;
                timeLastSentPacket = -1;
                packetsSent = 0;
                packetsReceived = 0;
-               this.timeDefinitelyNoPackets = timeDefinitelyNoPackets;
+               this.timeDefinitelyNoPacketsReceived = 
timeDefinitelyNoPacketsReceived;
+               this.timeDefinitelyNoPacketsSent = timeDefinitelyNoPacketsSent;
        }

        public synchronized void sentPacket(long now) {
@@ -80,10 +85,14 @@
                return timeLastSentPacket;
        }

-       public synchronized long timeDefinitelyNoPackets() {
-               return timeDefinitelyNoPackets;
+       public synchronized long timeDefinitelyNoPacketsSent() {
+               return timeDefinitelyNoPacketsSent;
        }

+       public synchronized long timeDefinitelyNoPacketsReceived() {
+               return timeDefinitelyNoPacketsReceived;
+       }
+       
        public synchronized long packetsSent() {
                return packetsSent;
        }

Modified: trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java     
2007-11-19 19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/InetAddressAddressTrackerItem.java     
2007-11-19 19:34:25 UTC (rev 15847)
@@ -19,8 +19,9 @@

 public class InetAddressAddressTrackerItem extends AddressTrackerItem {

-       public InetAddressAddressTrackerItem(long timeDefinitelyNoPackets, 
InetAddress addr) {
-               super(timeDefinitelyNoPackets);
+       public InetAddressAddressTrackerItem(long 
timeDefinitelyNoPacketsReceived, 
+                       long timeDefinitelyNoPacketsSent, InetAddress addr) {
+               super(timeDefinitelyNoPacketsReceived, 
timeDefinitelyNoPacketsSent);
                this.addr = addr;
        }


Modified: trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java    2007-11-19 
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/PeerAddressTrackerItem.java    2007-11-19 
19:34:25 UTC (rev 15847)
@@ -21,8 +21,9 @@

        public final Peer peer;

-       public PeerAddressTrackerItem(long timeDefinitelyNoPackets, Peer peer) {
-               super(timeDefinitelyNoPackets);
+       public PeerAddressTrackerItem(long timeDefinitelyNoPacketsReceived, 
+                       long timeDefinitelyNoPacketsSent, Peer peer) {
+               super(timeDefinitelyNoPacketsReceived, 
timeDefinitelyNoPacketsSent);
                this.peer = peer;
        }


Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-19 
19:26:00 UTC (rev 15846)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-19 
19:34:25 UTC (rev 15847)
@@ -63,6 +63,7 @@
                dropRandom = new Random();
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                tracker = new AddressTracker();
+               tracker.startSend(node.startupTime);
        }

        /** Must be called, or we will NPE in run() */
@@ -75,6 +76,7 @@
        }

        public void run() { // Listen for packets
+               tracker.startReceive(System.currentTimeMillis());
                try {
                        runLoop();
                } catch (Throwable t) {


Reply via email to