]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
TunnelsManager: Cache isTunnelConfigurationAvailableInKeychain
authorRoopesh Chander <roop@roopc.net>
Fri, 5 Apr 2019 07:59:17 +0000 (13:29 +0530)
committerRoopesh Chander <roop@roopc.net>
Fri, 5 Apr 2019 07:59:17 +0000 (13:29 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift

index e50e4581a0ff3eaaa33188b895f50e3ecee55610..19aeaef4aad80cbcdfa107a93f2ba279fc5a5e3b 100644 (file)
@@ -465,7 +465,7 @@ class TunnelContainer: NSObject {
     }
 
     var isTunnelConfigurationAvailableInKeychain: Bool {
-        return (tunnelProvider.protocolConfiguration as? NETunnelProviderProtocol)?.verifyConfigurationReference() ?? false
+        return tunnelProvider.isTunnelConfigurationAvailableInKeychain
     }
 
     var onDemandOption: ActivateOnDemandOption {
@@ -580,7 +580,18 @@ class TunnelContainer: NSObject {
 }
 
 extension NETunnelProviderManager {
+    private static var cachedIsConfigAvailableInKeychainKey: UInt8 = 0
     private static var cachedConfigKey: UInt8 = 0
+
+    var isTunnelConfigurationAvailableInKeychain: Bool {
+        if let cachedNumber = objc_getAssociatedObject(self, &NETunnelProviderManager.cachedIsConfigAvailableInKeychainKey) as? NSNumber {
+            return cachedNumber.boolValue
+        }
+        let isAvailable = (protocolConfiguration as? NETunnelProviderProtocol)?.verifyConfigurationReference() ?? false
+        objc_setAssociatedObject(self, &NETunnelProviderManager.cachedIsConfigAvailableInKeychainKey, NSNumber(value: isAvailable), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+        return isAvailable
+    }
+
     var tunnelConfiguration: TunnelConfiguration? {
         if let cached = objc_getAssociatedObject(self, &NETunnelProviderManager.cachedConfigKey) as? TunnelConfiguration {
             return cached