From 2676ee0169fc5ec896317ad555d69c84d8b68646 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Wed, 14 Nov 2018 13:00:52 +0530 Subject: Tunnels manager: After saving after activating on-demand, reload tunnel Signed-off-by: Roopesh Chander --- WireGuard/WireGuard/VPN/TunnelsManager.swift | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'WireGuard') diff --git a/WireGuard/WireGuard/VPN/TunnelsManager.swift b/WireGuard/WireGuard/VPN/TunnelsManager.swift index 307ecfb..0a3dd87 100644 --- a/WireGuard/WireGuard/VPN/TunnelsManager.swift +++ b/WireGuard/WireGuard/VPN/TunnelsManager.swift @@ -135,6 +135,7 @@ class TunnelsManager { tunnelProviderManager.localizedDescription = tunnelName tunnelProviderManager.isEnabled = true + let isActivatingOnDemand = (!tunnelProviderManager.isOnDemandEnabled && activateOnDemandSetting.isActivateOnDemandEnabled) activateOnDemandSetting.apply(on: tunnelProviderManager) tunnelProviderManager.saveToPreferences { [weak self] (error) in @@ -158,9 +159,21 @@ class TunnelsManager { tunnel.beginRestart() } - tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled - - completionHandler(nil) + if (isActivatingOnDemand) { + // Reload tunnel after saving. + // Without this, the tunnel stopes getting updates on the tunnel status from iOS. + tunnelProviderManager.loadFromPreferences { (error) in + tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled + guard (error == nil) else { + os_log("Modify: Re-loading after saving configuration failed: %{public}@", log: OSLog.default, type: .error, "\(error!)") + completionHandler(TunnelManagementError.vpnSystemErrorOnModifyTunnel) + return + } + completionHandler(nil) + } + } else { + completionHandler(nil) + } } } } -- cgit v1.2.3-59-g8ed1b