aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/VPN/DNSResolver.swift
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-10-27 04:41:05 +0530
committerRoopesh Chander <roop@roopc.net>2018-10-27 19:07:16 +0530
commit8d2bc4524a2d0fdf6d008da482c0259e1d10da72 (patch)
tree5fae4ff63c85e69be5a8d05b4a1feb8b77f2744d /WireGuard/WireGuard/VPN/DNSResolver.swift
parentNE: Add bridging header (diff)
downloadwireguard-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.swift29
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)