diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java index 7d05af772..eb73df0ad 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java +++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java @@ -33,6 +33,7 @@ public class I2PSnarkUtil { private I2PSocketManager _manager; private boolean _configured; private Set _shitlist; + private int _maxUploaders; private I2PSnarkUtil() { _context = I2PAppContext.getGlobalContext(); @@ -42,6 +43,7 @@ public class I2PSnarkUtil { setI2CPConfig("127.0.0.1", 7654, null); _shitlist = new HashSet(64); _configured = false; + _maxUploaders = Snark.MAX_TOTAL_UPLOADERS; } /** @@ -72,12 +74,18 @@ public class I2PSnarkUtil { _configured = true; } + public void setMaxUploaders(int limit) { + _maxUploaders = limit; + _configured = true; + } + public String getI2CPHost() { return _i2cpHost; } public int getI2CPPort() { return _i2cpPort; } public Map getI2CPOptions() { return _opts; } public String getEepProxyHost() { return _proxyHost; } public int getEepProxyPort() { return _proxyPort; } public boolean getEepProxySet() { return _shouldProxy; } + public int getMaxUploaders() { return _maxUploaders; } /** * Connect to the router, if we aren't already diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index 5e01d0264..dea8ea758 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -755,10 +755,10 @@ public class Snark public void torrentComplete(Snark snark); } - /** Maintain a total uploader cap - ** This should be configurable + /** Maintain a configurable total uploader cap */ - private final static int MAX_TOTAL_UPLOADERS = 10; + final static int MIN_TOTAL_UPLOADERS = 4; + final static int MAX_TOTAL_UPLOADERS = 10; public static boolean overUploadLimit(int uploaders) { PeerCoordinatorSet coordinators = PeerCoordinatorSet.instance(); if (coordinators == null || uploaders <= 0) @@ -769,7 +769,8 @@ public class Snark if (!c.halted()) totalUploaders += c.uploaders; } - Snark.debug("Total uploaders: " + totalUploaders, Snark.DEBUG); - return totalUploaders > MAX_TOTAL_UPLOADERS; + int limit = I2PSnarkUtil.instance().getMaxUploaders(); + Snark.debug("Total uploaders: " + totalUploaders + " Limit: " + limit, Snark.DEBUG); + return totalUploaders > limit; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 382517854..189792508 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -28,6 +28,7 @@ public class SnarkManager implements Snark.CompleteListener { 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_UPLOADERS_TOTAL = "i2psnark.uploaders.total"; public static final String PROP_DIR = "i2psnark.dir"; public static final String PROP_AUTO_START = "i2snark.autoStart"; @@ -99,6 +100,8 @@ public class SnarkManager implements Snark.CompleteListener { _config.setProperty(PROP_EEP_HOST, "localhost"); 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)) _config.setProperty(PROP_DIR, "i2psnark"); if (!_config.containsKey(PROP_AUTO_START)) @@ -129,6 +132,7 @@ public class SnarkManager implements Snark.CompleteListener { int eepPort = getInt(PROP_EEP_PORT, 4444); if (eepHost != null) I2PSnarkUtil.instance().setProxy(eepHost, eepPort); + I2PSnarkUtil.instance().setMaxUploaders(getInt(PROP_UPLOADERS_TOTAL, Snark.MAX_TOTAL_UPLOADERS)); getDataDir().mkdirs(); } @@ -144,7 +148,8 @@ public class SnarkManager implements Snark.CompleteListener { } public void updateConfig(String dataDir, boolean autoStart, String seedPct, String eepHost, - String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts) { + String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts, + String upLimit) { boolean changed = false; if (eepHost != null) { int port = I2PSnarkUtil.instance().getEepProxyPort(); @@ -159,6 +164,20 @@ public class SnarkManager implements Snark.CompleteListener { addMessage("EepProxy location changed to " + eepHost + ":" + port); } } + if (upLimit != null) { + int limit = I2PSnarkUtil.instance().getMaxUploaders(); + try { limit = Integer.parseInt(upLimit); } catch (NumberFormatException nfe) {} + if ( limit != I2PSnarkUtil.instance().getEepProxyPort()) { + if ( limit >= Snark.MIN_TOTAL_UPLOADERS ) { + I2PSnarkUtil.instance().setMaxUploaders(limit); + changed = true; + _config.setProperty(PROP_UPLOADERS_TOTAL, "" + limit); + addMessage("Total uploaders limit changed to " + limit); + } else { + addMessage("Minimum total uploaders limit is " + Snark.MIN_TOTAL_UPLOADERS); + } + } + } if (i2cpHost != null) { int oldI2CPPort = I2PSnarkUtil.instance().getI2CPPort(); String oldI2CPHost = I2PSnarkUtil.instance().getI2CPHost(); 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 85ce9148d..07174bd5a 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -271,7 +271,8 @@ public class I2PSnarkServlet extends HttpServlet { String i2cpHost = req.getParameter("i2cpHost"); String i2cpPort = req.getParameter("i2cpPort"); String i2cpOpts = req.getParameter("i2cpOpts"); - _manager.updateConfig(dataDir, autoStart, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts); + String upLimit = req.getParameter("upLimit"); + _manager.updateConfig(dataDir, autoStart, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit); } else if ("Create torrent".equals(action)) { String baseData = req.getParameter("baseFile"); if (baseData != null) { @@ -607,7 +608,7 @@ public class I2PSnarkServlet extends HttpServlet { String uri = req.getRequestURI(); String dataDir = _manager.getDataDir().getAbsolutePath(); boolean autoStart = _manager.shouldAutoStart(); - int seedPct = 0; + //int seedPct = 0; out.write("