From 34a7e5b558b31f12ec3a203ebc6cfb13d1547ef5 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 14 Dec 2018 17:33:52 +0530 Subject: [PATCH] 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. --- .../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?