From c60c29b93cc023c6604c3142fb83b58d3dfd45da Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Mon, 12 Nov 2018 18:16:44 +0530 Subject: [PATCH] Tunnels manager: Need to keep VPN-on-demand tunnels's status under observation Because they can turn on automatically, even while the app is in the foreground. Signed-off-by: Roopesh Chander --- WireGuard/WireGuard/VPN/TunnelsManager.swift | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/WireGuard/WireGuard/VPN/TunnelsManager.swift b/WireGuard/WireGuard/VPN/TunnelsManager.swift index 935036d..307ecfb 100644 --- a/WireGuard/WireGuard/VPN/TunnelsManager.swift +++ b/WireGuard/WireGuard/VPN/TunnelsManager.swift @@ -227,7 +227,14 @@ class TunnelsManager { class TunnelContainer: NSObject { @objc dynamic var name: String @objc dynamic var status: TunnelStatus - @objc dynamic var isActivateOnDemandEnabled: Bool + + @objc dynamic var isActivateOnDemandEnabled: Bool { + didSet { + if (isActivateOnDemandEnabled) { + startObservingTunnelStatus() + } + } + } var onDeactivationComplete: (() -> Void)? @@ -241,7 +248,7 @@ class TunnelContainer: NSObject { self.isActivateOnDemandEnabled = tunnel.isOnDemandEnabled self.tunnelProvider = tunnel super.init() - if (status != .inactive) { + if (status != .inactive || isActivateOnDemandEnabled) { startObservingTunnelStatus() } } @@ -258,7 +265,7 @@ class TunnelContainer: NSObject { let status = TunnelStatus(from: self.tunnelProvider.connection.status) self.status = status self.isActivateOnDemandEnabled = self.tunnelProvider.isOnDemandEnabled - if (status != .inactive) { + if (status != .inactive || isActivateOnDemandEnabled) { startObservingTunnelStatus() } } @@ -375,9 +382,11 @@ class TunnelContainer: NSObject { } s.status = TunnelStatus(from: connection.status) if (s.status == .inactive) { - s.statusObservationToken = nil s.onDeactivationComplete?() s.onDeactivationComplete = nil + if (!s.isActivateOnDemandEnabled) { + s.statusObservationToken = nil + } } } }