diff options
author | Roopesh Chander <roop@roopc.net> | 2018-11-11 01:31:38 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-11-11 01:31:38 +0530 |
commit | 39a067cb965273c48e9906b21f82202aa8da48af (patch) | |
tree | a7bc819e00325808324f900ece22bef082ac4ca7 /WireGuard/WireGuard | |
parent | Tunnel edit, Tunnel view model: UI for providing On-Demand activation options (diff) | |
download | wireguard-apple-39a067cb965273c48e9906b21f82202aa8da48af.tar.xz wireguard-apple-39a067cb965273c48e9906b21f82202aa8da48af.zip |
TunnelsManager: Support for on-demand rules
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard')
-rw-r--r-- | WireGuard/WireGuard/VPN/TunnelsManager.swift | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/VPN/TunnelsManager.swift b/WireGuard/WireGuard/VPN/TunnelsManager.swift index 8827ea3..8eb2112 100644 --- a/WireGuard/WireGuard/VPN/TunnelsManager.swift +++ b/WireGuard/WireGuard/VPN/TunnelsManager.swift @@ -72,6 +72,14 @@ class TunnelsManager { tunnelProviderManager.localizedDescription = tunnelName tunnelProviderManager.isEnabled = true + if (tunnelConfiguration.activationType == .activateManually) { + tunnelProviderManager.onDemandRules = [] + tunnelProviderManager.isOnDemandEnabled = false + } else { + tunnelProviderManager.onDemandRules = onDemandRules(for: tunnelConfiguration.activationType) + tunnelProviderManager.isOnDemandEnabled = true + } + tunnelProviderManager.saveToPreferences { [weak self] (error) in defer { self?.isAddingTunnel = false } guard (error == nil) else { @@ -130,6 +138,14 @@ class TunnelsManager { tunnelProviderManager.localizedDescription = tunnelName tunnelProviderManager.isEnabled = true + if (tunnelConfiguration.activationType == .activateManually) { + tunnelProviderManager.onDemandRules = [] + tunnelProviderManager.isOnDemandEnabled = false + } else { + tunnelProviderManager.onDemandRules = onDemandRules(for: tunnelConfiguration.activationType) + tunnelProviderManager.isOnDemandEnabled = true + } + tunnelProviderManager.saveToPreferences { [weak self] (error) in defer { self?.isModifyingTunnel = false } guard (error == nil) else { @@ -213,6 +229,26 @@ class TunnelsManager { t.refreshConnectionStatus() } } + + func onDemandRules(for activationType: ActivationType) -> [NEOnDemandRule] { + switch (activationType) { + case .activateManually: return [] + case .useOnDemandOverWifiAndCellular: + return [NEOnDemandRuleConnect()] + case .useOnDemandOverWifiOnly: + let connectOnWifiRule = NEOnDemandRuleConnect() + connectOnWifiRule.interfaceTypeMatch = .wiFi + let disconnectOnCellularRule = NEOnDemandRuleDisconnect() + disconnectOnCellularRule.interfaceTypeMatch = .cellular + return [connectOnWifiRule, disconnectOnCellularRule] + case .useOnDemandOverCellularOnly: + let connectOnCellularRule = NEOnDemandRuleConnect() + connectOnCellularRule.interfaceTypeMatch = .cellular + let disconnectOnWifiRule = NEOnDemandRuleDisconnect() + disconnectOnWifiRule.interfaceTypeMatch = .wiFi + return [connectOnCellularRule, disconnectOnWifiRule] + } + } } class TunnelContainer: NSObject { |