diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt index fe77ba8172..3c47a610cf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt @@ -32,10 +32,14 @@ import eu.kanade.tachiyomi.network.PREF_DOH_360 import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD import eu.kanade.tachiyomi.network.PREF_DOH_ALIDNS import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE +import eu.kanade.tachiyomi.network.PREF_DOH_CONTROLD import eu.kanade.tachiyomi.network.PREF_DOH_DNSPOD import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE +import eu.kanade.tachiyomi.network.PREF_DOH_MULLVAD +import eu.kanade.tachiyomi.network.PREF_DOH_NJALLA import eu.kanade.tachiyomi.network.PREF_DOH_QUAD101 import eu.kanade.tachiyomi.network.PREF_DOH_QUAD9 +import eu.kanade.tachiyomi.network.PREF_DOH_SHECAN import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.setting.SettingsLegacyController @@ -269,6 +273,10 @@ class SettingsAdvancedController : SettingsLegacyController() { PREF_DOH_DNSPOD to "DNSPod", PREF_DOH_360 to "360", PREF_DOH_QUAD101 to "Quad 101", + PREF_DOH_MULLVAD to "Mullvad", + PREF_DOH_CONTROLD to "Control D", + PREF_DOH_NJALLA to "Njalla", + PREF_DOH_SHECAN to "Shecan", ) entries = entryMap.values.toList() entryValues = entryMap.keys.toList() diff --git a/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/DohProviders.kt b/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/DohProviders.kt index f5ab389d63..d41103a16d 100644 --- a/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/DohProviders.kt +++ b/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/DohProviders.kt @@ -1,9 +1,9 @@ package eu.kanade.tachiyomi.network +import java.net.InetAddress import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.dnsoverhttps.DnsOverHttps -import java.net.InetAddress /** * Based on https://github.com/square/okhttp/blob/ef5d0c83f7bbd3a0c0534e7ca23cbc4ee7550f3b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DohProviders.java @@ -17,6 +17,10 @@ const val PREF_DOH_ALIDNS = 5 const val PREF_DOH_DNSPOD = 6 const val PREF_DOH_360 = 7 const val PREF_DOH_QUAD101 = 8 +const val PREF_DOH_MULLVAD = 9 +const val PREF_DOH_CONTROLD = 10 +const val PREF_DOH_NJALLA = 11 +const val PREF_DOH_SHECAN = 12 fun OkHttpClient.Builder.dohCloudflare() = dns( DnsOverHttps.Builder().client(build()) @@ -120,3 +124,62 @@ fun OkHttpClient.Builder.dohQuad101() = dns( ) .build(), ) + +/* + * Mullvad DoH + * without ad blocking option + * Source: https://mullvad.net/en/help/dns-over-https-and-dns-over-tls + */ +fun OkHttpClient.Builder.dohMullvad() = dns( + DnsOverHttps.Builder().client(build()) + .url(" https://dns.mullvad.net/dns-query".toHttpUrl()) + .bootstrapDnsHosts( + InetAddress.getByName("194.242.2.2"), + InetAddress.getByName("2a07:e340::2"), + ) + .build(), +) + +/* + * Control D + * unfiltered option + * Source: https://controld.com/free-dns/? + */ +fun OkHttpClient.Builder.dohControlD() = dns( + DnsOverHttps.Builder().client(build()) + .url("https://freedns.controld.com/p0".toHttpUrl()) + .bootstrapDnsHosts( + InetAddress.getByName("76.76.2.0"), + InetAddress.getByName("76.76.10.0"), + InetAddress.getByName("2606:1a40::"), + InetAddress.getByName("2606:1a40:1::"), + ) + .build(), +) + +/* + * Njalla + * Non logging and uncensored + */ +fun OkHttpClient.Builder.dohNajalla() = dns( + DnsOverHttps.Builder().client(build()) + .url("https://dns.njal.la/dns-query".toHttpUrl()) + .bootstrapDnsHosts( + InetAddress.getByName("95.215.19.53"), + InetAddress.getByName("2001:67c:2354:2::53"), + ) + .build(), +) + +/** + * Source: https://shecan.ir/ + */ +fun OkHttpClient.Builder.dohShecan() = dns( + DnsOverHttps.Builder().client(build()) + .url("https://free.shecan.ir/dns-query".toHttpUrl()) + .bootstrapDnsHosts( + InetAddress.getByName("178.22.122.100"), + InetAddress.getByName("185.51.200.2"), + ) + .build(), +) diff --git a/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt b/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt index f7681d42e9..7b22ac36fb 100644 --- a/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/core/src/androidMain/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -36,17 +36,25 @@ class NetworkHelper( .addNetworkInterceptor(IgnoreGzipInterceptor()) .addNetworkInterceptor(BrotliInterceptor) + block(builder) + builder.addInterceptor( CloudflareInterceptor(context, cookieJar, ::defaultUserAgent), ) - block(builder) - when (preferences.dohProvider().get()) { PREF_DOH_CLOUDFLARE -> builder.dohCloudflare() PREF_DOH_GOOGLE -> builder.dohGoogle() PREF_DOH_ADGUARD -> builder.dohAdGuard() PREF_DOH_QUAD9 -> builder.dohQuad9() + PREF_DOH_ALIDNS -> builder.dohAliDNS() + PREF_DOH_DNSPOD -> builder.dohDNSPod() + PREF_DOH_360 -> builder.doh360() + PREF_DOH_QUAD101 -> builder.dohQuad101() + PREF_DOH_MULLVAD -> builder.dohMullvad() + PREF_DOH_CONTROLD -> builder.dohControlD() + PREF_DOH_NJALLA -> builder.dohNajalla() + PREF_DOH_SHECAN -> builder.dohShecan() } builder.build()