aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2021-07-28 11:29:34 +0530
committerRoopesh Chander <roop@roopc.net>2021-07-28 11:52:54 +0530
commitc1fe8b01625945dd86e2982812288f524e3f537f (patch)
treece771a30a0c5f9abcef1314ac22b5188bcc2365d
parentUI: iOS: Tunnels list: Move the "On Demand" label to the right (diff)
downloadwireguard-apple-c1fe8b01625945dd86e2982812288f524e3f537f.tar.xz
wireguard-apple-c1fe8b01625945dd86e2982812288f524e3f537f.zip
UI: When setting on-demand, enable the tunnel if required
Signed-off-by: Roopesh Chander <roop@roopc.net>
-rw-r--r--Sources/WireGuardApp/Tunnel/TunnelsManager.swift16
1 files changed, 16 insertions, 0 deletions
diff --git a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
index 7bfb339..20bd1ca 100644
--- a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
+++ b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
@@ -357,11 +357,27 @@ class TunnelsManager {
return
}
if isActivatingOnDemand {
+ // If we're enabling on-demand, we want to make sure the tunnel is enabled.
+ // If not enabled, the OS will not turn the tunnel on/off based on our rules.
tunnelProviderManager.loadFromPreferences { error in
+ // isActivateOnDemandEnabled will get changed in reload(), but no harm in setting it here too
tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled
if let error = error {
wg_log(.error, message: "Modify On-Demand: Re-loading after saving configuration failed: \(error)")
completionHandler(TunnelsManagerError.systemErrorOnModifyTunnel(systemError: error))
+ return
+ }
+ if !tunnelProviderManager.isEnabled {
+ // In case the tunnel has gotten disabled, re-enable and save it.
+ wg_log(.debug, staticMessage: "Modify On-Demand: Tunnel is disabled. Re-enabling and saving")
+ tunnelProviderManager.isEnabled = true
+ tunnelProviderManager.saveToPreferences { error in
+ if let error = error {
+ wg_log(.error, message: "Modify On-Demand: Error saving tunnel after re-enabling: \(error)")
+ completionHandler(TunnelsManagerError.systemErrorOnModifyTunnel(systemError: error))
+ return
+ }
+ }
} else {
completionHandler(nil)
}