From 354ee3cb023d8b365f0e33de78efe6ee53105083 Mon Sep 17 00:00:00 2001 From: Jamil Date: Wed, 14 Feb 2024 05:18:23 -0800 Subject: [PATCH] refactor(android): Clean up tunnel fd establishment (#3645) Cleans up the VpnService establishment logic a little --- .../firezone/android/tunnel/TunnelService.kt | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt index ebc9963e5..33f960790 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt @@ -103,9 +103,7 @@ class TunnelService : VpnService() { tunnelIpv6Address = addressIPv6 // start VPN - val fd = buildVpnService().establish()?.detachFd() ?: -1 - protect(fd) - return fd + return buildVpnService() } override fun onTunnelReady(): Boolean { @@ -127,9 +125,8 @@ class TunnelService : VpnService() { val route = Cidr(addr, prefix) tunnelRoutes.add(route) - val fd = buildVpnService().establish()?.detachFd() ?: -1 - protect(fd) - return fd + + return buildVpnService() } override fun onRemoveRoute( @@ -141,9 +138,8 @@ class TunnelService : VpnService() { val route = Cidr(addr, prefix) tunnelRoutes.remove(route) - val fd = buildVpnService().establish()?.detachFd() ?: -1 - protect(fd) - return fd + + return buildVpnService() } override fun getSystemDefaultResolvers(): Array { @@ -199,15 +195,6 @@ class TunnelService : VpnService() { return START_STICKY } - // Happens when a user removes the VPN configuration in the System settings - override fun onRevoke() { - Log.d(TAG, "onRevoke") - - connlibSessionPtr?.let { - ConnlibSession.disconnect(it) - } - } - // Call this to stop the tunnel and shutdown the service, leaving the token intact. fun disconnect() { Log.d(TAG, "disconnect") @@ -300,8 +287,8 @@ class TunnelService : VpnService() { return logDir } - private fun buildVpnService(): VpnService.Builder { - return Builder().apply { + private fun buildVpnService(): Int { + Builder().apply { Firebase.crashlytics.log("Building VPN service") // Allow traffic to bypass the VPN interface when Always-on VPN is enabled. allowBypass() @@ -336,6 +323,8 @@ class TunnelService : VpnService() { setSession(SESSION_NAME) setMtu(MTU) + }.establish()!!.let { + return it.detachFd() } }