]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Tunnels manager: After saving after activating on-demand, reload tunnel
authorRoopesh Chander <roop@roopc.net>
Wed, 14 Nov 2018 07:30:52 +0000 (13:00 +0530)
committerRoopesh Chander <roop@roopc.net>
Wed, 14 Nov 2018 07:32:53 +0000 (13:02 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/VPN/TunnelsManager.swift

index 307ecfbaed2dc1cd252f57c5fc4efe08fdd7429c..0a3dd8707b3bae447cc7a6b754951afa513291ef 100644 (file)
@@ -135,6 +135,7 @@ class TunnelsManager {
         tunnelProviderManager.localizedDescription = tunnelName
         tunnelProviderManager.isEnabled = true
 
+        let isActivatingOnDemand = (!tunnelProviderManager.isOnDemandEnabled && activateOnDemandSetting.isActivateOnDemandEnabled)
         activateOnDemandSetting.apply(on: tunnelProviderManager)
 
         tunnelProviderManager.saveToPreferences { [weak self] (error) in
@@ -158,9 +159,21 @@ class TunnelsManager {
                     tunnel.beginRestart()
                 }
 
-                tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled
-
-                completionHandler(nil)
+                if (isActivatingOnDemand) {
+                    // Reload tunnel after saving.
+                    // Without this, the tunnel stopes getting updates on the tunnel status from iOS.
+                    tunnelProviderManager.loadFromPreferences { (error) in
+                        tunnel.isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled
+                        guard (error == nil) else {
+                            os_log("Modify: Re-loading after saving configuration failed: %{public}@", log: OSLog.default, type: .error, "\(error!)")
+                            completionHandler(TunnelManagementError.vpnSystemErrorOnModifyTunnel)
+                            return
+                        }
+                        completionHandler(nil)
+                    }
+                } else {
+                    completionHandler(nil)
+                }
             }
         }
     }