Add support for DoH
This commit is contained in:
6 files changed
+52
-3
No files matched your search
@@ -91,7 +91,8 @@ public class Settings {
|
||||
public static final String KEY_ENABLE_FINGERPRINT = "enable_fingerprint";
|
||||
public static final String KEY_READ_CACHE_SIZE = "read_cache_size";
|
||||
public static final int DEFAULT_READ_CACHE_SIZE = 160;
|
||||
public static final String KEY_BUILT_IN_HOSTS = "built_in_hosts";
|
||||
public static final String KEY_BUILT_IN_HOSTS = "built_in_hosts_2";
|
||||
public static final String KEY_DOH = "dns_over_https";
|
||||
public static final String KEY_APP_LANGUAGE = "app_language";
|
||||
private static final String TAG = Settings.class.getSimpleName();
|
||||
private static final String KEY_VERSION_CODE = "version_code";
|
||||
@@ -235,6 +236,7 @@ public class Settings {
|
||||
private static final String KEY_SAVE_CRASH_LOG = "save_crash_log";
|
||||
private static final boolean DEFAULT_SAVE_CRASH_LOG = false;
|
||||
private static final boolean DEFAULT_BUILT_IN_HOSTS = false;
|
||||
private static final boolean DEFAULT_DOH = false;
|
||||
private static final String DEFAULT_APP_LANGUAGE = "system";
|
||||
private static final String KEY_PROXY_TYPE = "proxy_type";
|
||||
private static final int DEFAULT_PROXY_TYPE = EhProxySelector.TYPE_SYSTEM;
|
||||
@@ -272,9 +274,9 @@ public class Settings {
|
||||
|
||||
private static void fixDefaultValue(Context context) {
|
||||
// Enable builtin hosts if the country is CN
|
||||
if (!sSettingsPre.contains(KEY_BUILT_IN_HOSTS)) {
|
||||
if (!sSettingsPre.contains(KEY_DOH)) {
|
||||
if ("CN".equals(Locale.getDefault().getCountry())) {
|
||||
putBuiltInHosts(true);
|
||||
putDoH(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1002,6 +1004,14 @@ public class Settings {
|
||||
putBoolean(KEY_BUILT_IN_HOSTS, value);
|
||||
}
|
||||
|
||||
public static boolean getDoH() {
|
||||
return getBoolean(KEY_DOH, DEFAULT_DOH);
|
||||
}
|
||||
|
||||
public static void putDoH(boolean value) {
|
||||
putBoolean(KEY_DOH, value);
|
||||
}
|
||||
|
||||
public static String getAppLanguage() {
|
||||
return getString(KEY_APP_LANGUAGE, DEFAULT_APP_LANGUAGE);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,9 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.dnsoverhttps.DnsOverHttps;
|
||||
|
||||
public class EhDns implements Dns {
|
||||
|
||||
@@ -53,9 +56,27 @@ public class EhDns implements Dns {
|
||||
}
|
||||
|
||||
private final Hosts hosts;
|
||||
private static DnsOverHttps dnsOverHttps;
|
||||
|
||||
public EhDns(Context context) {
|
||||
hosts = EhApplication.getHosts(context);
|
||||
DnsOverHttps.Builder builder = new DnsOverHttps.Builder()
|
||||
.client(new OkHttpClient.Builder().build())
|
||||
.url(HttpUrl.get("https://cloudflare-dns.com/dns-query"));
|
||||
try {
|
||||
builder.bootstrapDnsHosts(InetAddress.getByName("162.159.36.1"),
|
||||
InetAddress.getByName("162.159.46.1"),
|
||||
InetAddress.getByName("1.1.1.1"),
|
||||
InetAddress.getByName("1.0.0.1"),
|
||||
InetAddress.getByName("162.159.132.53"),
|
||||
InetAddress.getByName("2606:4700:4700::1111"),
|
||||
InetAddress.getByName("2606:4700:4700::1001"),
|
||||
InetAddress.getByName("2606:4700:4700::0064"),
|
||||
InetAddress.getByName("2606:4700:4700::6400"));
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
dnsOverHttps = builder.post(true).build();
|
||||
}
|
||||
|
||||
private static void put(Map<String, InetAddress> map, String host, String ip) {
|
||||
@@ -79,6 +100,12 @@ public class EhDns implements Dns {
|
||||
return Collections.singletonList(inetAddress);
|
||||
}
|
||||
}
|
||||
if (Settings.getDoH()) {
|
||||
List<InetAddress> inetAddresses = dnsOverHttps.lookup(hostname);
|
||||
if (inetAddresses != null && inetAddresses.size() > 0) {
|
||||
return inetAddresses;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
return Arrays.asList(InetAddress.getAllByName(hostname));
|
||||
|
||||
Reference in new issue
Block a user