Author: toad
Date: 2008-09-04 19:03:55 +0000 (Thu, 04 Sep 2008)
New Revision: 22433

Modified:
   trunk/freenet/src/freenet/io/AddressTracker.java
   trunk/freenet/src/freenet/node/Announcer.java
   trunk/freenet/src/freenet/node/OpennetManager.java
Log:
After opennet has been enabled for an hour, assume we are maybe not port 
forwarded (and therefore show the alert, in the next commit), if the minimum 
tunnel length is still nil.


Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java    2008-09-04 19:02:15 UTC 
(rev 22432)
+++ trunk/freenet/src/freenet/io/AddressTracker.java    2008-09-04 19:03:55 UTC 
(rev 22433)
@@ -238,10 +238,18 @@
                        return MAYBE_PORT_FORWARDED;
                // Only take isBroken into account if we're not sure.
                // Somebody could be playing with us by sending bogus 
FNPSentPackets...
-               if(isBroken) return DEFINITELY_NATED;
+               synchronized(this) {
+                       if(isBroken()) return DEFINITELY_NATED;
+                       if(minGap == 0 && timePresumeGuilty > 0 && 
System.currentTimeMillis() > timePresumeGuilty)
+                               return MAYBE_NATED;
+               }
                return DONT_KNOW;
        }

+       private boolean isBroken() {
+               return System.currentTimeMillis() - brokenTime < HORIZON;
+       }
+
        public static String statusString(int status) {
                switch(status) {
                case DEFINITELY_PORT_FORWARDED:
@@ -262,7 +270,7 @@
        /** Persist the table to disk */
        public void storeData(long bootID, File nodeDir, int port) {
                // Don't write to disk if we know we're NATed anyway!
-               if(isBroken) return;
+               if(isBroken()) return;
                File data = new File(nodeDir, "packets-"+port+".dat");
                File dataBak = new File(nodeDir, "packets-"+port+".bak");
                data.delete();
@@ -321,7 +329,16 @@
        }

        public synchronized void setBroken() {
-               isBroken = true;
                brokenTime = System.currentTimeMillis();
        }
+
+       private long timePresumeGuilty = -1;
+       
+       public synchronized void setPresumedGuiltyAt(long l) {
+               timePresumeGuilty = l;
+       }
+
+       public synchronized void setPresumedInnocent() {
+               timePresumeGuilty = -1;
+       }
 }

Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java       2008-09-04 19:02:15 UTC 
(rev 22432)
+++ trunk/freenet/src/freenet/node/Announcer.java       2008-09-04 19:03:55 UTC 
(rev 22433)
@@ -501,6 +501,9 @@
                                                announceNow = true;
                                        }
                                }
+                               if(totalAdded > 0) {
+                                       
om.crypto.socket.getAddressTracker().setPresumedGuiltyAt(System.currentTimeMillis()+60*60*1000);
+                               }
                                // If it takes more than COOLING_OFF_PERIOD to 
disconnect, we might not be able to reannounce to this
                                // node. However, we can't reannounce to it 
anyway until announcedTo is cleared, which probably will
                                // be more than that period in the future.

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2008-09-04 19:02:15 UTC 
(rev 22432)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2008-09-04 19:03:55 UTC 
(rev 22433)
@@ -236,6 +236,7 @@
                crypto.stop();
                if(purge)
                        node.peers.removeOpennetPeers();
+               crypto.socket.getAddressTracker().setPresumedInnocent();
        }

        public OpennetPeerNode addNewOpennetNode(SimpleFieldSet fs) throws 
FSParseException, PeerParseException, ReferenceSignatureVerificationException {


Reply via email to