aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/Shared
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-12-19 15:38:00 +0530
committerRoopesh Chander <roop@roopc.net>2018-12-19 15:38:00 +0530
commitfa51e3f1d1636374341b7bf07967626af9e97b91 (patch)
treed12d7c0e6599ef37ea5d405e99d2f4dac77f8397 /WireGuard/Shared
parentNE: No need for two startTunnel() methods (diff)
downloadwireguard-apple-fa51e3f1d1636374341b7bf07967626af9e97b91.tar.xz
wireguard-apple-fa51e3f1d1636374341b7bf07967626af9e97b91.zip
NE: Handle bad domain names and Activate On Demand
This combination causes iOS to keep trying to bring up the tunnel, leading to a lot of displayMessage() alerts. In this fix, if we get a DNS resolution error in an Activate On Demand enabled tunnel, we silently retry 9 times (with a 4-second delay before each retry) and then show the displayMessage() alert. Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r--WireGuard/Shared/NETunnelProviderProtocol+Extension.swift9
1 files changed, 7 insertions, 2 deletions
diff --git a/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift
index 960bf22..9f4af77 100644
--- a/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift
+++ b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift
@@ -4,7 +4,7 @@
import NetworkExtension
extension NETunnelProviderProtocol {
- convenience init?(tunnelConfiguration: TunnelConfiguration) {
+ convenience init?(tunnelConfiguration: TunnelConfiguration, isActivateOnDemandEnabled: Bool) {
assert(!tunnelConfiguration.interface.name.isEmpty)
guard let serializedTunnelConfiguration = try? JSONEncoder().encode(tunnelConfiguration) else { return nil }
@@ -14,7 +14,8 @@ extension NETunnelProviderProtocol {
providerBundleIdentifier = "\(appId).network-extension"
providerConfiguration = [
"tunnelConfiguration": serializedTunnelConfiguration,
- "tunnelConfigurationVersion": 1
+ "tunnelConfigurationVersion": 1,
+ "isActivateOnDemandEnabled": isActivateOnDemandEnabled
]
let endpoints = tunnelConfiguration.peers.compactMap {$0.endpoint}
@@ -32,4 +33,8 @@ extension NETunnelProviderProtocol {
guard let serializedTunnelConfiguration = providerConfiguration?["tunnelConfiguration"] as? Data else { return nil }
return try? JSONDecoder().decode(TunnelConfiguration.self, from: serializedTunnelConfiguration)
}
+
+ var isActivateOnDemandEnabled: Bool {
+ return (providerConfiguration?["isActivateOnDemandEnabled"] as? Bool) ?? false
+ }
}