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;