aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2021-07-25 00:59:36 +0530
committerRoopesh Chander <roop@roopc.net>2021-07-28 03:18:01 +0530
commitdf9934a4b825990c9a4eb19e67f0a0d3fd1b1362 (patch)
tree848fad85d749e0f395d5e99ff329fa6cc2c15d43
parentUI: TunnelsManager: Add TunnelContainer.hasOnDemandRules (diff)
downloadwireguard-apple-df9934a4b825990c9a4eb19e67f0a0d3fd1b1362.tar.xz
wireguard-apple-df9934a4b825990c9a4eb19e67f0a0d3fd1b1362.zip
UI: TunnelsManager: Add setOnDemandEnabled() instance method
Signed-off-by: Roopesh Chander <roop@roopc.net>
-rw-r--r--Sources/WireGuardApp/Tunnel/TunnelsManager.swift30
1 files changed, 30 insertions, 0 deletions
diff --git a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
index c73891e..8eda2cb 100644
--- a/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
+++ b/Sources/WireGuardApp/Tunnel/TunnelsManager.swift
@@ -342,6 +342,36 @@ class TunnelsManager {
}
}
+ func setOnDemandEnabled(_ isOnDemandEnabled: Bool, on tunnel: TunnelContainer, completionHandler: @escaping (TunnelsManagerError?) -> Void) {
+ let tunnelProviderManager = tunnel.tunnelProvider
+ guard tunnelProviderManager.isOnDemandEnabled != isOnDemandEnabled else {
+ completionHandler(nil)
+ return
+ }
+ let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && isOnDemandEnabled
+ tunnelProviderManager.isOnDemandEnabled = isOnDemandEnabled
+ tunnelProviderManager.saveToPreferences { error in
+ if let error = error {
+ wg_log(.error, message: "Modify On-Demand: Saving configuration failed: \(error)")
+ completionHandler(TunnelsManagerError.systemErrorOnModifyTunnel(systemError: error))
+ return
+ }
+ if isActivatingOnDemand {
+ tunnelProviderManager.loadFromPreferences { error in
+ 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))
+ } else {
+ completionHandler(nil)
+ }
+ }
+ } else {
+ completionHandler(nil)
+ }
+ }
+ }
+
func numberOfTunnels() -> Int {
return tunnels.count
}