From 9cc96f45d01d4337c9feadb5155a1d60d87c11c5 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Sat, 14 Aug 2004 02:03:45 +0000 Subject: [PATCH] * add a main() to TunnelControllerGroup which can be used as a clientApp.* * new config property to have a tunnel start on load (default=true), so tunnels, er, start on load * use i2ptunnel.config instead of i2ptunnel.cfg (for consistency) * minor refactoring --- .../net/i2p/i2ptunnel/TunnelController.java | 3 ++ .../i2p/i2ptunnel/TunnelControllerGroup.java | 44 +++++++++++++++++-- .../i2ptunnel/WebEditPageFormGenerator.java | 6 +++ .../net/i2p/i2ptunnel/WebEditPageHelper.java | 12 ++++- .../i2p/i2ptunnel/WebStatusPageHelper.java | 12 +---- installer/java/src/i2ptunnel.config | 22 ++++++++++ installer/java/src/router.config.template | 8 ++++ 7 files changed, 92 insertions(+), 15 deletions(-) create mode 100644 installer/java/src/i2ptunnel.config diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 2b301ca5b9..7141e17384 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -55,6 +55,8 @@ public class TunnelController implements Logging { _running = false; if (createKey) createPrivateKey(); + if (getStartOnLoad()) + startTunnel(); } private void createPrivateKey() { @@ -241,6 +243,7 @@ public class TunnelController implements Logging { public String getListenPort() { return _config.getProperty("listenPort"); } public String getTargetDestination() { return _config.getProperty("targetDestination"); } public String getProxyList() { return _config.getProperty("proxyList"); } + public boolean getStartOnLoad() { return "true".equalsIgnoreCase(_config.getProperty("startOnLoad", "true")); } public boolean getIsRunning() { return _running; } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java index c542f5f18f..b821fe9f24 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java @@ -24,13 +24,36 @@ import net.i2p.util.Log; */ public class TunnelControllerGroup { private Log _log; + private static TunnelControllerGroup _instance; + static final String DEFAULT_CONFIG_FILE = "i2ptunnel.config"; + private List _controllers; - private static TunnelControllerGroup _instance = new TunnelControllerGroup(); - public static TunnelControllerGroup getInstance() { return _instance; } + private String _configFile = DEFAULT_CONFIG_FILE; - private TunnelControllerGroup() { + public static TunnelControllerGroup getInstance() { + synchronized (TunnelControllerGroup.class) { + if (_instance == null) + _instance = new TunnelControllerGroup(DEFAULT_CONFIG_FILE); + return _instance; + } + } + + private TunnelControllerGroup(String configFile) { _log = I2PAppContext.getGlobalContext().logManager().getLog(TunnelControllerGroup.class); _controllers = new ArrayList(); + _configFile = configFile; + loadControllers(_configFile); + } + + public static void main(String args[]) { + if ( (args == null) || (args.length <= 0) ) { + _instance = new TunnelControllerGroup(DEFAULT_CONFIG_FILE); + } else if (args.length == 1) { + _instance = new TunnelControllerGroup(args[0]); + } else { + System.err.println("Usage: TunnelControllerGroup [filename]"); + return; + } } /** @@ -58,6 +81,11 @@ public class TunnelControllerGroup { _log.info(i + " controllers loaded from " + configFile); } + public void reloadControllers() { + unloadControllers(); + loadControllers(_configFile); + } + /** * Stop and remove reference to all known tunnels (but dont delete any config * file or do other silly things) @@ -158,11 +186,20 @@ public class TunnelControllerGroup { return msgs; } + /** + * Save the configuration of all known tunnels to the default config + * file + * + */ + public void saveConfig() { + saveConfig(_configFile); + } /** * Save the configuration of all known tunnels to the given file * */ public void saveConfig(String configFile) { + _configFile = configFile; File cfgFile = new File(configFile); File parent = cfgFile.getParentFile(); if ( (parent != null) && (!parent.exists()) ) @@ -246,4 +283,5 @@ public class TunnelControllerGroup { * @return list of TunnelController objects */ public List getControllers() { return _controllers; } + } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java index 43cf004225..eea5e3dd38 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageFormGenerator.java @@ -281,6 +281,12 @@ class WebEditPageFormGenerator { } } buf.append("\" /><br />\n"); + buf.append("<b>Start automatically?</b> \n"); + buf.append("<input type=\"checkbox\" name=\"startOnLoad\" value=\"true\" "); + if (controller.getStartOnLoad()) + buf.append(" checked=\"true\" />\n<br />\n"); + else + buf.append(" />\n<br />\n"); } /** diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java index 22f12c3423..8fbe2f9d38 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebEditPageHelper.java @@ -38,6 +38,7 @@ public class WebEditPageHelper { private String _targetHost; private String _targetPort; private String _privKeyFile; + private boolean _startOnLoad; private boolean _privKeyGenerate; private boolean _removeConfirmed; @@ -156,6 +157,13 @@ public class WebEditPageHelper { public void setRemoveConfirm(String moo) { _removeConfirmed = true; } + /** + * If called with any value, we want this tunnel to start whenever it is + * loaded (aka right now and whenever the router is started up) + */ + public void setStartOnLoad(String moo) { + _startOnLoad = true; + } /** * Process the form and display any resulting messages @@ -248,7 +256,7 @@ public class WebEditPageHelper { return getMessages(doSave()); } private List doSave() { - TunnelControllerGroup.getInstance().saveConfig(WebStatusPageHelper.CONFIG_FILE); + TunnelControllerGroup.getInstance().saveConfig(); return TunnelControllerGroup.getInstance().clearAllMessages(); } @@ -320,6 +328,8 @@ public class WebEditPageHelper { } } + config.setProperty("startOnLoad", _startOnLoad + ""); + if (_tunnelCount != null) config.setProperty("option.tunnels.numInbound", _tunnelCount); if (_tunnelDepth != null) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebStatusPageHelper.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebStatusPageHelper.java index 75848eef6b..530e33c0c5 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebStatusPageHelper.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/WebStatusPageHelper.java @@ -17,20 +17,11 @@ public class WebStatusPageHelper { private Log _log; private String _action; private int _controllerNum; - private static boolean _configLoaded = false; - - static final String CONFIG_FILE = "i2ptunnel.cfg"; public WebStatusPageHelper() { _action = null; _controllerNum = -1; _log = I2PAppContext.getGlobalContext().logManager().getLog(WebStatusPageHelper.class); - synchronized (WebStatusPageHelper.class) { - if (!_configLoaded) { - reloadConfig(); - _configLoaded = true; - } - } } public void setAction(String action) { @@ -113,8 +104,7 @@ public class WebStatusPageHelper { return getMessages(msgs); } private String reloadConfig() { - TunnelControllerGroup.getInstance().unloadControllers(); - TunnelControllerGroup.getInstance().loadControllers(CONFIG_FILE); + TunnelControllerGroup.getInstance().reloadControllers(); return "Config reloaded"; } private String start() { diff --git a/installer/java/src/i2ptunnel.config b/installer/java/src/i2ptunnel.config new file mode 100644 index 0000000000..aec56c630d --- /dev/null +++ b/installer/java/src/i2ptunnel.config @@ -0,0 +1,22 @@ +tunnel.0.description=HTTP proxy for browsing eepsites and the web +tunnel.0.i2cpHost=localhost +tunnel.0.i2cpPort=7654 +tunnel.0.interface=127.0.0.1 +tunnel.0.listenPort=4444 +tunnel.0.name=eepProxy +tunnel.0.option.tunnels.depthInbound=2 +tunnel.0.option.tunnels.numInbound=2 +tunnel.0.proxyList=squid.i2p +tunnel.0.startOnLoad=true +tunnel.0.type=httpclient +tunnel.1.description=IRC proxy to access the anonymous irc net +tunnel.1.i2cpHost=localhost +tunnel.1.i2cpPort=7654 +tunnel.1.interface=127.0.0.1 +tunnel.1.listenPort=6668 +tunnel.1.name=ircProxy +tunnel.1.option.tunnels.depthInbound=2 +tunnel.1.option.tunnels.numInbound=2 +tunnel.1.startOnLoad=true +tunnel.1.targetDestination=irc.duck.i2p +tunnel.1.type=client diff --git a/installer/java/src/router.config.template b/installer/java/src/router.config.template index bbe7b48d1a..67d6701b1d 100644 --- a/installer/java/src/router.config.template +++ b/installer/java/src/router.config.template @@ -148,6 +148,14 @@ clientApp.1.args=-nocli -e "config localhost ##_router_i2cp_port##" -e "httpclie # -e "listen_on 0.0.0.0" # before the -e "httpclient 4444". otherwise, both of these proxies will only listen for connections on 127.0.0.1 +# The following three lines replace the clientApp.1.* lines above, for use with the new router console. +# It loads up all of the tunnels (2 minutes later, giving the router time to boot), and starts any defined with +# startOnLoad. It can be further controlled at http://localhost:7657/i2ptunnel/ +# +#clientApp.1.main=net.i2p.i2ptunnel.TunnelControllerGroup +#clientApp.1.name=Tunnels +#clientApp.1.args=i2ptunnel.config + # New router console webapp, driven by Jetty # to use, you must mkdir ./webapps/ and place the routerconsole.war file in there, # and add jetty-all.jar and routerconsole.jar in the router's classpath in the startRouter -- GitLab