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/selector/fixed/FixedProxySelector.java | 38 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java') diff --git a/src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java b/src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java index 2de95b5..79e0866 100644 --- a/src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java +++ b/src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java @@ -3,10 +3,12 @@ package com.btr.proxy.selector.fixed; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; +import java.net.Proxy.Type; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -19,7 +21,7 @@ import java.util.List; public class FixedProxySelector extends ProxySelector { - private final List proxyList; + private List proxyList; /************************************************************************* @@ -27,12 +29,13 @@ public class FixedProxySelector extends ProxySelector { * @param proxy the proxy to use. ************************************************************************/ - public FixedProxySelector(Proxy proxy) { + public FixedProxySelector(Proxy... proxy) { super(); - - List list = new ArrayList(1); - list.add(proxy); - this.proxyList = Collections.unmodifiableList(list); + if (proxy.length == 0) + throw new IllegalArgumentException("Empty list was passed"); + this.proxyList = Collections.unmodifiableList(Arrays.asList(proxy)); + if (this.proxyList.contains(null)) + throw new NullPointerException("List conains NULL proxy"); } /************************************************************************* @@ -53,7 +56,24 @@ public class FixedProxySelector extends ProxySelector { @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { - // Not used + final List list = this.proxyList; + if (list.size() < 2) + return; + if (!list.get(0).address().equals(sa)) + return; // We only care if the failing one is the first one in list + List newList = new ArrayList<>(list.size()); + Proxy broken = null; + for (Proxy p : list) { + if (p.address().equals(sa)) { + broken = p; + } else { + newList.add(p); + } + } + if (broken != null) { + newList.add(broken); + } + this.proxyList = Collections.unmodifiableList(newList); } /************************************************************************* @@ -66,4 +86,8 @@ public class FixedProxySelector extends ProxySelector { return this.proxyList; } + public Type getType() { + return this.proxyList.get(0).type(); + } + } -- cgit v1.2.3-55-g7522