Author: toad
Date: 2007-11-27 00:55:44 +0000 (Tue, 27 Nov 2007)
New Revision: 15950
Modified:
trunk/freenet/src/freenet/io/AddressTrackerItem.java
Log:
Beginnings of send...receive-gap-based port forwarding detection.
Modified: trunk/freenet/src/freenet/io/AddressTrackerItem.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-25
22:05:35 UTC (rev 15949)
+++ trunk/freenet/src/freenet/io/AddressTrackerItem.java 2007-11-27
00:55:44 UTC (rev 15950)
@@ -43,6 +43,10 @@
private long packetsSent;
/** The total number of packets received from this address */
private long packetsReceived;
+ static final int TRACK_GAPS = 5;
+ private long[] topGapLengths;
+ private long[] topGapLengthRecvTimes;
+ static final int GAP_THRESHOLD = AddressTracker.MAX_TUNNEL_LENGTH;
public AddressTrackerItem(long timeDefinitelyNoPacketsReceived, long
timeDefinitelyNoPacketsSent) {
timeFirstReceivedPacket = -1;
@@ -53,6 +57,8 @@
packetsReceived = 0;
this.timeDefinitelyNoPacketsReceived =
timeDefinitelyNoPacketsReceived;
this.timeDefinitelyNoPacketsSent = timeDefinitelyNoPacketsSent;
+ topGapLengths = new long[TRACK_GAPS];
+ topGapLengthRecvTimes = new long[TRACK_GAPS];
}
public synchronized void sentPacket(long now) {
@@ -67,6 +73,19 @@
if(timeFirstReceivedPacket < 0)
timeFirstReceivedPacket = now;
timeLastReceivedPacket = now;
+ // Establish the interval
+ long startTime;
+ if(timeFirstSentPacket > 0) startTime = timeFirstSentPacket;
+ else startTime = timeDefinitelyNoPacketsSent;
+ if(now - startTime > GAP_THRESHOLD) {
+ // Rotate gaps array
+ for(int i=1;i<TRACK_GAPS;i++) {
+ topGapLengths[i] = topGapLengths[i-1];
+ topGapLengthRecvTimes[i] =
topGapLengthRecvTimes[i-1];
+ }
+ topGapLengths[0] = (now - timeFirstSentPacket);
+ topGapLengthRecvTimes[0] = now;
+ }
}
public synchronized long firstReceivedPacket() {