From b8b272a5b8e3de3cd1d9e96121160deb644aa74e Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Wed, 11 Mar 2015 10:57:07 +0000
Subject: [PATCH] Better multi-mode setters

---
 .../net/i2p/i2ptunnel/ui/TunnelConfig.java    | 46 ++++++++++++++++---
 .../src/net/i2p/i2ptunnel/web/IndexBean.java  | 12 ++++-
 2 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
index 81202a5db8..c4f0b18fe3 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
@@ -223,11 +223,28 @@ public class TunnelConfig {
     protected static final String PROP_ENABLE_ACCESS_LIST = "i2cp.enableAccessList";
     protected static final String PROP_ENABLE_BLACKLIST = "i2cp.enableBlackList";
 
-    public void setAccessMode(String val) {
-        if ("1".equals(val))
+    /**
+     * Controls how other tunnels are checked for access.
+     * <p/>
+     * The list used for whitelisting/blacklisting can be set with
+     * {@link #setAccessList(String)}.
+     *
+     * @param mode 0 for no control, 1 for whitelist, 2 for blacklist 
+     */
+    public void setAccessMode(int mode) {
+        switch (mode) {
+        case 1:
             _booleanOptions.add(PROP_ENABLE_ACCESS_LIST);
-        else if ("2".equals(val))
+            _booleanOptions.remove(PROP_ENABLE_BLACKLIST);
+            break;
+        case 2:
+            _booleanOptions.remove(PROP_ENABLE_ACCESS_LIST);
             _booleanOptions.add(PROP_ENABLE_BLACKLIST);
+            break;
+        default:
+            _booleanOptions.remove(PROP_ENABLE_ACCESS_LIST);
+            _booleanOptions.remove(PROP_ENABLE_BLACKLIST);
+        }
     }
 
     public void setDelayOpen(boolean val) {
@@ -236,11 +253,28 @@ public class TunnelConfig {
         else
             _booleanOptions.remove("i2cp.delayOpen");
     }
-    public void setNewDest(String val) {
-        if ("1".equals(val))
+
+    /**
+     * Controls how ephemeral the I2P Destination of a client tunnel is.
+     * <p/>
+     * If {@link #setClose(boolean)} is set to true then mode 1 == mode 0.
+     * 
+     * @param mode 0 for new dest on restart, 1 for new dest on resume from idle, 2 for persistent key
+     */
+    public void setNewDest(int mode) {
+        switch (mode) {
+        case 1:
             _booleanOptions.add("i2cp.newDestOnResume");
-        else if ("2".equals(val))
+            _booleanOptions.remove("persistentClientKey");
+            break;
+        case 2:
+            _booleanOptions.remove("i2cp.newDestOnResume");
             _booleanOptions.add("persistentClientKey");
+            break;
+        default:
+            _booleanOptions.remove("i2cp.newDestOnResume");
+            _booleanOptions.remove("persistentClientKey");
+        }
     }
 
     public void setReduceTime(int val) {
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
index 5cecb3afba..fa440033cb 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
@@ -864,14 +864,22 @@ public class IndexBean {
     protected static final String PROP_ENABLE_BLACKLIST = "i2cp.enableBlackList";
 
     public void setAccessMode(String val) {
-        _config.setAccessMode(val);
+        if (val != null) {
+            try {
+                _config.setAccessMode(Integer.parseInt(val.trim()));
+            } catch (NumberFormatException nfe) {}
+        }
     }
 
     public void setDelayOpen(String moo) {
         _config.setDelayOpen(true);
     }
     public void setNewDest(String val) {
-        _config.setNewDest(val);
+        if (val != null) {
+            try {
+                _config.setNewDest(Integer.parseInt(val.trim()));
+            } catch (NumberFormatException nfe) {}
+        }
     }
 
     public void setReduceTime(String val) {
-- 
GitLab