diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index ab63ef324..929797f66 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -3,13 +3,13 @@ import cn.hutool.core.util.RuntimeUtil apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -def verName = "7.4.2-rc07" +def verName = "7.4.2-rc08" if (System.getenv("DEBUG_BUILD") == "true") { verName += "-" + RuntimeUtil.execForStr("git log --pretty=format:'%h' -n 1)") } -def verCode = 188 +def verCode = 190 def officialVer = "7.4.2" def officialCode = 2227 @@ -84,7 +84,6 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' implementation "com.squareup.okhttp3:okhttp:$okHttpVersion" - implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okHttpVersion" implementation 'dnsjava:dnsjava:3.3.1' implementation 'org.dizitart:nitrite:3.4.3' diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java index a5cb72683..71cddc98b 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java @@ -864,7 +864,7 @@ public class ConnectionsManager extends BaseController { String domain = native_isTestBackend(currentAccount) != 0 ? "tapv3.stel.com" : AccountInstance.getInstance(currentAccount).getMessagesController().dcDomainName; try { - ArrayList arrayList = DnsFactory.Companion.getTxts(domain); + List arrayList = DnsFactory.Companion.getTxts(domain); Collections.sort(arrayList, (o1, o2) -> { int l1 = o1.length(); int l2 = o2.length(); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/DnsFactory.kt b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/DnsFactory.kt index 4f0de0958..cfdcb3de9 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/DnsFactory.kt +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/DnsFactory.kt @@ -1,108 +1,80 @@ package tw.nekomimi.nekogram.utils -import android.os.Build +import cn.hutool.core.util.ArrayUtil import okhttp3.Dns -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.dnsoverhttps.DnsOverHttps import org.telegram.messenger.FileLog import org.telegram.tgnet.ConnectionsManager -import org.xbill.DNS.DohResolver -import org.xbill.DNS.Lookup -import org.xbill.DNS.TXTRecord -import org.xbill.DNS.Type +import org.xbill.DNS.* import java.net.InetAddress import java.util.* -import java.util.concurrent.TimeUnit import kotlin.collections.ArrayList + open class DnsFactory : Dns { + val providers = LinkedList() + companion object : DnsFactory() { init { - if (Build.VERSION.SDK_INT >= 21) { - - addProvider("https://mozilla.cloudflare-dns.com/dns-query") - addProvider("https://dns.google/dns-query") - addProvider("https://dns.twnic.tw/dns-query") - addProvider("https://dns.adguard.com/dns-query") - - } + addProvider("https://dns.twnic.tw/dns-query") + addProvider("https://mozilla.cloudflare-dns.com/dns-query") + addProvider("https://dns.google/dns-query") } } - val providers = LinkedList() - val dnsJavaProviders = LinkedList() - val client = OkHttpClient.Builder().connectTimeout(3,TimeUnit.SECONDS).build() + fun addProvider(url: String) = providers.add(DohResolver(url)) - fun addProvider(url: String) { + override fun lookup(domain: String): List { - providers.add(DnsOverHttps.Builder() - .client(client) - .url(url.toHttpUrl()) - .includeIPv6(ConnectionsManager.useIpv6Address()) - .build()) + FileLog.d("Lookup $domain") + + for (provider in providers) { + FileLog.d("Provider ${provider.uriTemplate}") + + val lookup = Lookup(Name.fromConstantString(domain), if (!ConnectionsManager.useIpv6Address()) Type.A else Type.AAAA) + lookup.setSearchPath(* emptyArray()) + lookup.setCache(null) + lookup.setResolver(provider) + lookup.run() + + if (lookup.result != Lookup.SUCCESSFUL) continue + + FileLog.d("Results: " + ArrayUtil.toString(lookup.answers)) + return lookup.answers.map { (it as? ARecord)?.address ?: (it as AAAARecord).address } + } + + runCatching { return InetAddress.getAllByName(domain).toList() } + return listOf() } - override fun lookup(hostname: String): List { + fun getTxts(domain: String): List { - providers.forEach { provider -> + FileLog.d("Lookup $domain for txts") - runCatching { - return provider.lookup(hostname) - }.onFailure { - FileLog.e(it) - } + for (provider in providers) { + FileLog.d("Provider ${provider.uriTemplate}") - } + val lookup = Lookup(Name.fromConstantString(domain), Type.TXT) + lookup.setSearchPath(* emptyArray()) + lookup.setCache(null) + lookup.setResolver(provider) + lookup.run() - runCatching { - - return Dns.SYSTEM.lookup(hostname) + if (lookup.result != Lookup.SUCCESSFUL) continue + FileLog.d("Results: " + ArrayUtil.toString(lookup.answers)) + val result = ArrayList() + for (record in lookup.answers.filterIsInstance()) result.addAll(record.strings) + return result } return listOf() } - fun getTxts(domain: String): ArrayList { - - val results = ArrayList() - - dnsJavaProviders.forEach { - - runCatching { - - val lookup = Lookup(domain, Type.TXT) - lookup.setResolver(it) - lookup.run() - - if (lookup.result == Lookup.SUCCESSFUL) { - - lookup.answers.forEach { - - (it as TXTRecord).strings.forEach { - - results.add(it) - - } - - } - - } - - } - - } - - return results - - } - } \ No newline at end of file