diff options
-rw-r--r-- | Sources/WireGuardApp/Tunnel/TunnelsManager.swift | 30 |
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 } |