]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Fix tunnel remaining in 'Activating' state
authorRoopesh Chander <roop@roopc.net>
Fri, 14 Dec 2018 12:03:52 +0000 (17:33 +0530)
committerRoopesh Chander <roop@roopc.net>
Fri, 14 Dec 2018 12:03:56 +0000 (17:33 +0530)
It uses to remain in 'Activating' state when we don't get a status
update notification, for example, when turning on the tunnel repeatedly
without Internet connectivity.

Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Tunnel/TunnelsManager.swift

index 4abc3c057d4a8f13a8c5acebf0220a93fa92366b..6f932676d46d13127d9f7f0afc98a06ec9a954e7 100644 (file)
@@ -358,8 +358,26 @@ class TunnelContainer: NSObject {
 
     @objc dynamic var isActivateOnDemandEnabled: Bool
 
-    var isAttemptingActivation = false
+    var isAttemptingActivation = false {
+        didSet {
+            if isAttemptingActivation {
+                let activationTimer = Timer(timeInterval: 5 /* seconds */, repeats: true) { [weak self] _ in
+                    guard let self = self else { return }
+                    self.refreshStatus()
+                    if self.status == .inactive || self.status == .active {
+                        self.isAttemptingActivation = false // This also invalidates the timer
+                    }
+                }
+                self.activationTimer = activationTimer
+                RunLoop.main.add(activationTimer, forMode: .default)
+            } else {
+                self.activationTimer?.invalidate()
+                self.activationTimer = nil
+            }
+        }
+    }
     var activationAttemptId: String?
+    var activationTimer: Timer?
 
     fileprivate let tunnelProvider: NETunnelProviderManager
     private var lastTunnelConnectionStatus: NEVPNStatus?