From 90349ff2bf27a81ef7412f15b22769ff6ca6bd6e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 9 Aug 2017 16:36:25 +0200 Subject: Sophisticate proxy parsing and generating, fix misinterpretation if SOCKS proxies This is a quick and dirty fix; it seems a major redesign is appropriate. We should also switch to some maintained version of proxy-vole from github. This one looks halfway active: https://github.com/MarkusBernhardt/proxy-vole or maybe one of its forks... --- .../proxy/search/env/EnvProxySearchStrategy.java | 31 +++++++++++++--------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'src/main/java/com/btr/proxy/search/env/EnvProxySearchStrategy.java') diff --git a/src/main/java/com/btr/proxy/search/env/EnvProxySearchStrategy.java b/src/main/java/com/btr/proxy/search/env/EnvProxySearchStrategy.java index 37bd0a1..f7b6483 100644 --- a/src/main/java/com/btr/proxy/search/env/EnvProxySearchStrategy.java +++ b/src/main/java/com/btr/proxy/search/env/EnvProxySearchStrategy.java @@ -4,11 +4,12 @@ import java.net.ProxySelector; import java.util.Properties; import com.btr.proxy.search.ProxySearchStrategy; +import com.btr.proxy.selector.fixed.FixedProxySelector; import com.btr.proxy.selector.misc.ProtocolDispatchSelector; import com.btr.proxy.selector.whitelist.ProxyBypassListSelector; import com.btr.proxy.util.Logger; -import com.btr.proxy.util.ProxyUtil; import com.btr.proxy.util.Logger.LogLevel; +import com.btr.proxy.util.ProxyUtil; /***************************************************************************** * Reads some environment variables and extracts the proxy settings from them. @@ -96,26 +97,30 @@ public class EnvProxySearchStrategy implements ProxySearchStrategy { public ProxySelector getProxySelector() { Logger.log(getClass(), LogLevel.TRACE, "Inspecting environment variables."); + ProtocolDispatchSelector ps = new ProtocolDispatchSelector(); - // Check if http_proxy var is set. - ProxySelector httpPS = ProxyUtil.parseProxySettings(this.httpProxy); - if (httpPS == null) { - return null; + FixedProxySelector httpPS = ProxyUtil.parseProxySettings(this.httpProxy); + if (httpPS != null) { + Logger.log(getClass(), LogLevel.TRACE, "Http Proxy is {0}", this.httpProxy); + ps.setSelector("http", httpPS); } - - Logger.log(getClass(), LogLevel.TRACE, "Http Proxy is {0}", this.httpProxy); - ProtocolDispatchSelector ps = new ProtocolDispatchSelector(); - ps.setSelector("http", httpPS); - ProxySelector httpsPS = ProxyUtil.parseProxySettings(this.httpsProxy); - Logger.log(getClass(), LogLevel.TRACE, "Https Proxy is {0}", httpsPS == null? this.httpsProxy: httpsPS); - ps.setSelector("https", httpsPS != null? httpsPS: httpPS); + FixedProxySelector httpsPS = ProxyUtil.parseProxySettings(this.httpsProxy); + if (httpsPS != null) { + Logger.log(getClass(), LogLevel.TRACE, "Https Proxy is {0}", this.httpsProxy); + ps.setSelector("https", httpsPS); + } - ProxySelector ftpPS = ProxyUtil.parseProxySettings(this.ftpProxy); + FixedProxySelector ftpPS = ProxyUtil.parseProxySettings(this.ftpProxy); if (ftpPS != null) { Logger.log(getClass(), LogLevel.TRACE, "Ftp Proxy is {0}", this.ftpProxy); ps.setSelector("ftp", ftpPS); } + + ps.setFallbackSocksSelector(httpPS, httpsPS, ftpPS); + + if (ps.isEmpty()) + return null; // Wrap with white list support ProxySelector result = ps; -- cgit v1.2.3-55-g7522