]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Tunnels manager: Need to keep VPN-on-demand tunnels's status under observation
authorRoopesh Chander <roop@roopc.net>
Mon, 12 Nov 2018 12:46:44 +0000 (18:16 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 12 Nov 2018 13:54:13 +0000 (19:24 +0530)
Because they can turn on automatically, even while the app is in the foreground.

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

index 935036d8a91a4e2b980b43f9d431dcff3c945136..307ecfbaed2dc1cd252f57c5fc4efe08fdd7429c 100644 (file)
@@ -227,7 +227,14 @@ class TunnelsManager {
 class TunnelContainer: NSObject {
     @objc dynamic var name: String
     @objc dynamic var status: TunnelStatus
-    @objc dynamic var isActivateOnDemandEnabled: Bool
+
+    @objc dynamic var isActivateOnDemandEnabled: Bool {
+        didSet {
+            if (isActivateOnDemandEnabled) {
+                startObservingTunnelStatus()
+            }
+        }
+    }
 
     var onDeactivationComplete: (() -> Void)?
 
@@ -241,7 +248,7 @@ class TunnelContainer: NSObject {
         self.isActivateOnDemandEnabled = tunnel.isOnDemandEnabled
         self.tunnelProvider = tunnel
         super.init()
-        if (status != .inactive) {
+        if (status != .inactive || isActivateOnDemandEnabled) {
             startObservingTunnelStatus()
         }
     }
@@ -258,7 +265,7 @@ class TunnelContainer: NSObject {
         let status = TunnelStatus(from: self.tunnelProvider.connection.status)
         self.status = status
         self.isActivateOnDemandEnabled = self.tunnelProvider.isOnDemandEnabled
-        if (status != .inactive) {
+        if (status != .inactive || isActivateOnDemandEnabled) {
             startObservingTunnelStatus()
         }
     }
@@ -375,9 +382,11 @@ class TunnelContainer: NSObject {
                 }
                 s.status = TunnelStatus(from: connection.status)
                 if (s.status == .inactive) {
-                    s.statusObservationToken = nil
                     s.onDeactivationComplete?()
                     s.onDeactivationComplete = nil
+                    if (!s.isActivateOnDemandEnabled) {
+                        s.statusObservationToken = nil
+                    }
                 }
         }
     }