Fix proxy bug

pull/594/head
jhengazuki 7 months ago
parent 15e82eec3c
commit e825702bc4
  1. 17
      catvod/src/main/java/com/github/catvod/bean/Proxy.java
  2. 10
      catvod/src/main/java/com/github/catvod/net/OkProxySelector.java

@ -24,7 +24,7 @@ public class Proxy {
@SerializedName("urls")
private List<String> urls;
public static List<java.net.Proxy> NO_PROXY = List.of(java.net.Proxy.NO_PROXY);
private List<java.net.Proxy> proxies;
public static List<Proxy> arrayFrom(JsonElement element) {
try {
@ -36,6 +36,12 @@ public class Proxy {
}
}
public void init() {
proxies = new ArrayList<>();
for (String url : getUrls()) proxies.add(create(url));
proxies.removeIf(Objects::isNull);
}
public String getName() {
return TextUtils.isEmpty(name) ? "" : name;
}
@ -48,14 +54,11 @@ public class Proxy {
return urls == null ? Collections.emptyList() : urls;
}
public List<java.net.Proxy> select() {
List<java.net.Proxy> items = new ArrayList<>();
for (String url : getUrls()) items.add(proxy(url));
items.removeIf(Objects::isNull);
return items.isEmpty() ? NO_PROXY : items;
public List<java.net.Proxy> getProxies() {
return proxies == null ? Collections.emptyList() : proxies;
}
private java.net.Proxy proxy(String url) {
private java.net.Proxy create(String url) {
Uri uri = Uri.parse(url);
if (uri.getScheme() == null || uri.getHost() == null || uri.getPort() <= 0) return null;
if (uri.getScheme().startsWith("http")) return new java.net.Proxy(java.net.Proxy.Type.HTTP, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort()));

@ -13,12 +13,15 @@ import java.util.List;
public class OkProxySelector extends ProxySelector {
private final List<Proxy> proxy;
private final ProxySelector system;
public OkProxySelector() {
proxy = new ArrayList<>();
system = ProxySelector.getDefault();
}
public synchronized void addAll(List<Proxy> items) {
for (Proxy item : items) item.init();
proxy.addAll(items);
Proxy.sort(proxy);
}
@ -29,12 +32,13 @@ public class OkProxySelector extends ProxySelector {
@Override
public List<java.net.Proxy> select(URI uri) {
if (proxy.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return Proxy.NO_PROXY;
for (Proxy item : proxy) for (String host : item.getHosts()) if (Util.containOrMatch(uri.getHost(), host)) return item.select();
return Proxy.NO_PROXY;
if (proxy.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return system.select(uri);
for (Proxy item : proxy) for (String host : item.getHosts()) if (Util.containOrMatch(uri.getHost(), host)) return item.getProxies().isEmpty() ? system.select(uri) : item.getProxies();
return system.select(uri);
}
@Override
public void connectFailed(URI uri, SocketAddress socketAddress, IOException e) {
system.connectFailed(uri, socketAddress, e);
}
}

Loading…
Cancel
Save