Skip to content

Commit 79f4d12

Browse files
committed
Merge branch 'slow-reconnection-on-grpc-droid-1223'
2 parents 7af6b25 + be695fa commit 79f4d12

File tree

4 files changed

+65
-3
lines changed

4 files changed

+65
-3
lines changed

android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import mullvad_daemon.management_interface.ManagementInterface
4141
import mullvad_daemon.management_interface.ManagementServiceGrpcKt
4242
import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.fromDomain
4343
import net.mullvad.mullvadvpn.lib.daemon.grpc.mapper.toDomain
44+
import net.mullvad.mullvadvpn.lib.daemon.grpc.resolver.DummyNameResolverFactory
4445
import net.mullvad.mullvadvpn.lib.daemon.grpc.util.LogInterceptor
4546
import net.mullvad.mullvadvpn.lib.daemon.grpc.util.connectivityFlow
4647
import net.mullvad.mullvadvpn.lib.model.AccountData
@@ -142,6 +143,10 @@ class ManagementService(
142143
rpcSocketFile.absolutePath,
143144
LocalSocketAddress.Namespace.FILESYSTEM
144145
)
146+
// We need to provide a DummyNameResolver to avoid default NameResolver making incorrect
147+
// InetSocketAddress look ups. For more info see:
148+
// https://github.com/grpc/grpc-java/issues/11442
149+
.nameResolverFactory(DummyNameResolverFactory())
145150
.build()
146151

147152
val connectionState: StateFlow<GrpcConnectivityState> =
@@ -194,7 +199,6 @@ class ManagementService(
194199
error("ManagementService already started")
195200
}
196201

197-
channel.resetConnectBackoff()
198202
job = scope.launch { subscribeEvents() }
199203
}
200204

@@ -204,6 +208,8 @@ class ManagementService(
204208
job = null
205209
}
206210

211+
fun enterIdle() = channel.enterIdle()
212+
207213
private suspend fun subscribeEvents() =
208214
withContext(Dispatchers.IO) {
209215
launch {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package net.mullvad.mullvadvpn.lib.daemon.grpc.resolver
2+
3+
import io.grpc.EquivalentAddressGroup
4+
import io.grpc.NameResolver
5+
import java.net.InetSocketAddress
6+
7+
class DummyNameResolver : NameResolver() {
8+
9+
override fun getServiceAuthority(): String = SERVICE_AUTHORITY
10+
11+
override fun start(listener: Listener2) {
12+
val resolutionResult =
13+
ResolutionResult.newBuilder()
14+
.setAddresses(
15+
listOf(
16+
EquivalentAddressGroup(
17+
InetSocketAddress.createUnresolved(DUMMY_HOST, DUMMY_PORT)
18+
)
19+
)
20+
)
21+
.build()
22+
23+
listener.onResult(resolutionResult)
24+
}
25+
26+
override fun shutdown() {
27+
// Do nothing
28+
}
29+
30+
companion object {
31+
const val SERVICE_AUTHORITY = "localhost"
32+
private const val DUMMY_HOST = ""
33+
private const val DUMMY_PORT = 80
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.mullvad.mullvadvpn.lib.daemon.grpc.resolver
2+
3+
import io.grpc.NameResolver
4+
import java.net.URI
5+
6+
class DummyNameResolverFactory : NameResolver.Factory() {
7+
override fun newNameResolver(targetUri: URI, args: NameResolver.Args): NameResolver {
8+
return DummyNameResolver()
9+
}
10+
11+
override fun getDefaultScheme(): String {
12+
return DNS_SCHEME
13+
}
14+
15+
companion object {
16+
private const val DNS_SCHEME = "dns"
17+
}
18+
}

android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider {
9494
prepareFiles(this@MullvadVpnService)
9595
migrateSplitTunneling.migrate()
9696

97-
Logger.d("Start daemon")
97+
Logger.i("Start daemon")
9898
startDaemon()
9999

100-
Logger.d("Start management service")
100+
Logger.i("Start management service")
101101
managementService.start()
102102
}
103103
}
@@ -213,6 +213,9 @@ class MullvadVpnService : TalpidVpnService(), ShouldBeOnForegroundProvider {
213213

214214
Logger.i("Shutdown MullvadDaemon")
215215
MullvadDaemon.shutdown()
216+
Logger.i("Enter Idle")
217+
managementService.enterIdle()
218+
Logger.i("Shutdown complete")
216219
super.onDestroy()
217220
}
218221

0 commit comments

Comments
 (0)