summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/btr/proxy/selector/fixed/FixedProxySelector.java
diff options
context:
space:
mode:
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.java38
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();
+ }
+
}