summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-08-05 15:59:02 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-08-05 16:00:17 +0200
commitbe695fa85e321c0aa01f9f5dce30c795aa36970e (patch)
treea72b0fc00b3fa35ace3bb5aecbc62073659cff07 /android/lib
parent7af6b25fcbfc95b59e9680317c410cf0b22a928b (diff)
downloadmullvadvpn-be695fa85e321c0aa01f9f5dce30c795aa36970e.tar.xz
mullvadvpn-be695fa85e321c0aa01f9f5dce30c795aa36970e.zip
Add dummy name resolver
Co-authored-by: Jonatan Rhodin <jonatan.rhodin@mullvad.net>
Diffstat (limited to 'android/lib')
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt8
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolver.kt35
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolverFactory.kt18
3 files changed, 60 insertions, 1 deletions
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
index d05df426f8..7f1ae90b45 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
@@ -41,6 +41,7 @@ import mullvad_daemon.management_interface.ManagementInterface
import mullvad_daemon.management_interface.ManagementServiceGrpcKt
import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.fromDomain
import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.toDomain
+import net.mullvad.mullvadvpn.lib.daemon.grpc.resolver.DummyNameResolverFactory
import net.mullvad.mullvadvpn.lib.daemon.grpc.util.LogInterceptor
import net.mullvad.mullvadvpn.lib.daemon.grpc.util.connectivityFlow
import net.mullvad.mullvadvpn.lib.model.AccountData
@@ -142,6 +143,10 @@ class ManagementService(
rpcSocketFile.absolutePath,
LocalSocketAddress.Namespace.FILESYSTEM
)
+ // We need to provide a DummyNameResolver to avoid default NameResolver making incorrect
+ // InetSocketAddress look ups. For more info see:
+ // https://github.com/grpc/grpc-java/issues/11442
+ .nameResolverFactory(DummyNameResolverFactory())
.build()
val connectionState: StateFlow<GrpcConnectivityState> =
@@ -194,7 +199,6 @@ class ManagementService(
error("ManagementService already started")
}
- channel.resetConnectBackoff()
job = scope.launch { subscribeEvents() }
}
@@ -204,6 +208,8 @@ class ManagementService(
job = null
}
+ fun enterIdle() = channel.enterIdle()
+
private suspend fun subscribeEvents() =
withContext(Dispatchers.IO) {
launch {
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolver.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolver.kt
new file mode 100644
index 0000000000..37a3c9cdc0
--- /dev/null
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolver.kt
@@ -0,0 +1,35 @@
+package net.mullvad.mullvadvpn.lib.daemon.grpc.resolver
+
+import io.grpc.EquivalentAddressGroup
+import io.grpc.NameResolver
+import java.net.InetSocketAddress
+
+class DummyNameResolver : NameResolver() {
+
+ override fun getServiceAuthority(): String = SERVICE_AUTHORITY
+
+ override fun start(listener: Listener2) {
+ val resolutionResult =
+ ResolutionResult.newBuilder()
+ .setAddresses(
+ listOf(
+ EquivalentAddressGroup(
+ InetSocketAddress.createUnresolved(DUMMY_HOST, DUMMY_PORT)
+ )
+ )
+ )
+ .build()
+
+ listener.onResult(resolutionResult)
+ }
+
+ override fun shutdown() {
+ // Do nothing
+ }
+
+ companion object {
+ const val SERVICE_AUTHORITY = "localhost"
+ private const val DUMMY_HOST = ""
+ private const val DUMMY_PORT = 80
+ }
+}
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolverFactory.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolverFactory.kt
new file mode 100644
index 0000000000..1a8141985d
--- /dev/null
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/resolver/DummyNameResolverFactory.kt
@@ -0,0 +1,18 @@
+package net.mullvad.mullvadvpn.lib.daemon.grpc.resolver
+
+import io.grpc.NameResolver
+import java.net.URI
+
+class DummyNameResolverFactory : NameResolver.Factory() {
+ override fun newNameResolver(targetUri: URI, args: NameResolver.Args): NameResolver {
+ return DummyNameResolver()
+ }
+
+ override fun getDefaultScheme(): String {
+ return DNS_SCHEME
+ }
+
+ companion object {
+ private const val DNS_SCHEME = "dns"
+ }
+}