From 8d73b2e83899535273f5c7acd3a89ea1d9b6ae17 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 5 Apr 2014 12:24:50 +0000 Subject: [PATCH] Fix changing outproxy without stopping tunnel (ticket #1164) --- .../i2ptunnel/I2PTunnelHTTPClientBase.java | 29 +++++++++++++++++++ .../net/i2p/i2ptunnel/TunnelController.java | 4 +++ 2 files changed, 33 insertions(+) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java index 9abcdd0fd..9f4b0cf04 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java @@ -16,6 +16,8 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -171,6 +173,33 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem } } + /** + * Update the outproxy list then call super. + * + * @since 0.9.12 + */ + @Override + public void optionsUpdated(I2PTunnel tunnel) { + if (getTunnel() != tunnel) + return; + Properties props = tunnel.getClientOptions(); + // see TunnelController.setSessionOptions() + String proxies = props.getProperty("proxyList"); + if (proxies != null) { + StringTokenizer tok = new StringTokenizer(proxies, ", "); + synchronized(_proxyList) { + _proxyList.clear(); + while (tok.hasMoreTokens()) + _proxyList.add(tok.nextToken().trim()); + } + } else { + synchronized(_proxyList) { + _proxyList.clear(); + } + } + super.optionsUpdated(tunnel); + } + /** * @since 0.9.4 */ diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 5936b6936..095c4171f 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -445,6 +445,10 @@ public class TunnelController implements Logging { String target = getTargetDestination(); if (target != null) opts.setProperty("targetDestination", target); + // Ditto outproxy list. Since 0.9.12. + String proxies = getProxyList(); + if (proxies != null) + opts.setProperty("proxyList", proxies); _tunnel.setClientOptions(opts); }