More i2ptunnel error propagation fixes - key file - thx echelon

This commit is contained in:
zzz
2010-07-08 18:45:30 +00:00
parent 96d3f67436
commit be75455b84
4 changed files with 29 additions and 14 deletions

View File

@@ -390,10 +390,10 @@ public class I2PTunnel implements Logging, EventDispatcher {
if (!privKeyFile.isAbsolute()) if (!privKeyFile.isAbsolute())
privKeyFile = new File(_context.getConfigDir(), args[2]); privKeyFile = new File(_context.getConfigDir(), args[2]);
if (!privKeyFile.canRead()) { if (!privKeyFile.canRead()) {
l.log("private key file does not exist"); l.log(getPrefix() + "Private key file does not exist or is not readable: " + args[2]);
_log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]);
notifyEvent("serverTaskId", Integer.valueOf(-1)); notifyEvent("serverTaskId", Integer.valueOf(-1));
return; throw new IllegalArgumentException(getPrefix() + "Cannot open private key file " + args[2]);
} }
I2PTunnelServer serv = new I2PTunnelServer(serverHost, portNum, privKeyFile, args[2], l, (EventDispatcher) this, this); I2PTunnelServer serv = new I2PTunnelServer(serverHost, portNum, privKeyFile, args[2], l, (EventDispatcher) this, this);
serv.setReadTimeout(readTimeout); serv.setReadTimeout(readTimeout);
@@ -441,10 +441,10 @@ public class I2PTunnel implements Logging, EventDispatcher {
if (!privKeyFile.isAbsolute()) if (!privKeyFile.isAbsolute())
privKeyFile = new File(_context.getConfigDir(), args[2]); privKeyFile = new File(_context.getConfigDir(), args[2]);
if (!privKeyFile.canRead()) { if (!privKeyFile.canRead()) {
l.log("private key file does not exist"); l.log(getPrefix() + "Private key file does not exist or is not readable: " + args[2]);
_log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]);
notifyEvent("serverTaskId", Integer.valueOf(-1)); notifyEvent("serverTaskId", Integer.valueOf(-1));
return; throw new IllegalArgumentException(getPrefix() + "Cannot open private key file " + args[2]);
} }
I2PTunnelServer serv = new I2PTunnelIRCServer(serverHost, portNum, privKeyFile, args[2], l, (EventDispatcher) this, this); I2PTunnelServer serv = new I2PTunnelIRCServer(serverHost, portNum, privKeyFile, args[2], l, (EventDispatcher) this, this);
serv.setReadTimeout(readTimeout); serv.setReadTimeout(readTimeout);
@@ -502,10 +502,10 @@ public class I2PTunnel implements Logging, EventDispatcher {
if (!privKeyFile.isAbsolute()) if (!privKeyFile.isAbsolute())
privKeyFile = new File(_context.getConfigDir(), args[3]); privKeyFile = new File(_context.getConfigDir(), args[3]);
if (!privKeyFile.canRead()) { if (!privKeyFile.canRead()) {
l.log("private key file does not exist"); l.log(getPrefix() + "Private key file does not exist or is not readable: " + args[3]);
_log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[3]); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[3]);
notifyEvent("serverTaskId", Integer.valueOf(-1)); notifyEvent("serverTaskId", Integer.valueOf(-1));
return; throw new IllegalArgumentException(getPrefix() + "Cannot open private key file " + args[3]);
} }
I2PTunnelHTTPServer serv = new I2PTunnelHTTPServer(serverHost, portNum, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this); I2PTunnelHTTPServer serv = new I2PTunnelHTTPServer(serverHost, portNum, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this);
serv.setReadTimeout(readTimeout); serv.setReadTimeout(readTimeout);
@@ -577,10 +577,10 @@ public class I2PTunnel implements Logging, EventDispatcher {
if (!privKeyFile.isAbsolute()) if (!privKeyFile.isAbsolute())
privKeyFile = new File(_context.getConfigDir(), args[4]); privKeyFile = new File(_context.getConfigDir(), args[4]);
if (!privKeyFile.canRead()) { if (!privKeyFile.canRead()) {
l.log("private key file does not exist"); l.log(getPrefix() + "Private key file does not exist or is not readable: " + args[4]);
_log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[4]); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[4]);
notifyEvent("serverTaskId", Integer.valueOf(-1)); notifyEvent("serverTaskId", Integer.valueOf(-1));
return; throw new IllegalArgumentException(getPrefix() + "Cannot open private key file " + args[4]);
} }
I2PTunnelHTTPBidirServer serv = new I2PTunnelHTTPBidirServer(serverHost, portNum, port2Num, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this); I2PTunnelHTTPBidirServer serv = new I2PTunnelHTTPBidirServer(serverHost, portNum, port2Num, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this);

View File

@@ -46,6 +46,7 @@ public class TunnelController implements Logging {
public TunnelController(Properties config, String prefix) { public TunnelController(Properties config, String prefix) {
this(config, prefix, true); this(config, prefix, true);
} }
/** /**
* *
* @param createKey for servers, whether we want to create a brand new destination * @param createKey for servers, whether we want to create a brand new destination
@@ -58,17 +59,21 @@ public class TunnelController implements Logging {
setConfig(config, prefix); setConfig(config, prefix);
_messages = new ArrayList(4); _messages = new ArrayList(4);
_running = false; _running = false;
boolean keyOK = true;
if (createKey && (getType().endsWith("server") || getPersistentClientKey())) if (createKey && (getType().endsWith("server") || getPersistentClientKey()))
createPrivateKey(); keyOK = createPrivateKey();
_starting = getStartOnLoad(); _starting = keyOK && getStartOnLoad();
} }
private void createPrivateKey() { /**
* @return success
*/
private boolean createPrivateKey() {
I2PClient client = I2PClientFactory.createClient(); I2PClient client = I2PClientFactory.createClient();
String filename = getPrivKeyFile(); String filename = getPrivKeyFile();
if ( (filename == null) || (filename.trim().length() <= 0) ) { if ( (filename == null) || (filename.trim().length() <= 0) ) {
log("No filename specified for the private key"); log("No filename specified for the private key");
return; return false;
} }
File keyFile = new File(getPrivKeyFile()); File keyFile = new File(getPrivKeyFile());
@@ -76,7 +81,7 @@ public class TunnelController implements Logging {
keyFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), getPrivKeyFile()); keyFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), getPrivKeyFile());
if (keyFile.exists()) { if (keyFile.exists()) {
//log("Not overwriting existing private keys in " + keyFile.getAbsolutePath()); //log("Not overwriting existing private keys in " + keyFile.getAbsolutePath());
return; return true;
} else { } else {
File parent = keyFile.getParentFile(); File parent = keyFile.getParentFile();
if ( (parent != null) && (!parent.exists()) ) if ( (parent != null) && (!parent.exists()) )
@@ -94,13 +99,16 @@ public class TunnelController implements Logging {
if (_log.shouldLog(Log.ERROR)) if (_log.shouldLog(Log.ERROR))
_log.error("Error creating new destination", ie); _log.error("Error creating new destination", ie);
log("Error creating new destination: " + ie.getMessage()); log("Error creating new destination: " + ie.getMessage());
return false;
} catch (IOException ioe) { } catch (IOException ioe) {
if (_log.shouldLog(Log.ERROR)) if (_log.shouldLog(Log.ERROR))
_log.error("Error creating writing the destination to " + keyFile.getAbsolutePath(), ioe); _log.error("Error creating writing the destination to " + keyFile.getAbsolutePath(), ioe);
log("Error writing the keys to " + keyFile.getAbsolutePath()); log("Error writing the keys to " + keyFile.getAbsolutePath());
return false;
} finally { } finally {
if (fos != null) try { fos.close(); } catch (IOException ioe) {} if (fos != null) try { fos.close(); } catch (IOException ioe) {}
} }
return true;
} }
public void startTunnelBackground() { public void startTunnelBackground() {
@@ -126,6 +134,10 @@ public class TunnelController implements Logging {
} }
_starting = false; _starting = false;
} }
/**
* @throws IllegalArgumentException via methods in I2PTunnel
*/
private void doStartTunnel() { private void doStartTunnel() {
if (_running) { if (_running) {
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))

View File

@@ -1,3 +1,6 @@
2010-07-08 zzz
* I2PTunnel: More error propagation fixes
2010-07-07 duck 2010-07-07 duck
* RouterConsole: Add Help & FAQ link, minor label improvements. * RouterConsole: Add Help & FAQ link, minor label improvements.

View File

@@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */ /** deprecated */
public final static String ID = "Monotone"; public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION; public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 8; public final static long BUILD = 9;
/** for example "-test" */ /** for example "-test" */
public final static String EXTRA = ""; public final static String EXTRA = "";