* 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:
@ -55,6 +55,8 @@ public class TunnelController implements Logging {
|
|||||||
_running = false;
|
_running = false;
|
||||||
if (createKey)
|
if (createKey)
|
||||||
createPrivateKey();
|
createPrivateKey();
|
||||||
|
if (getStartOnLoad())
|
||||||
|
startTunnel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createPrivateKey() {
|
private void createPrivateKey() {
|
||||||
@ -241,6 +243,7 @@ public class TunnelController implements Logging {
|
|||||||
public String getListenPort() { return _config.getProperty("listenPort"); }
|
public String getListenPort() { return _config.getProperty("listenPort"); }
|
||||||
public String getTargetDestination() { return _config.getProperty("targetDestination"); }
|
public String getTargetDestination() { return _config.getProperty("targetDestination"); }
|
||||||
public String getProxyList() { return _config.getProperty("proxyList"); }
|
public String getProxyList() { return _config.getProperty("proxyList"); }
|
||||||
|
public boolean getStartOnLoad() { return "true".equalsIgnoreCase(_config.getProperty("startOnLoad", "true")); }
|
||||||
|
|
||||||
public boolean getIsRunning() { return _running; }
|
public boolean getIsRunning() { return _running; }
|
||||||
|
|
||||||
|
@ -24,13 +24,36 @@ import net.i2p.util.Log;
|
|||||||
*/
|
*/
|
||||||
public class TunnelControllerGroup {
|
public class TunnelControllerGroup {
|
||||||
private Log _log;
|
private Log _log;
|
||||||
private List _controllers;
|
private static TunnelControllerGroup _instance;
|
||||||
private static TunnelControllerGroup _instance = new TunnelControllerGroup();
|
static final String DEFAULT_CONFIG_FILE = "i2ptunnel.config";
|
||||||
public static TunnelControllerGroup getInstance() { return _instance; }
|
|
||||||
|
|
||||||
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);
|
_log = I2PAppContext.getGlobalContext().logManager().getLog(TunnelControllerGroup.class);
|
||||||
_controllers = new ArrayList();
|
_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);
|
_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
|
* Stop and remove reference to all known tunnels (but dont delete any config
|
||||||
* file or do other silly things)
|
* file or do other silly things)
|
||||||
@ -158,11 +186,20 @@ public class TunnelControllerGroup {
|
|||||||
return msgs;
|
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
|
* Save the configuration of all known tunnels to the given file
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void saveConfig(String configFile) {
|
public void saveConfig(String configFile) {
|
||||||
|
_configFile = configFile;
|
||||||
File cfgFile = new File(configFile);
|
File cfgFile = new File(configFile);
|
||||||
File parent = cfgFile.getParentFile();
|
File parent = cfgFile.getParentFile();
|
||||||
if ( (parent != null) && (!parent.exists()) )
|
if ( (parent != null) && (!parent.exists()) )
|
||||||
@ -246,4 +283,5 @@ public class TunnelControllerGroup {
|
|||||||
* @return list of TunnelController objects
|
* @return list of TunnelController objects
|
||||||
*/
|
*/
|
||||||
public List getControllers() { return _controllers; }
|
public List getControllers() { return _controllers; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -281,6 +281,12 @@ class WebEditPageFormGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf.append("\" /><br />\n");
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,6 +38,7 @@ public class WebEditPageHelper {
|
|||||||
private String _targetHost;
|
private String _targetHost;
|
||||||
private String _targetPort;
|
private String _targetPort;
|
||||||
private String _privKeyFile;
|
private String _privKeyFile;
|
||||||
|
private boolean _startOnLoad;
|
||||||
private boolean _privKeyGenerate;
|
private boolean _privKeyGenerate;
|
||||||
private boolean _removeConfirmed;
|
private boolean _removeConfirmed;
|
||||||
|
|
||||||
@ -156,6 +157,13 @@ public class WebEditPageHelper {
|
|||||||
public void setRemoveConfirm(String moo) {
|
public void setRemoveConfirm(String moo) {
|
||||||
_removeConfirmed = true;
|
_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
|
* Process the form and display any resulting messages
|
||||||
@ -248,7 +256,7 @@ public class WebEditPageHelper {
|
|||||||
return getMessages(doSave());
|
return getMessages(doSave());
|
||||||
}
|
}
|
||||||
private List doSave() {
|
private List doSave() {
|
||||||
TunnelControllerGroup.getInstance().saveConfig(WebStatusPageHelper.CONFIG_FILE);
|
TunnelControllerGroup.getInstance().saveConfig();
|
||||||
return TunnelControllerGroup.getInstance().clearAllMessages();
|
return TunnelControllerGroup.getInstance().clearAllMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,6 +328,8 @@ public class WebEditPageHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.setProperty("startOnLoad", _startOnLoad + "");
|
||||||
|
|
||||||
if (_tunnelCount != null)
|
if (_tunnelCount != null)
|
||||||
config.setProperty("option.tunnels.numInbound", _tunnelCount);
|
config.setProperty("option.tunnels.numInbound", _tunnelCount);
|
||||||
if (_tunnelDepth != null)
|
if (_tunnelDepth != null)
|
||||||
|
@ -17,20 +17,11 @@ public class WebStatusPageHelper {
|
|||||||
private Log _log;
|
private Log _log;
|
||||||
private String _action;
|
private String _action;
|
||||||
private int _controllerNum;
|
private int _controllerNum;
|
||||||
private static boolean _configLoaded = false;
|
|
||||||
|
|
||||||
static final String CONFIG_FILE = "i2ptunnel.cfg";
|
|
||||||
|
|
||||||
public WebStatusPageHelper() {
|
public WebStatusPageHelper() {
|
||||||
_action = null;
|
_action = null;
|
||||||
_controllerNum = -1;
|
_controllerNum = -1;
|
||||||
_log = I2PAppContext.getGlobalContext().logManager().getLog(WebStatusPageHelper.class);
|
_log = I2PAppContext.getGlobalContext().logManager().getLog(WebStatusPageHelper.class);
|
||||||
synchronized (WebStatusPageHelper.class) {
|
|
||||||
if (!_configLoaded) {
|
|
||||||
reloadConfig();
|
|
||||||
_configLoaded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAction(String action) {
|
public void setAction(String action) {
|
||||||
@ -113,8 +104,7 @@ public class WebStatusPageHelper {
|
|||||||
return getMessages(msgs);
|
return getMessages(msgs);
|
||||||
}
|
}
|
||||||
private String reloadConfig() {
|
private String reloadConfig() {
|
||||||
TunnelControllerGroup.getInstance().unloadControllers();
|
TunnelControllerGroup.getInstance().reloadControllers();
|
||||||
TunnelControllerGroup.getInstance().loadControllers(CONFIG_FILE);
|
|
||||||
return "Config reloaded";
|
return "Config reloaded";
|
||||||
}
|
}
|
||||||
private String start() {
|
private String start() {
|
||||||
|
22
installer/java/src/i2ptunnel.config
Normal file
22
installer/java/src/i2ptunnel.config
Normal 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
|
@ -148,6 +148,14 @@ clientApp.1.args=-nocli -e "config localhost ##_router_i2cp_port##" -e "httpclie
|
|||||||
# -e "listen_on 0.0.0.0"
|
# -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
|
# 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
|
# New router console webapp, driven by Jetty
|
||||||
# to use, you must mkdir ./webapps/ and place the routerconsole.war file in there,
|
# 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
|
# and add jetty-all.jar and routerconsole.jar in the router's classpath in the startRouter
|
||||||
|
Reference in New Issue
Block a user