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) {