diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
index 827cf47f6..cece33751 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
@@ -7,8 +7,8 @@ import java.util.Map;
import net.i2p.router.Router;
import net.i2p.router.transport.FIFOBandwidthRefiller;
-import net.i2p.router.transport.TransportUtil;
import net.i2p.router.transport.TransportManager;
+import net.i2p.router.transport.TransportUtil;
import net.i2p.router.transport.udp.UDPTransport;
import net.i2p.router.web.ConfigServiceHandler;
import net.i2p.util.Addresses;
@@ -17,6 +17,7 @@ import net.i2p.util.Addresses;
* Handler to deal with form submissions from the main config form and act
* upon the values.
*
+ * Used for both /config and /confignet
*/
public class ConfigNetHandler extends FormHandler {
private String _hostname;
@@ -45,6 +46,7 @@ public class ConfigNetHandler extends FormHandler {
private String _sharePct;
private boolean _ratesOnly;
private boolean _udpDisabled;
+ private String _ipv6Mode;
private final Map changes = new HashMap();
private static final String PROP_HIDDEN = Router.PROP_HIDDEN_HIDDEN; // see Router for other choice
@@ -130,6 +132,11 @@ public class ConfigNetHandler extends FormHandler {
_udpDisabled = true;
}
+ /** @since IPv6 */
+ public void setIpv6(String mode) {
+ _ipv6Mode = mode;
+ }
+
private void recheckReachability() {
_context.commSystem().recheckReachability();
addFormNotice(_("Rechecking router reachability..."));
@@ -177,6 +184,26 @@ public class ConfigNetHandler extends FormHandler {
restartRequired = true;
}
}
+ if (_ipv6Mode != null) {
+ // take care not to set default, as it will change
+ String tcp6 = _context.getProperty(TransportUtil.NTCP_IPV6_CONFIG);
+ if (tcp6 == null)
+ tcp6 = TransportUtil.DEFAULT_IPV6_CONFIG.toConfigString();
+ String udp6 = _context.getProperty(TransportUtil.SSU_IPV6_CONFIG);
+ if (udp6 == null)
+ udp6 = TransportUtil.DEFAULT_IPV6_CONFIG.toConfigString();
+ boolean ch = false;
+ if (!_ipv6Mode.equals(tcp6)) {
+ changes.put(TransportUtil.NTCP_IPV6_CONFIG, _ipv6Mode);
+ ch = true;
+ }
+ if (!_ipv6Mode.equals(udp6)) {
+ changes.put(TransportUtil.SSU_IPV6_CONFIG, _ipv6Mode);
+ ch = true;
+ }
+ if (ch)
+ addFormNotice(_("Updating IPv6 setting"));
+ }
// NTCP Settings
// Normalize some things to make the following code a little easier...
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
index 11971fb14..1d90ba66f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
@@ -7,11 +7,15 @@ import net.i2p.data.RouterAddress;
import net.i2p.router.CommSystemFacade;
import net.i2p.router.Router;
import net.i2p.router.transport.TransportManager;
+import net.i2p.router.transport.TransportUtil;
import net.i2p.router.transport.udp.UDPTransport;
import net.i2p.util.Addresses;
+/**
+ *
+ * Used for both /config and /confignet
+ */
public class ConfigNetHelper extends HelperBase {
- public ConfigNetHelper() {}
/** copied from various private components */
public final static String PROP_I2NP_NTCP_HOSTNAME = "i2np.ntcp.hostname";
@@ -19,6 +23,7 @@ public class ConfigNetHelper extends HelperBase {
public final static String PROP_I2NP_NTCP_AUTO_PORT = "i2np.ntcp.autoport";
public final static String PROP_I2NP_NTCP_AUTO_IP = "i2np.ntcp.autoip";
private final static String CHECKED = " checked=\"checked\" ";
+
public String getUdphostname() {
return _context.getProperty(UDPTransport.PROP_EXTERNAL_HOST, "");
}
@@ -152,6 +157,23 @@ public class ConfigNetHelper extends HelperBase {
return CHECKED;
}
}
+
+ /**
+ * Combined SSU/NTCP
+ * Use SSU setting, then NTCP setting, then default
+ * @since IPv6
+ */
+ public String getIPv6Checked(String mode) {
+ String s = _context.getProperty(TransportUtil.SSU_IPV6_CONFIG);
+ if (s == null) {
+ s = _context.getProperty(TransportUtil.NTCP_IPV6_CONFIG);
+ if (s == null)
+ s = TransportUtil.DEFAULT_IPV6_CONFIG.toConfigString();
+ }
+ if (s.equals(mode))
+ return CHECKED;
+ return "";
+ }
public String[] getAddresses() {
ArrayList al = new ArrayList(Addresses.getAddresses());
diff --git a/apps/routerconsole/jsp/confignet.jsp b/apps/routerconsole/jsp/confignet.jsp
index cd1ad65f7..a97b2d49b 100644
--- a/apps/routerconsole/jsp/confignet.jsp
+++ b/apps/routerconsole/jsp/confignet.jsp
@@ -64,6 +64,18 @@
>
<%=intl._("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
(<%=intl._("Experimental")%>)
+
+ <%=intl._("IPv6 Configuration")%>:
+ >
+ <%=intl._("Disable IPv6")%>
+ >
+ <%=intl._("Enable IPv6")%>
+ >
+ <%=intl._("Prefer IPv4 over IPv6")%>
+ >
+ <%=intl._("Prefer IPv6 over IPv4")%>
+ >
+ <%=intl._("Use IPv6 only (disable IPv4)")%>
<%=intl._("UDP Configuration:")%>
<%=intl._("UDP port:")%>
" >
diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java
index b41a72e0e..f60987afe 100644
--- a/router/java/src/net/i2p/router/transport/TransportUtil.java
+++ b/router/java/src/net/i2p/router/transport/TransportUtil.java
@@ -52,7 +52,7 @@ public abstract class TransportUtil {
}
private static final Map BY_NAME = new HashMap();
- private static final IPv6Config DEFAULT_IPV6_CONFIG = IPv6Config.IPV6_DISABLED;
+ public static final IPv6Config DEFAULT_IPV6_CONFIG = IPv6Config.IPV6_DISABLED;
static {
for (IPv6Config cfg : IPv6Config.values()) {