Author: toad
Date: 2007-11-27 02:03:55 +0000 (Tue, 27 Nov 2007)
New Revision: 15955

Modified:
   trunk/freenet/src/freenet/io/AddressTracker.java
   trunk/freenet/src/freenet/io/AddressTrackerItem.java
Log:
Detect from gaps in last 24 hours.

Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-27 01:38:12 UTC 
(rev 15954)
+++ trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-27 02:03:55 UTC 
(rev 15955)
@@ -117,6 +117,8 @@

        /** Assume NAT UDP hole punching tunnels are no longer than this */
        public static int MAX_TUNNEL_LENGTH = ((5*60)+1)*1000;
+       /** Time after which we ignore evidence that we are port forwarded */
+       public static final long HORIZON = 24*60*60*1000L;

        public int getPortForwardStatus() {
                PeerAddressTrackerItem[] items = getPeerAddressTrackerItems();
@@ -125,6 +127,10 @@
                        if(item.packetsReceived() <= 0) continue;
                        if(item.weSentFirst()) continue;
                        if(!item.peer.isRealInternetAddress(false, false)) 
continue;
+                       if(item.hasLongTunnel(HORIZON)) {
+                               // FIXME should require more than one
+                               return DEFINITELY_PORT_FORWARDED;
+                       }
                        if(item.timeFromStartupToFirstReceivedPacket() > 
MAX_TUNNEL_LENGTH) {
                                // FIXME should require more than one
                                return DEFINITELY_PORT_FORWARDED;

Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-27 
01:38:12 UTC (rev 15954)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java        2007-11-27 
02:03:55 UTC (rev 15955)
@@ -92,6 +92,10 @@
                }
        }

+       public synchronized boolean hasLongTunnel(long horizon) {
+               return topGapLengthRecvTimes[0] > System.currentTimeMillis() - 
horizon;
+       }
+
        public class Gap {
                public final long gapLength;
                public final long receivedPacketAt;


Reply via email to