aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/VPN
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-11-14 13:00:52 +0530
committerRoopesh Chander <roop@roopc.net>2018-11-14 13:02:53 +0530
commit2676ee0169fc5ec896317ad555d69c84d8b68646 (patch)
tree3b83c74ac93eebf34d84420d25ed9ea8a475dd05 /WireGuard/WireGuard/VPN
parentTunnels manager: Need to keep VPN-on-demand tunnels's status under observation (diff)
downloadwireguard-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')
-rw-r--r--WireGuard/WireGuard/VPN/TunnelsManager.swift19
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)
+ }
}
}
}