]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
DNSResolver: Let's not cache DNS resolution results anymore
authorRoopesh Chander <roop@roopc.net>
Thu, 8 Nov 2018 11:01:42 +0000 (16:31 +0530)
committerRoopesh Chander <roop@roopc.net>
Thu, 8 Nov 2018 12:22:11 +0000 (17:52 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuardNetworkExtension/DNSResolver.swift

index 4181f75729d59271f5edf5845cbbdc6273fed96e..d69b96d61c77bd5d57ed811e316fb46a2374480c 100644 (file)
@@ -12,7 +12,6 @@ class DNSResolver {
     let endpoints: [Endpoint?]
     let dispatchGroup: DispatchGroup
     var dispatchWorkItems: [DispatchWorkItem]
-    static var cache = NSCache<NSString, NSString>()
 
     init(endpoints: [Endpoint?]) {
         self.endpoints = endpoints
@@ -20,20 +19,14 @@ class DNSResolver {
         self.dispatchGroup = DispatchGroup()
     }
 
-    func resolveWithoutNetworkRequests() -> [Endpoint?]? {
-        var resolvedEndpoints: [Endpoint?] = Array<Endpoint?>(repeating: nil, count: endpoints.count)
-        for (i, endpoint) in self.endpoints.enumerated() {
+    func isAllEndpointsAlreadyResolved() -> Bool {
+        for endpoint in self.endpoints {
             guard let endpoint = endpoint else { continue }
-            if (endpoint.hasHostAsIPAddress()) {
-                resolvedEndpoints[i] = endpoint
-            } else if let resolvedEndpointStringInCache = DNSResolver.cache.object(forKey: endpoint.stringRepresentation() as NSString),
-                let resolvedEndpointInCache = Endpoint(from: resolvedEndpointStringInCache as String) {
-                resolvedEndpoints[i] = resolvedEndpointInCache
-            } else {
-                return nil
+            if (!endpoint.hasHostAsIPAddress()) {
+                return false
             }
         }
-        return resolvedEndpoints
+        return true
     }
 
     func resolveSync() throws -> [Endpoint?] {
@@ -41,19 +34,18 @@ class DNSResolver {
         let dispatchGroup = self.dispatchGroup
         dispatchWorkItems = []
 
+        if (isAllEndpointsAlreadyResolved()) {
+            return endpoints
+        }
+
         var resolvedEndpoints: [Endpoint?] = Array<Endpoint?>(repeating: nil, count: endpoints.count)
-        var isResolvedByDNSRequest: [Bool] = Array<Bool>(repeating: false, count: endpoints.count)
         for (i, endpoint) in self.endpoints.enumerated() {
             guard let endpoint = endpoint else { continue }
             if (endpoint.hasHostAsIPAddress()) {
                 resolvedEndpoints[i] = endpoint
-            } else if let resolvedEndpointStringInCache = DNSResolver.cache.object(forKey: endpoint.stringRepresentation() as NSString),
-                let resolvedEndpointInCache = Endpoint(from: resolvedEndpointStringInCache as String) {
-                resolvedEndpoints[i] = resolvedEndpointInCache
             } else {
                 let workItem = DispatchWorkItem {
                     resolvedEndpoints[i] = DNSResolver.resolveSync(endpoint: endpoint)
-                    isResolvedByDNSRequest[i] = true
                 }
                 dispatchWorkItems.append(workItem)
                 DispatchQueue.global(qos: .userInitiated).async(group: dispatchGroup, execute: workItem)