diff options
author | Simon Rettberg | 2017-08-09 16:36:25 +0200 |
---|---|---|
committer | Simon Rettberg | 2017-08-09 16:36:25 +0200 |
commit | 90349ff2bf27a81ef7412f15b22769ff6ca6bd6e (patch) | |
tree | f518e1d90917377039017078359f6d2574d224cb /src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java | |
parent | Rewrite proxy string parsing, regex was a bit wonky (diff) | |
download | proxy-vole-90349ff2bf27a81ef7412f15b22769ff6ca6bd6e.tar.gz proxy-vole-90349ff2bf27a81ef7412f15b22769ff6ca6bd6e.tar.xz proxy-vole-90349ff2bf27a81ef7412f15b22769ff6ca6bd6e.zip |
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...
Diffstat (limited to 'src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java')
-rw-r--r-- | src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java | 38 |
1 files changed, 31 insertions, 7 deletions
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<Proxy> proxyList; + private List<Proxy> 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<Proxy> list = new ArrayList<Proxy>(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<Proxy> 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<Proxy> 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(); + } + } |