diff --git a/rxlib/src/main/java/org/rx/Main.java b/rxlib/src/main/java/org/rx/Main.java index 048c1130..85927a0b 100644 --- a/rxlib/src/main/java/org/rx/Main.java +++ b/rxlib/src/main/java/org/rx/Main.java @@ -12,6 +12,7 @@ import org.rx.net.TransportFlags; import org.rx.net.dns.DnsClient; import org.rx.net.dns.DnsServer; +import org.rx.net.http.AuthenticProxy; import org.rx.net.rpc.Remoting; import org.rx.net.rpc.RpcClientConfig; import org.rx.net.rpc.RpcServerConfig; @@ -31,6 +32,7 @@ import java.math.BigInteger; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.Proxy; import java.util.Collections; import java.util.List; import java.util.Map; @@ -79,6 +81,7 @@ public static class RSSConf { public int waitIpInfoMillis = 1000; public int ddnsSeconds; public List ddnsDomains; + public String godaddyProxy; public String godaddyKey; public boolean pcap2socks; @@ -337,7 +340,10 @@ void ddns() { int i = ddns.indexOf("."); String domain = ddns.substring(i + 1), name = ddns.substring(0, i); log.info("ddns-{}.{}: {}->{}", name, domain, currentIps, wanIp); - IPSearcher.godaddyDns(conf.getGodaddyKey(), domain, name, wanIp.getHostAddress()); + AuthenticProxy p = conf.godaddyProxy != null + ? new AuthenticProxy(Proxy.Type.SOCKS, Sockets.parseEndpoint(conf.godaddyProxy)) + : null; + IPSearcher.godaddyDns(conf.getGodaddyKey(), domain, name, wanIp.getHostAddress(), p); } }, conf.ddnsSeconds * 1000L); } diff --git a/rxlib/src/main/java/org/rx/core/Linq.java b/rxlib/src/main/java/org/rx/core/Linq.java index a9b33809..73bf9201 100644 --- a/rxlib/src/main/java/org/rx/core/Linq.java +++ b/rxlib/src/main/java/org/rx/core/Linq.java @@ -610,8 +610,14 @@ public T[] toArray() { if (t == null) { continue; } - type = t.getClass(); - break; + if (type == null) { + type = t.getClass(); + continue; + } + if (type != t.getClass()) { + type = null; + break; + } } if (type == null) { type = Object.class; diff --git a/rxlib/src/main/java/org/rx/net/http/AuthenticProxy.java b/rxlib/src/main/java/org/rx/net/http/AuthenticProxy.java index 2dff3c5a..10189567 100644 --- a/rxlib/src/main/java/org/rx/net/http/AuthenticProxy.java +++ b/rxlib/src/main/java/org/rx/net/http/AuthenticProxy.java @@ -15,6 +15,10 @@ public class AuthenticProxy extends Proxy { @Setter private boolean directOnFail; + public AuthenticProxy(Type type, SocketAddress sa) { + this(type, sa, null, null); + } + public AuthenticProxy(Type type, SocketAddress sa, String username, String password) { super(type, sa); authenticator = (route, response) -> { diff --git a/rxlib/src/main/java/org/rx/net/support/IPSearcher.java b/rxlib/src/main/java/org/rx/net/support/IPSearcher.java index 175f10f2..27f18eba 100644 --- a/rxlib/src/main/java/org/rx/net/support/IPSearcher.java +++ b/rxlib/src/main/java/org/rx/net/support/IPSearcher.java @@ -1,19 +1,21 @@ package org.rx.net.support; +import org.rx.net.http.AuthenticProxy; import org.rx.net.http.HttpClient; public interface IPSearcher { IPSearcher DEFAULT = new ComboIPSearcher(); static String godaddyDns(String ssoKey, String domain, String name) { - return godaddyDns(ssoKey, domain, name, DEFAULT.currentIp()); + return godaddyDns(ssoKey, domain, name, DEFAULT.currentIp(), null); } - static String godaddyDns(String ssoKey, String domain, String name, String ip) { - String url = String.format("https://api.godaddy.com/v1/domains/%s/records/A/%s", domain, name); - HttpClient client = new HttpClient(); - client.requestHeaders().add("Authorization", "sso-key " + ssoKey); - return client.putJson(url, String.format("[\n" + + static String godaddyDns(String ssoKey, String domain, String name, String ip, AuthenticProxy proxy) { + String u = String.format("https://api.godaddy.com/v1/domains/%s/records/A/%s", domain, name); + HttpClient c = new HttpClient(); + c.setProxy(proxy); + c.requestHeaders().add("Authorization", "sso-key " + ssoKey); + return c.putJson(u, String.format("[\n" + " {\n" + " \"data\": \"%s\",\n" + " \"ttl\": 600\n" +