From 626daeb86e56659d15b8541d23ab38de781cfa21 Mon Sep 17 00:00:00 2001 From: dg2-new Date: Mon, 28 Oct 2013 19:15:46 +0000 Subject: [PATCH] * I2PTunnel: Enable persistent keying for SOCKS tunnels (ticket #1088) --- .../java/src/net/i2p/i2ptunnel/I2PTunnel.java | 11 +++++++---- .../java/src/net/i2p/i2ptunnel/TunnelController.java | 7 ++++++- apps/i2ptunnel/jsp/editClient.jsp | 2 +- router/java/src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 296691b9d..1bf2ead5f 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -954,12 +954,12 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging { * "openSOCKSTunnelResult" = "ok" or "error" after the client tunnel has * started. * - * @param args {portNumber [, sharedClient]} + * @param args {portNumber [, sharedClient]} or (portNumber, ignored (false), privKeyFile) * @param l logger to receive events and output * @throws IllegalArgumentException on config problem */ public void runSOCKSTunnel(String args[], Logging l) { - if (args.length >= 1 && args.length <= 2) { + if (args.length >= 1 && args.length <= 3) { int _port = -1; try { _port = Integer.parseInt(args[0]); @@ -972,12 +972,15 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging { throw new IllegalArgumentException(getPrefix() + "Bad port " + args[0]); boolean isShared = false; - if (args.length > 1) + if (args.length == 2) isShared = Boolean.parseBoolean(args[1].trim()); ownDest = !isShared; + String privateKeyFile = null; + if (args.length == 3) + privateKeyFile = args[2]; try { - I2PTunnelTask task = new I2PSOCKSTunnel(_port, l, ownDest, this, this, null); + I2PTunnelTask task = new I2PSOCKSTunnel(_port, l, ownDest, this, this, privateKeyFile); addtask(task); notifyEvent("sockstunnelTaskId", Integer.valueOf(task.getId())); } catch (IllegalArgumentException iae) { diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 5937a9512..821d325cd 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -263,7 +263,12 @@ public class TunnelController implements Logging { if (!props.containsKey(I2PSOCKSTunnel.PROP_PROXY_DEFAULT)) props.setProperty(I2PSOCKSTunnel.PROP_PROXY_DEFAULT, proxyList); } - _tunnel.runSOCKSTunnel(new String[] { listenPort, sharedClient }, this); + if (getPersistentClientKey()) { + String privKeyFile = getPrivKeyFile(); + _tunnel.runSOCKSTunnel(new String[] { listenPort, "false", privKeyFile }, this); + } else { + _tunnel.runSOCKSTunnel(new String[] { listenPort, sharedClient }, this); + } } /** @since 0.7.12 */ diff --git a/apps/i2ptunnel/jsp/editClient.jsp b/apps/i2ptunnel/jsp/editClient.jsp index 8a22db8d0..cc98b6b58 100644 --- a/apps/i2ptunnel/jsp/editClient.jsp +++ b/apps/i2ptunnel/jsp/editClient.jsp @@ -399,7 +399,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
- <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %> + <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %>