From c2b73d9fb562c16d0f0e5608cc306132cc991eca Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 10 May 2010 14:13:55 +0000 Subject: [PATCH] * i2psnark: - Add tunnel config dropdowns - Comment out old proxy stuff --- .../src/org/klomp/snark/I2PSnarkUtil.java | 8 ++- .../java/src/org/klomp/snark/Snark.java | 16 ++--- .../src/org/klomp/snark/SnarkManager.java | 53 +++++++------- .../org/klomp/snark/web/I2PSnarkServlet.java | 71 ++++++++++++++++++- 4 files changed, 110 insertions(+), 38 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java index 35139420c2..a82debab36 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java +++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java @@ -45,7 +45,7 @@ public class I2PSnarkUtil { private int _proxyPort; private String _i2cpHost; private int _i2cpPort; - private Map _opts; + private Map<String, String> _opts; private I2PSocketManager _manager; private boolean _configured; private final Set<Hash> _shitlist; @@ -65,7 +65,7 @@ public class I2PSnarkUtil { _context = ctx; _log = _context.logManager().getLog(Snark.class); _opts = new HashMap(); - setProxy("127.0.0.1", 4444); + //setProxy("127.0.0.1", 4444); setI2CPConfig("127.0.0.1", 7654, null); _shitlist = new ConcurrentHashSet(); _configured = false; @@ -85,6 +85,7 @@ public class I2PSnarkUtil { * host for no proxying) * */ +/***** public void setProxy(String host, int port) { if ( (host != null) && (port > 0) ) { _shouldProxy = true; @@ -97,6 +98,7 @@ public class I2PSnarkUtil { } _configured = true; } +******/ public boolean configured() { return _configured; } @@ -128,7 +130,7 @@ public class I2PSnarkUtil { public String getI2CPHost() { return _i2cpHost; } public int getI2CPPort() { return _i2cpPort; } - public Map getI2CPOptions() { return _opts; } + public Map<String, String> getI2CPOptions() { return _opts; } public String getEepProxyHost() { return _proxyHost; } public int getEepProxyPort() { return _proxyPort; } public boolean getEepProxySet() { return _shouldProxy; } diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index 217cc00a77..12c299840e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -618,14 +618,14 @@ public class Snark command_interpreter = false; i++; } - else if (args[i].equals("--eepproxy")) - { - String proxyHost = args[i+1]; - String proxyPort = args[i+2]; - if (!configured) - util.setProxy(proxyHost, Integer.parseInt(proxyPort)); - i += 3; - } + //else if (args[i].equals("--eepproxy")) + // { + // String proxyHost = args[i+1]; + // String proxyPort = args[i+2]; + // if (!configured) + // util.setProxy(proxyHost, Integer.parseInt(proxyPort)); + // i += 3; + // } else if (args[i].equals("--i2cp")) { String i2cpHost = args[i+1]; diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 33f74707ec..f93f009ee5 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -46,8 +46,8 @@ public class SnarkManager implements Snark.CompleteListener { public static final String PROP_I2CP_HOST = "i2psnark.i2cpHost"; public static final String PROP_I2CP_PORT = "i2psnark.i2cpPort"; public static final String PROP_I2CP_OPTS = "i2psnark.i2cpOptions"; - public static final String PROP_EEP_HOST = "i2psnark.eepHost"; - public static final String PROP_EEP_PORT = "i2psnark.eepPort"; + //public static final String PROP_EEP_HOST = "i2psnark.eepHost"; + //public static final String PROP_EEP_PORT = "i2psnark.eepPort"; public static final String PROP_UPLOADERS_TOTAL = "i2psnark.uploaders.total"; public static final String PROP_UPBW_MAX = "i2psnark.upbw.max"; public static final String PROP_DIR = "i2psnark.dir"; @@ -157,10 +157,10 @@ public class SnarkManager implements Snark.CompleteListener { _config.setProperty(PROP_I2CP_PORT, "7654"); if (!_config.containsKey(PROP_I2CP_OPTS)) _config.setProperty(PROP_I2CP_OPTS, "inbound.length=2 inbound.lengthVariance=0 outbound.length=2 outbound.lengthVariance=0 inbound.quantity=3 outbound.quantity=3"); - if (!_config.containsKey(PROP_EEP_HOST)) - _config.setProperty(PROP_EEP_HOST, "127.0.0.1"); - if (!_config.containsKey(PROP_EEP_PORT)) - _config.setProperty(PROP_EEP_PORT, "4444"); + //if (!_config.containsKey(PROP_EEP_HOST)) + // _config.setProperty(PROP_EEP_HOST, "127.0.0.1"); + //if (!_config.containsKey(PROP_EEP_PORT)) + // _config.setProperty(PROP_EEP_PORT, "4444"); if (!_config.containsKey(PROP_UPLOADERS_TOTAL)) _config.setProperty(PROP_UPLOADERS_TOTAL, "" + Snark.MAX_TOTAL_UPLOADERS); if (!_config.containsKey(PROP_DIR)) @@ -198,10 +198,10 @@ public class SnarkManager implements Snark.CompleteListener { _log.debug("Configuring with I2CP options " + i2cpOpts); } //I2PSnarkUtil.instance().setI2CPConfig("66.111.51.110", 7654, new Properties()); - String eepHost = _config.getProperty(PROP_EEP_HOST); - int eepPort = getInt(PROP_EEP_PORT, 4444); - if (eepHost != null) - _util.setProxy(eepHost, eepPort); + //String eepHost = _config.getProperty(PROP_EEP_HOST); + //int eepPort = getInt(PROP_EEP_PORT, 4444); + //if (eepHost != null) + // _util.setProxy(eepHost, eepPort); _util.setMaxUploaders(getInt(PROP_UPLOADERS_TOTAL, Snark.MAX_TOTAL_UPLOADERS)); _util.setMaxUpBW(getInt(PROP_UPBW_MAX, DEFAULT_MAX_UP_BW)); String ot = _config.getProperty(I2PSnarkUtil.PROP_OPENTRACKERS); @@ -226,20 +226,20 @@ public class SnarkManager implements Snark.CompleteListener { String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts, String upLimit, String upBW, boolean useOpenTrackers, String openTrackers) { boolean changed = false; - if (eepHost != null) { - // unused, we use socket eepget - int port = _util.getEepProxyPort(); - try { port = Integer.parseInt(eepPort); } catch (NumberFormatException nfe) {} - String host = _util.getEepProxyHost(); - if ( (eepHost.trim().length() > 0) && (port > 0) && - ((!host.equals(eepHost) || (port != _util.getEepProxyPort()) )) ) { - _util.setProxy(eepHost, port); - changed = true; - _config.setProperty(PROP_EEP_HOST, eepHost); - _config.setProperty(PROP_EEP_PORT, eepPort+""); - addMessage("EepProxy location changed to " + eepHost + ":" + port); - } - } + //if (eepHost != null) { + // // unused, we use socket eepget + // int port = _util.getEepProxyPort(); + // try { port = Integer.parseInt(eepPort); } catch (NumberFormatException nfe) {} + // String host = _util.getEepProxyHost(); + // if ( (eepHost.trim().length() > 0) && (port > 0) && + // ((!host.equals(eepHost) || (port != _util.getEepProxyPort()) )) ) { + // _util.setProxy(eepHost, port); + // changed = true; + // _config.setProperty(PROP_EEP_HOST, eepHost); + // _config.setProperty(PROP_EEP_PORT, eepPort+""); + // addMessage("EepProxy location changed to " + eepHost + ":" + port); + // } + //} if (upLimit != null) { int limit = _util.getMaxUploaders(); try { limit = Integer.parseInt(upLimit); } catch (NumberFormatException nfe) {} @@ -308,7 +308,10 @@ public class SnarkManager implements Snark.CompleteListener { } } if (snarksActive) { - addMessage(_("Cannot change the I2CP settings while torrents are active")); + Properties p = new Properties(); + p.putAll(opts); + _util.setI2CPConfig(i2cpHost, port, p); + addMessage(_("I2CP and tunnel changes will take effect after stopping all torrents")); _log.debug("i2cp host [" + i2cpHost + "] i2cp port " + port + " opts [" + opts + "] oldOpts [" + oldOpts + "]"); } else { diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 465f4f908e..0cb19835a7 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -419,7 +419,7 @@ public class I2PSnarkServlet extends Default { String eepPort = req.getParameter("eepPort"); String i2cpHost = req.getParameter("i2cpHost"); String i2cpPort = req.getParameter("i2cpPort"); - String i2cpOpts = req.getParameter("i2cpOpts"); + String i2cpOpts = buildI2CPOpts(req); String upLimit = req.getParameter("upLimit"); String upBW = req.getParameter("upBW"); boolean useOpenTrackers = req.getParameter("useOpenTrackers") != null; @@ -486,6 +486,23 @@ public class I2PSnarkServlet extends Default { } } + private static final String iopts[] = {"inbound.length", "inbound.quantity", + "outbound.length", "outbound.quantity" }; + + /** put the individual i2cp selections into the option string */ + private static String buildI2CPOpts(HttpServletRequest req) { + StringBuilder buf = new StringBuilder(128); + String p = req.getParameter("i2cpOpts"); + if (p != null) + buf.append(p); + for (int i = 0; i < iopts.length; i++) { + p = req.getParameter(iopts[i]); + if (p != null) + buf.append(' ').append(iopts[i]).append('=').append(p); + } + return buf.toString(); + } + /** * Sort alphabetically in current locale, ignore case, ignore leading "the " * (I guess this is worth it, a lot of torrents start with "The " @@ -982,6 +999,20 @@ public class I2PSnarkServlet extends Default { //out.write("port: <input type=\"text\" name=\"eepPort\" value=\"" // + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n"); + Map<String, String> options = new TreeMap(_manager.util().getI2CPOptions()); + out.write("<tr><td>"); + out.write(_("Inbound Settings")); + out.write(":<td>"); + out.write(renderOptions(1, 6, options.remove("inbound.quantity"), "inbound.quantity", TUNNEL)); + out.write(" "); + out.write(renderOptions(0, 4, options.remove("inbound.length"), "inbound.length", HOP)); + out.write("<tr><td>"); + out.write(_("Outbound Settings")); + out.write(":<td>"); + out.write(renderOptions(1, 6, options.remove("outbound.quantity"), "outbound.quantity", TUNNEL)); + out.write(" "); + out.write(renderOptions(0, 4, options.remove("outbound.length"), "outbound.length", HOP)); + out.write("<tr><td>"); out.write(_("I2CP host")); out.write(": <td><input type=\"text\" name=\"i2cpHost\" value=\"" @@ -993,7 +1024,6 @@ public class I2PSnarkServlet extends Default { + _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" > <br>\n"); StringBuilder opts = new StringBuilder(64); - Map options = new TreeMap(_manager.util().getI2CPOptions()); for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) { Map.Entry entry = (Map.Entry)iter.next(); String key = (String)entry.getKey(); @@ -1012,6 +1042,38 @@ public class I2PSnarkServlet extends Default { out.write("</form></div>"); } + /** copied from ConfigTunnelsHelper */ + private static final String HOP = _x("hop"); + private static final String TUNNEL = _x("tunnel"); + /** dummies for translation */ + private static final String HOPS = _x("hops"); + private static final String TUNNELS = _x("tunnels"); + + /** modded from ConfigTunnelsHelper */ + private String renderOptions(int min, int max, String strNow, String selName, String name) { + int now = 2; + try { + now = Integer.parseInt(strNow); + } catch (Throwable t) {} + StringBuilder buf = new StringBuilder(128); + buf.append("<select name=\"").append(selName).append("\">\n"); + for (int i = min; i <= max; i++) { + buf.append("<option value=\"").append(i).append("\" "); + if (i == now) + buf.append("selected=\"true\" "); + String pname; + // pluralize and then translate + if (i != 1 && i != -1) + pname = name + 's'; + else + pname = name; + buf.append(">").append(i).append(' ').append(_(pname)); + buf.append("</option>\n"); + } + buf.append("</select>\n"); + return buf.toString(); + } + /** translate */ private String _(String s) { return _manager.util().getString(s); @@ -1022,6 +1084,11 @@ public class I2PSnarkServlet extends Default { return _manager.util().getString(s, o); } + /** dummy for tagging */ + private static String _x(String s) { + return s; + } + // rounding makes us look faster :) private String formatSize(long bytes) { if (bytes < 5*1024) -- GitLab