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