mirror of
https://github.com/passepartoutvpn/wireguard-apple.git
synced 2025-01-31 21:12:07 +00:00
On-Demand: Add support for macOS-specific values
This commit is contained in:
parent
7a85358998
commit
1d5b04c822
@ -68,9 +68,11 @@
|
||||
|
||||
"tunnelOnDemandKey" = "Activate on demand";
|
||||
"tunnelOnDemandOptionOff" = "Off";
|
||||
"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
|
||||
"tunnelOnDemandOptionWiFiOnly" = "Wi-Fi only";
|
||||
"tunnelOnDemandOptionWiFiOrCellular" = "Wi-Fi or cellular";
|
||||
"tunnelOnDemandOptionCellularOnly" = "Cellular only";
|
||||
"tunnelOnDemandOptionWiFiOrEthernet" = "Wi-Fi or ethernet";
|
||||
"tunnelOnDemandOptionEthernetOnly" = "Ethernet only";
|
||||
|
||||
"addPeerButtonTitle" = "Add peer";
|
||||
|
||||
|
@ -10,9 +10,14 @@ struct ActivateOnDemandSetting {
|
||||
|
||||
enum ActivateOnDemandOption {
|
||||
case none // Valid only when isActivateOnDemandEnabled is false
|
||||
case useOnDemandOverWiFiOrCellular
|
||||
case useOnDemandOverWiFiOnly
|
||||
#if os(iOS)
|
||||
case useOnDemandOverWiFiOrCellular
|
||||
case useOnDemandOverCellularOnly
|
||||
#elseif os(OSX)
|
||||
case useOnDemandOverWiFiOrEthernet
|
||||
case useOnDemandOverEthernetOnly
|
||||
#endif
|
||||
}
|
||||
|
||||
extension ActivateOnDemandSetting {
|
||||
@ -24,6 +29,7 @@ extension ActivateOnDemandSetting {
|
||||
switch activateOnDemandOption {
|
||||
case .none:
|
||||
rules = nil
|
||||
#if os(iOS)
|
||||
case .useOnDemandOverWiFiOrCellular:
|
||||
rules = [connectRule]
|
||||
case .useOnDemandOverWiFiOnly:
|
||||
@ -34,12 +40,33 @@ extension ActivateOnDemandSetting {
|
||||
connectRule.interfaceTypeMatch = .cellular
|
||||
disconnectRule.interfaceTypeMatch = .wiFi
|
||||
rules = [connectRule, disconnectRule]
|
||||
#elseif os(OSX)
|
||||
case .useOnDemandOverWiFiOrEthernet:
|
||||
rules = [connectRule]
|
||||
case .useOnDemandOverWiFiOnly:
|
||||
connectRule.interfaceTypeMatch = .wiFi
|
||||
disconnectRule.interfaceTypeMatch = .ethernet
|
||||
rules = [connectRule, disconnectRule]
|
||||
case .useOnDemandOverEthernetOnly:
|
||||
connectRule.interfaceTypeMatch = .ethernet
|
||||
disconnectRule.interfaceTypeMatch = .wiFi
|
||||
rules = [connectRule, disconnectRule]
|
||||
#endif
|
||||
}
|
||||
tunnelProviderManager.onDemandRules = rules
|
||||
}
|
||||
|
||||
init(from tunnelProviderManager: NETunnelProviderManager) {
|
||||
let rules = tunnelProviderManager.onDemandRules ?? []
|
||||
#if os(iOS)
|
||||
let otherInterfaceType: NEOnDemandRuleInterfaceType = .cellular
|
||||
let useWiFiOrOtherOption: ActivateOnDemandOption = .useOnDemandOverWiFiOrCellular
|
||||
let useOtherOnlyOption: ActivateOnDemandOption = .useOnDemandOverCellularOnly
|
||||
#elseif os(OSX)
|
||||
let otherInterfaceType: NEOnDemandRuleInterfaceType = .ethernet
|
||||
let useWiFiOrOtherOption: ActivateOnDemandOption = .useOnDemandOverWiFiOrEthernet
|
||||
let useOtherOnlyOption: ActivateOnDemandOption = .useOnDemandOverEthernetOnly
|
||||
#endif
|
||||
let activateOnDemandOption: ActivateOnDemandOption
|
||||
switch rules.count {
|
||||
case 0:
|
||||
@ -47,20 +74,21 @@ extension ActivateOnDemandSetting {
|
||||
case 1:
|
||||
let rule = rules[0]
|
||||
precondition(rule.action == .connect)
|
||||
activateOnDemandOption = .useOnDemandOverWiFiOrCellular
|
||||
activateOnDemandOption = useWiFiOrOtherOption
|
||||
case 2:
|
||||
let connectRule = rules.first(where: { $0.action == .connect })!
|
||||
let disconnectRule = rules.first(where: { $0.action == .disconnect })!
|
||||
if connectRule.interfaceTypeMatch == .wiFi && disconnectRule.interfaceTypeMatch == .cellular {
|
||||
if connectRule.interfaceTypeMatch == .wiFi && disconnectRule.interfaceTypeMatch == otherInterfaceType {
|
||||
activateOnDemandOption = .useOnDemandOverWiFiOnly
|
||||
} else if connectRule.interfaceTypeMatch == .cellular && disconnectRule.interfaceTypeMatch == .wiFi {
|
||||
activateOnDemandOption = .useOnDemandOverCellularOnly
|
||||
} else if connectRule.interfaceTypeMatch == otherInterfaceType && disconnectRule.interfaceTypeMatch == .wiFi {
|
||||
activateOnDemandOption = useOtherOnlyOption
|
||||
} else {
|
||||
fatalError("Unexpected onDemandRules set on tunnel provider manager")
|
||||
}
|
||||
default:
|
||||
fatalError("Unexpected number of onDemandRules set on tunnel provider manager")
|
||||
}
|
||||
|
||||
self.activateOnDemandOption = activateOnDemandOption
|
||||
if activateOnDemandOption == .none {
|
||||
isActivateOnDemandEnabled = false
|
||||
|
@ -454,12 +454,19 @@ extension TunnelViewModel {
|
||||
switch activateOnDemandOption {
|
||||
case .none:
|
||||
return tr("tunnelOnDemandOptionOff")
|
||||
case .useOnDemandOverWiFiOrCellular:
|
||||
return tr("tunnelOnDemandOptionWiFiOrCellular")
|
||||
case .useOnDemandOverWiFiOnly:
|
||||
return tr("tunnelOnDemandOptionWiFiOnly")
|
||||
#if os(iOS)
|
||||
case .useOnDemandOverWiFiOrCellular:
|
||||
return tr("tunnelOnDemandOptionWiFiOrCellular")
|
||||
case .useOnDemandOverCellularOnly:
|
||||
return tr("tunnelOnDemandOptionCellularOnly")
|
||||
#elseif os(OSX)
|
||||
case .useOnDemandOverWiFiOrEthernet:
|
||||
return tr("tunnelOnDemandOptionWiFiOrEthernet")
|
||||
case .useOnDemandOverEthernetOnly:
|
||||
return tr("tunnelOnDemandOptionEthernetOnly")
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -476,6 +483,10 @@ extension TunnelViewModel {
|
||||
}
|
||||
|
||||
static func defaultActivateOnDemandOption() -> ActivateOnDemandOption {
|
||||
#if os(iOS)
|
||||
return .useOnDemandOverWiFiOrCellular
|
||||
#elseif os(OSX)
|
||||
return .useOnDemandOverWiFiOrEthernet
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user