From: Roopesh Chander Date: Fri, 14 Dec 2018 12:03:52 +0000 (+0530) Subject: Fix tunnel remaining in 'Activating' state X-Git-Tag: 0.0.20181104-6~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4263da23121e3dd2bf0dcc58b6df9c6249eb080;p=thirdparty%2Fwireguard-apple.git 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 --- 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?