diff options
Diffstat (limited to 'WireGuard/WireGuard/Tunnel')
-rw-r--r-- | WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift (renamed from WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift) | 38 | ||||
-rw-r--r-- | WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 14 |
2 files changed, 14 insertions, 38 deletions
diff --git a/WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift b/WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift index 89edd77..8b39f8c 100644 --- a/WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift +++ b/WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift @@ -3,13 +3,8 @@ import NetworkExtension -struct ActivateOnDemandSetting { - var isActivateOnDemandEnabled: Bool - var activateOnDemandOption: ActivateOnDemandOption -} - enum ActivateOnDemandOption: Equatable { - case none // Valid only when isActivateOnDemandEnabled is false + case off case wiFiInterfaceOnly(ActivateOnDemandSSIDOption) case nonWiFiInterfaceOnly case anyInterface(ActivateOnDemandSSIDOption) @@ -29,12 +24,11 @@ enum ActivateOnDemandSSIDOption: Equatable { case exceptSpecificSSIDs([String]) } -extension ActivateOnDemandSetting { +extension ActivateOnDemandOption { func apply(on tunnelProviderManager: NETunnelProviderManager) { - tunnelProviderManager.isOnDemandEnabled = isActivateOnDemandEnabled let rules: [NEOnDemandRule]? - switch activateOnDemandOption { - case .none: + switch self { + case .off: rules = nil case .wiFiInterfaceOnly(let ssidOption): rules = ssidOnDemandRules(option: ssidOption) + [NEOnDemandRuleDisconnect(interfaceType: nonWiFiInterfaceType)] @@ -48,6 +42,7 @@ extension ActivateOnDemandSetting { } } tunnelProviderManager.onDemandRules = rules + tunnelProviderManager.isOnDemandEnabled = self != .off } init(from tunnelProviderManager: NETunnelProviderManager) { @@ -55,7 +50,7 @@ extension ActivateOnDemandSetting { let activateOnDemandOption: ActivateOnDemandOption switch rules.count { case 0: - activateOnDemandOption = .none + activateOnDemandOption = .off case 1: let rule = rules[0] precondition(rule.action == .connect) @@ -90,19 +85,10 @@ extension ActivateOnDemandSetting { fatalError("Unexpected number of onDemandRules set on tunnel provider manager") } - self.activateOnDemandOption = activateOnDemandOption - if activateOnDemandOption == .none { - isActivateOnDemandEnabled = false - } else { - isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled - } + self = activateOnDemandOption } } -extension ActivateOnDemandSetting { - static var defaultSetting = ActivateOnDemandSetting(isActivateOnDemandEnabled: false, activateOnDemandOption: .none) -} - private extension NEOnDemandRuleConnect { convenience init(interfaceType: NEOnDemandRuleInterfaceType, ssids: [String]? = nil) { self.init() @@ -132,13 +118,3 @@ private func ssidOnDemandRules(option: ActivateOnDemandSSIDOption) -> [NEOnDeman NEOnDemandRuleConnect(interfaceType: .wiFi)] } } - -extension ActivateOnDemandSetting { - init(with option: ActivateOnDemandOption) { - if option == .none { - self = ActivateOnDemandSetting(isActivateOnDemandEnabled: false, activateOnDemandOption: option) - } else { - self = ActivateOnDemandSetting(isActivateOnDemandEnabled: true, activateOnDemandOption: option) - } - } -} diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index 1a467f5..8f4c87c 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -97,7 +97,7 @@ class TunnelsManager { } } - func add(tunnelConfiguration: TunnelConfiguration, activateOnDemandSetting: ActivateOnDemandSetting = ActivateOnDemandSetting.defaultSetting, completionHandler: @escaping (WireGuardResult<TunnelContainer>) -> Void) { + func add(tunnelConfiguration: TunnelConfiguration, onDemandOption: ActivateOnDemandOption = .off, completionHandler: @escaping (WireGuardResult<TunnelContainer>) -> Void) { let tunnelName = tunnelConfiguration.name ?? "" if tunnelName.isEmpty { completionHandler(.failure(TunnelsManagerError.tunnelNameEmpty)) @@ -113,7 +113,7 @@ class TunnelsManager { tunnelProviderManager.setTunnelConfiguration(tunnelConfiguration) tunnelProviderManager.isEnabled = true - activateOnDemandSetting.apply(on: tunnelProviderManager) + onDemandOption.apply(on: tunnelProviderManager) let activeTunnel = tunnels.first { $0.status == .active || $0.status == .activating } @@ -167,7 +167,7 @@ class TunnelsManager { } } - func modify(tunnel: TunnelContainer, tunnelConfiguration: TunnelConfiguration, activateOnDemandSetting: ActivateOnDemandSetting, completionHandler: @escaping (TunnelsManagerError?) -> Void) { + func modify(tunnel: TunnelContainer, tunnelConfiguration: TunnelConfiguration, onDemandOption: ActivateOnDemandOption, completionHandler: @escaping (TunnelsManagerError?) -> Void) { let tunnelName = tunnelConfiguration.name ?? "" if tunnelName.isEmpty { completionHandler(TunnelsManagerError.tunnelNameEmpty) @@ -191,8 +191,8 @@ class TunnelsManager { } tunnelProviderManager.isEnabled = true - let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && activateOnDemandSetting.isActivateOnDemandEnabled - activateOnDemandSetting.apply(on: tunnelProviderManager) + let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && onDemandOption != .off + onDemandOption.apply(on: tunnelProviderManager) tunnelProviderManager.saveToPreferences { [weak self] error in guard error == nil else { @@ -455,8 +455,8 @@ class TunnelContainer: NSObject { return tunnelProvider.tunnelConfiguration } - var activateOnDemandSetting: ActivateOnDemandSetting { - return ActivateOnDemandSetting(from: tunnelProvider) + var onDemandOption: ActivateOnDemandOption { + return ActivateOnDemandOption(from: tunnelProvider) } init(tunnel: NETunnelProviderManager) { |