From 862b991d9a10296dc0c419fa93babb11614c3957 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Mon, 3 Jul 2017 22:52:34 +0200 Subject: Only allow one VPN connection at a time --- .../org/pacien/tincapp/service/TincVpnService.kt | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt index 59d9e34..30e2956 100644 --- a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt +++ b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt @@ -19,28 +19,31 @@ class TincVpnService : VpnService() { private var netName: String? = null override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { - netName = intent.getStringExtra(INTENT_EXTRA_NET_NAME)!! + startVpn(intent.getStringExtra(INTENT_EXTRA_NET_NAME)!!) + return Service.START_STICKY + } - val net = Builder().setSession(netName) - net.apply(VpnInterfaceConfiguration(AppPaths.netConfFile(netName!!))) - applyIgnoringException(net::addDisallowedApplication, BuildConfig.APPLICATION_ID) + override fun onDestroy() = try { + Tinc.stop(netName!!) + } catch (e: IOException) { + e.printStackTrace() + } finally { + netName = null + } - try { - Tincd.start(netName!!, net.establish().detachFd()) - } catch (e: IOException) { - e.printStackTrace() - } + private fun startVpn(netName: String) { + if (netName == this.netName) onDestroy() + this.netName = netName - return Service.START_STICKY - } + val net = Builder().setSession(netName) + net.apply(VpnInterfaceConfiguration(AppPaths.netConfFile(netName))) + applyIgnoringException(net::addDisallowedApplication, BuildConfig.APPLICATION_ID) - override fun onDestroy() { try { - Tinc.stop(netName!!) + Tincd.start(netName, net.establish().detachFd()) } catch (e: IOException) { e.printStackTrace() } - } companion object { -- cgit v1.2.3