diff options
author | Roopesh Chander <roop@roopc.net> | 2018-10-27 04:41:05 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-10-27 19:07:16 +0530 |
commit | 8d2bc4524a2d0fdf6d008da482c0259e1d10da72 (patch) | |
tree | 5fae4ff63c85e69be5a8d05b4a1feb8b77f2744d /WireGuard/WireGuard/VPN/DNSResolver.swift | |
parent | NE: Add bridging header (diff) | |
download | wireguard-apple-8d2bc4524a2d0fdf6d008da482c0259e1d10da72.tar.xz wireguard-apple-8d2bc4524a2d0fdf6d008da482c0259e1d10da72.zip |
VPN: Fix DNS resolution API
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/VPN/DNSResolver.swift | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/WireGuard/WireGuard/VPN/DNSResolver.swift b/WireGuard/WireGuard/VPN/DNSResolver.swift index 89b1a83..e027852 100644 --- a/WireGuard/WireGuard/VPN/DNSResolver.swift +++ b/WireGuard/WireGuard/VPN/DNSResolver.swift @@ -5,19 +5,34 @@ import Network import Foundation class DNSResolver { - let endpoints: [Endpoint] + let endpoints: [Endpoint?] - init(endpoints: [Endpoint]) { + init(endpoints: [Endpoint?]) { self.endpoints = endpoints } - func resolve(completionHandler: @escaping ([Endpoint?]) -> Void) { + func resolve(completionHandler: @escaping ([Endpoint?]?) -> Void) { let endpoints = self.endpoints DispatchQueue.global(qos: .userInitiated).async { - var resolvedEndpoints = Array<Endpoint?>(repeating: nil, count: endpoints.count) - for (i, endpoint) in endpoints.enumerated() { - let resolvedEndpoint = DNSResolver.resolveSync(endpoint: endpoint) - resolvedEndpoints[i] = resolvedEndpoint + var resolvedEndpoints: [Endpoint?] = [] + var isError = false + for endpoint in endpoints { + if let endpoint = endpoint { + if let resolvedEndpoint = DNSResolver.resolveSync(endpoint: endpoint) { + resolvedEndpoints.append(resolvedEndpoint) + } else { + isError = true + break + } + } else { + resolvedEndpoints.append(nil) + } + } + if (isError) { + DispatchQueue.main.async { + completionHandler(nil) + } + return } DispatchQueue.main.async { completionHandler(resolvedEndpoints) |