I wonder what we could do if a node knew it didn't need hole punching or a node knew a particular peer didn't need hole punching. (How the node would know is irrelevant at this point in the discussion.)


Exactly ;)
But that only works when a node knows, 100% that it is not behind a NAT.

While it would be best if the node automatically detected, right now, only a human can say.

After talking on IRC with toad and Zothar, I've made a patch to allow a human to set that, and thus set the Max backoff time.

Of course, I didn't know about svn diff until it was too late, and I had already moved it, and removed .svn files to make a unix style diff.

http://code.bulix.org/6007

I tried to clean it up a bit, to remove a few changes that other people had made to the tree while I was working. That follows-
http://code.bulix.org/6008



diff -r -u freenet/src/freenet/node/ARKFetcher.java modified/src/ freenet/node/ARKFetcher.java --- freenet/src/freenet/node/ARKFetcher.java 2006-06-02 11:29:14.000000000 -0400 +++ modified/src/freenet/node/ARKFetcher.java 2006-06-02 11:34:45.000000000 -0400
@@ -15,6 +15,11 @@
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;

+import freenet.config.Config;
+import freenet.config.LongCallback;
+import freenet.config.SubConfig;
+
+
 /**
* Fetch an ARK. Permanent, tied to a PeerNode, stops itself after a successful fetch.
  */
@@ -25,18 +30,18 @@
        private ClientGetter getter;
        private FreenetURI fetchingURI;
        private boolean shouldRun = false;
-       private static final int MAX_BACKOFF = 60*60*1000;
        private static final int MIN_BACKOFF = 5*1000;
        private int backoff = MIN_BACKOFF;
        private String identity;
        private boolean isFetching = false;
-
+       
        public ARKFetcher(PeerNode peer, Node node) {
                this.peer = peer;
                this.node = node;
                this.identity = peer.getIdentityString();
        }

+
        /**
* Called when the node starts / is added, and also when we fail to connect twice * after a new reference. (So we get one from the ARK, we wait for the current
@@ -141,7 +146,7 @@
                        return;
                }
                backoff += backoff;
-               if(backoff > MAX_BACKOFF) backoff = MAX_BACKOFF;
+               if(backoff > node.Max_Arkbackoff) backoff = node.Max_Arkbackoff;
Logger.minor(this, "Failed to fetch ARK for "+peer+", now backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
                // We may be on the PacketSender thread.
                // FIXME should this be exponential backoff?
diff -r -u freenet/src/freenet/node/Node.java modified/src/freenet/ node/Node.java --- freenet/src/freenet/node/Node.java 2006-06-02 11:29:14.000000000 -0400 +++ modified/src/freenet/node/Node.java 2006-06-02 11:27:07.000000000 -0400
@@ -601,6 +601,8 @@
        
        private static NodeStarter nodeStarter;
        
+       public int Max_Arkbackoff;
+       
     /**
      * Read all storable settings (identity etc) from the node file.
      * @param filename The name of the file to read from.
@@ -921,7 +923,7 @@
         bootID = random.nextLong();
         throttledPacketSendAverage =
new TimeDecayingRunningAverage(1, 10*60*1000 /* should be significantly longer than a typical transfer */, 0, Long.MAX_VALUE);
-
+               Max_Arkbackoff=60*60*1000;
        // Setup node-specific configuration
        
        SubConfig nodeConfig = new SubConfig("node", config);
@@ -1126,7 +1128,17 @@
                
                
         }
-
+               
+ nodeConfig.register("MaximumArkdelay", 60*60*1000 /* 1 per minute */,2, true, "Maximum delay between ARK requests", "Maximum delay (in seconds) between ARK requests- Do not touch this unless you are *SURE* you are not behind a NAT.",
+                       new IntCallback() {
+                                       public int get() {
+                                               return Max_Arkbackoff;
+                                       }
+                                       public void set(int val) {
+                                               if(val == Max_Arkbackoff) 
return;
+                                               val = Max_Arkbackoff;
+                                       }
+           });
         // Directory for node-related files other than store

nodeConfig.register("nodeDir", ".", 6, true, "Node directory", "Name of directory to put node-related files e.g. peers list in",
_______________________________________________
Devl mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to