diff options
author | Roopesh Chander <roop@roopc.net> | 2018-11-14 13:00:52 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-11-14 13:02:53 +0530 |
commit | 2676ee0169fc5ec896317ad555d69c84d8b68646 (patch) | |
tree | 3b83c74ac93eebf34d84420d25ed9ea8a475dd05 /WireGuard/WireGuard/VPN/TunnelsManager.swift | |
parent | Tunnels manager: Need to keep VPN-on-demand tunnels's status under observation (diff) | |
download | wireguard-apple-2676ee0169fc5ec896317ad555d69c84d8b68646.tar.xz wireguard-apple-2676ee0169fc5ec896317ad555d69c84d8b68646.zip |
Tunnels manager: After saving after activating on-demand, reload tunnel
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/VPN/TunnelsManager.swift')
-rw-r--r-- | WireGuard/WireGuard/VPN/TunnelsManager.swift | 19 |
1 files changed, 16 insertions, 3 deletions
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) + } } } } |