diff options
author | Roopesh Chander <roop@roopc.net> | 2018-12-19 15:38:00 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-12-19 15:38:00 +0530 |
commit | fa51e3f1d1636374341b7bf07967626af9e97b91 (patch) | |
tree | d12d7c0e6599ef37ea5d405e99d2f4dac77f8397 /WireGuard/Shared | |
parent | NE: No need for two startTunnel() methods (diff) | |
download | wireguard-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 'WireGuard/Shared')
-rw-r--r-- | WireGuard/Shared/NETunnelProviderProtocol+Extension.swift | 9 |
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 + } } |