Author: toad
Date: 2007-07-04 17:47:27 +0000 (Wed, 04 Jul 2007)
New Revision: 13920
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
Log:
Write opennet crypto identity on startup (we don't need to write it later as
there's nothing volatile in it).
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-04 17:42:18 UTC
(rev 13919)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-04 17:47:27 UTC
(rev 13920)
@@ -1,13 +1,17 @@
package freenet.node;
import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import freenet.io.comm.Peer;
import freenet.io.comm.PeerParseException;
+import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
/**
@@ -27,21 +31,53 @@
crypto =
new NodeCrypto(1 /* 0 is enabled */, node, true,
opennetConfig);
+ File nodeFile = new File(node.nodeDir,
"opennet-"+crypto.portNumber);
+ File backupNodeFile = new
File("node-"+crypto.portNumber+".bak");
+
// Keep opennet crypto details in a separate file
try {
- readFile(new File(node.nodeDir,
"opennet-"+crypto.portNumber).getPath());
+ readFile(nodeFile);
} catch (IOException e) {
try {
- readFile(new
File("node-"+crypto.portNumber+".bak").getPath());
+ readFile(backupNodeFile);
} catch (IOException e1) {
crypto.initCrypto();
}
}
node.peers.tryReadPeers(new File(node.nodeDir,
"openpeers-"+crypto.portNumber).toString(), crypto, true);
+ writeFile(backupNodeFile, nodeFile);
+ }
+
+ private void writeFile(File orig, File backup) {
+ SimpleFieldSet fs = crypto.exportPrivateFieldSet();
+ if(orig.exists()) backup.delete();
+
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(backup);
+ OutputStreamWriter osr = new OutputStreamWriter(fos,
"UTF-8");
+ BufferedWriter bw = new BufferedWriter(osr);
+ fs.writeTo(bw);
+ bw.close();
+ if(!backup.renameTo(orig)) {
+ orig.delete();
+ if(!backup.renameTo(orig)) {
+ Logger.error(this, "Could not rename
new node file "+backup+" to "+orig);
+ }
+ }
+ } catch (IOException e) {
+ if(fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e1) {
+ Logger.error(this, "Cannot close
"+backup+": "+e1, e1);
+ }
+ }
+ }
}
- private void readFile(String filename) throws IOException {
+ private void readFile(File filename) throws IOException {
// REDFLAG: Any way to share this code with Node and NodePeer?
FileInputStream fis = new FileInputStream(filename);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");