* 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
This commit is contained in:
jrandom
2004-08-14 02:03:45 +00:00
committed by zzz
parent c18fc1984d
commit 9cc96f45d0
7 changed files with 93 additions and 16 deletions

View File

@ -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; }

View File

@ -24,13 +24,36 @@ import net.i2p.util.Log;
*/
public class TunnelControllerGroup {
private Log _log;
private List _controllers;
private static TunnelControllerGroup _instance = new TunnelControllerGroup();
public static TunnelControllerGroup getInstance() { return _instance; }
private static TunnelControllerGroup _instance;
static final String DEFAULT_CONFIG_FILE = "i2ptunnel.config";
private TunnelControllerGroup() {
private List _controllers;
private String _configFile = DEFAULT_CONFIG_FILE;
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; }
}

View File

@ -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");
}
/**

View File

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

View File

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

View File

@ -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

View File

@ -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