aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2019-04-05 13:29:17 +0530
committerRoopesh Chander <roop@roopc.net>2019-04-05 13:29:17 +0530
commit3bd611aa7c2f4fb8ea24cfcc94826eec393c75f1 (patch)
tree5aa1d874455e94e6986cc43066fbfa6bdc53a5d7
parentmacOS: Attempt to remove keychain item only if verified (diff)
downloadwireguard-apple-3bd611aa7c2f4fb8ea24cfcc94826eec393c75f1.tar.xz
wireguard-apple-3bd611aa7c2f4fb8ea24cfcc94826eec393c75f1.zip
TunnelsManager: Cache isTunnelConfigurationAvailableInKeychain
Signed-off-by: Roopesh Chander <roop@roopc.net>
-rw-r--r--WireGuard/WireGuard/Tunnel/TunnelsManager.swift13
1 files changed, 12 insertions, 1 deletions
diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
index e50e458..19aeaef 100644
--- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
+++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
@@ -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