Author: toad
Date: 2007-09-22 18:34:51 +0000 (Sat, 22 Sep 2007)
New Revision: 15273

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/OpennetManager.java
   trunk/freenet/src/freenet/node/PeerManager.java
Log:
Read stored old-opennet-peers from disk. They are not written yet.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-09-22 18:14:36 UTC (rev 
15272)
+++ trunk/freenet/src/freenet/node/Node.java    2007-09-22 18:34:51 UTC (rev 
15273)
@@ -760,7 +760,7 @@

                // Then read the peers
                peers = new PeerManager(this);
-               peers.tryReadPeers(new File(nodeDir, 
"peers-"+getDarknetPortNumber()).getPath(), darknetCrypto, null, false);
+               peers.tryReadPeers(new File(nodeDir, 
"peers-"+getDarknetPortNumber()).getPath(), darknetCrypto, null, false, false);
                peers.writePeers();
                peers.updatePMUserAlert();


Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-22 18:14:36 UTC 
(rev 15272)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2007-09-22 18:34:51 UTC 
(rev 15273)
@@ -93,7 +93,7 @@
                }
                peersLRU = new LRUQueue();
                oldPeers = new LRUQueue();
-               node.peers.tryReadPeers(new File(node.nodeDir, 
"openpeers-"+crypto.portNumber).toString(), crypto, this, true);
+               node.peers.tryReadPeers(new File(node.nodeDir, 
"openpeers-"+crypto.portNumber).toString(), crypto, this, true, false);
                OpennetPeerNode[] nodes = node.peers.getOpennetPeers();
                Arrays.sort(nodes, new Comparator() {
                        public int compare(Object arg0, Object arg1) {
@@ -119,6 +119,8 @@
                        peersLRU.push(nodes[i]);
                dropExcessPeers();
                writeFile(nodeFile, backupNodeFile);
+               // Read old peers
+               node.peers.tryReadPeers(new File(node.nodeDir, 
"openpeers-old-"+crypto.portNumber).toString(), crypto, this, true, true);
        }

        private void writeFile(File orig, File backup) {
@@ -407,4 +409,13 @@
                return (PeerNode[]) oldPeers.toArray(new 
PeerNode[oldPeers.size()]);
        }

+       /**
+        * Add an old opennet node - a node which might try to reconnect, and 
which we should accept
+        * if we are desperate.
+        * @param pn The node to add to the old opennet nodes LRU.
+        */
+       synchronized void addOldOpennetNode(PeerNode pn) {
+               oldPeers.push(pn);
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-09-22 18:14:36 UTC 
(rev 15272)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-09-22 18:34:51 UTC 
(rev 15273)
@@ -114,7 +114,17 @@
         this.node = node;
     }

-    void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager 
opennet, boolean isOpennet) {
+    /**
+     * Attempt to read a file full of noderefs. Try the file as named first, 
then the .bak if it is empty or
+     * otherwise doesn't work.
+     * @param filename The filename to read from. If this doesn't work, we try 
the .bak file.
+     * @param crypto The cryptographic identity which these nodes are 
connected to.
+     * @param opennet The opennet manager for the nodes. Only needed (for 
constructing the nodes) if isOpennet.
+     * @param isOpennet Whether the file contains opennet peers.
+     * @param oldOpennetPeers If true, don't add the nodes to the routing 
table, pass them to the opennet
+     * manager as "old peers" i.e. inactive nodes which may try to reconnect.
+     */
+    void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager 
opennet, boolean isOpennet, boolean oldOpennetPeers) {
        synchronized(writePeersSync) {
                if(isOpennet) {
                        openFilename = filename;
@@ -127,7 +137,7 @@
         File backupFile = new File(filename+".bak");
         // Try to read the node list from disk
        if(peersFile.exists()) {
-               if(readPeers(peersFile, mangler, crypto, opennet, isOpennet)) {
+               if(readPeers(peersFile, mangler, crypto, opennet, isOpennet, 
oldOpennetPeers)) {
                    String msg;
                    if(isOpennet) {
                            msg = "Read "+getOpennetPeers().length+" peers from 
"+peersFile;
@@ -141,7 +151,7 @@
                }
        // Try the backup
        if(backupFile.exists()) {
-               if(readPeers(backupFile, mangler, crypto, opennet, isOpennet)) {
+               if(readPeers(backupFile, mangler, crypto, opennet, isOpennet, 
oldOpennetPeers)) {
                    String msg;
                    if(isOpennet) {
                            msg = "Read "+getOpennetPeers().length+" peers from 
"+backupFile;
@@ -157,7 +167,7 @@
        }               
        }

-       private boolean readPeers(File peersFile, OutgoingPacketMangler 
mangler, NodeCrypto crypto, OpennetManager opennet, boolean isOpennet) {
+       private boolean readPeers(File peersFile, OutgoingPacketMangler 
mangler, NodeCrypto crypto, OpennetManager opennet, boolean isOpennet, boolean 
oldOpennetPeers) {
        boolean gotSome = false;
        FileInputStream fis;
                try {
@@ -191,7 +201,10 @@
                        Logger.error(this, "Could not parse peer: "+e2+ '\n' 
+fs.toString(),e2);
                     continue;
                                }
-                addPeer(pn, true);
+                if(oldOpennetPeers)
+                       opennet.addOldOpennetNode(pn);
+                else
+                       addPeer(pn, true);
                 gotSome = true;
             }
         } catch (EOFException e) {


Reply via email to