Author: toad
Date: 2007-11-28 15:14:43 +0000 (Wed, 28 Nov 2007)
New Revision: 16012

Modified:
   trunk/freenet/src/freenet/io/AddressTracker.java
   trunk/freenet/src/freenet/io/AddressTrackerItem.java
Log:
getLongestSendReceiveGap()

Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-28 15:13:56 UTC 
(rev 16011)
+++ trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-28 15:14:43 UTC 
(rev 16012)
@@ -193,6 +193,25 @@
        /** Time after which we ignore evidence that we are port forwarded */
        public static final long HORIZON = 24*60*60*1000L;

+       /**
+        * Find the longest send/known-no-packets-sent ... receive gap.
+        * It is highly unlikely that we are behind a NAT or symmetric
+        * firewall with a timeout less than the returned length.
+        */
+       public long getLongestSendReceiveGap(long horizon) {
+               long longestGap = -1;
+               long now = System.currentTimeMillis();
+               PeerAddressTrackerItem[] items = getPeerAddressTrackerItems();
+               for(int i=0;i<items.length;i++) {
+                       PeerAddressTrackerItem item = items[i];
+                       if(item.packetsReceived() <= 0) continue;
+                       if(!item.peer.isRealInternetAddress(false, false)) 
continue;
+                       longestGap = Math.max(longestGap, 
item.longestGap(horizon, now));
+               }
+               return longestGap;
+               
+       }
+       
        public int getPortForwardStatus() {
                PeerAddressTrackerItem[] items = getPeerAddressTrackerItems();
                for(int i=0;i<items.length;i++) {

Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-28 
15:13:56 UTC (rev 16011)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-28 
15:14:43 UTC (rev 16012)
@@ -124,6 +124,15 @@
        public synchronized boolean hasLongTunnel(long horizon) {
                return gapLengthRecvTimes[0] > System.currentTimeMillis() - 
horizon;
        }
+       
+       public long longestGap(long horizon, long now) {
+               long longestGap = 0;
+               for(int i=0;i<TRACK_GAPS;i++) {
+                       if(gapLengthRecvTimes[0] < now - horizon) continue;
+                       longestGap = Math.max(longestGap, gapLengths[i]);
+               }
+               return longestGap;
+       }

        public class Gap {
                public final long gapLength;


Reply via email to