From c4263da23121e3dd2bf0dcc58b6df9c6249eb080 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 14 Dec 2018 17:33:52 +0530 Subject: Fix tunnel remaining in 'Activating' state 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 --- WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index 4abc3c0..6f93267 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -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? -- cgit v1.2.3-59-g8ed1b