Commit 9b51f91e authored by Mygod's avatar Mygod

Add support for PTR queries

parent 41405f91
...@@ -87,7 +87,7 @@ dependencies { ...@@ -87,7 +87,7 @@ dependencies {
api("com.google.firebase:firebase-config-ktx:19.1.4") api("com.google.firebase:firebase-config-ktx:19.1.4")
api("com.google.firebase:firebase-crashlytics:17.0.0") api("com.google.firebase:firebase-crashlytics:17.0.0")
api("com.jakewharton.timber:timber:4.7.1") api("com.jakewharton.timber:timber:4.7.1")
api("dnsjava:dnsjava:3.0.2") api("dnsjava:dnsjava:3.1.0")
api("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion") api("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")
api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutinesVersion") api("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutinesVersion")
kapt("androidx.room:room-compiler:$roomVersion") kapt("androidx.room:room-compiler:$roomVersion")
......
...@@ -70,6 +70,7 @@ sealed class DnsResolverCompat { ...@@ -70,6 +70,7 @@ sealed class DnsResolverCompat {
fun prepareDnsResponse(request: Message) = Message(request.header.id).apply { fun prepareDnsResponse(request: Message) = Message(request.header.id).apply {
header.setFlag(Flags.QR.toInt()) // this is a response header.setFlag(Flags.QR.toInt()) // this is a response
header.setFlag(Flags.RA.toInt()) // recursion available
if (request.header.getFlag(Flags.RD.toInt())) header.setFlag(Flags.RD.toInt()) if (request.header.getFlag(Flags.RD.toInt())) header.setFlag(Flags.RD.toInt())
request.question?.also { addRecord(it, Section.QUESTION) } request.question?.also { addRecord(it, Section.QUESTION) }
} }
...@@ -135,11 +136,22 @@ sealed class DnsResolverCompat { ...@@ -135,11 +136,22 @@ sealed class DnsResolverCompat {
val isIpv6 = when (val type = question?.type) { val isIpv6 = when (val type = question?.type) {
Type.A -> false Type.A -> false
Type.AAAA -> true Type.AAAA -> true
Type.PTR -> {
val ip = try {
ReverseMap.fromName(question.name)
} catch (e: IOException) {
throw UnsupportedOperationException(e) // unrecognized PTR name
}
// Android does not provide a PTR lookup API for Network prior to Android 10
val hostname = Name.fromString(GlobalScope.async(unboundedIO) { ip.hostName }.await())
return prepareDnsResponse(request).apply {
addRecord(PTRRecord(question.name, DClass.IN, TTL, hostname), Section.ANSWER)
}.toWire()
}
else -> throw UnsupportedOperationException("Unsupported query type $type") else -> throw UnsupportedOperationException("Unsupported query type $type")
} }
val host = question.name.canonicalize().toString(true) val host = question.name.canonicalize().toString(true)
return prepareDnsResponse(request).apply { return prepareDnsResponse(request).apply {
header.setFlag(Flags.RA.toInt()) // recursion available
for (address in hostResolver(host).asIterable().run { for (address in hostResolver(host).asIterable().run {
if (isIpv6) filterIsInstance<Inet6Address>() else filterIsInstance<Inet4Address>() if (isIpv6) filterIsInstance<Inet6Address>() else filterIsInstance<Inet4Address>()
}) addRecord(when (address) { }) addRecord(when (address) {
......
Subproject commit ea24418ffcbb01ebb88fd3af9e161a5f93fe0a27 Subproject commit ce1e58641d502ec128806efa898ebf2716461132
...@@ -14,7 +14,7 @@ androidExtensions.isExperimental = true ...@@ -14,7 +14,7 @@ androidExtensions.isExperimental = true
dependencies { dependencies {
implementation("androidx.browser:browser:1.2.0") implementation("androidx.browser:browser:1.2.0")
implementation("androidx.constraintlayout:constraintlayout:2.0.0-beta5") implementation("androidx.constraintlayout:constraintlayout:2.0.0-beta6")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")
implementation("com.google.android.gms:play-services-vision:20.0.0") implementation("com.google.android.gms:play-services-vision:20.0.0")
implementation("com.google.firebase:firebase-ads:19.1.0") implementation("com.google.firebase:firebase-ads:19.1.0")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment