]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Kit: make it possible to opt-out from automatically raising the reasserting flag. am/develop
authorAndrej Mihajlov <and@mullvad.net>
Mon, 21 Feb 2022 14:29:02 +0000 (15:29 +0100)
committerAndrej Mihajlov <and@mullvad.net>
Mon, 21 Feb 2022 14:54:49 +0000 (15:54 +0100)
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Sources/WireGuardKit/WireGuardAdapter.swift

index 0f00b8982580c848ed14f282bc9b7246eb6003c1..19cfdbb83e70f2f99f4eb10ab256cac65022f8c9 100644 (file)
@@ -56,6 +56,10 @@ public class WireGuardAdapter {
     /// Adapter state.
     private var state: State = .stopped
 
+    /// Whether adapter should automatically raise the `reasserting` flag when updating
+    /// tunnel configuration.
+    private let shouldHandleReasserting: Bool
+
     /// Tunnel device file descriptor.
     private var tunnelFileDescriptor: Int32? {
         var ctlInfo = ctl_info()
@@ -128,9 +132,12 @@ public class WireGuardAdapter {
     /// Designated initializer.
     /// - Parameter packetTunnelProvider: an instance of `NEPacketTunnelProvider`. Internally stored
     ///   as a weak reference.
+    /// - Parameter shouldHandleReasserting: whether adapter should automatically raise the
+    ///   `reasserting` flag when updating tunnel configuration.
     /// - Parameter logHandler: a log handler closure.
-    public init(with packetTunnelProvider: NEPacketTunnelProvider, logHandler: @escaping LogHandler) {
+    public init(with packetTunnelProvider: NEPacketTunnelProvider, shouldHandleReasserting: Bool = true, logHandler: @escaping LogHandler) {
         self.packetTunnelProvider = packetTunnelProvider
+        self.shouldHandleReasserting = shouldHandleReasserting
         self.logHandler = logHandler
 
         setupLogHandler()
@@ -248,9 +255,14 @@ public class WireGuardAdapter {
             // Tell the system that the tunnel is going to reconnect using new WireGuard
             // configuration.
             // This will broadcast the `NEVPNStatusDidChange` notification to the GUI process.
-            self.packetTunnelProvider?.reasserting = true
+            if self.shouldHandleReasserting {
+                self.packetTunnelProvider?.reasserting = true
+            }
+
             defer {
-                self.packetTunnelProvider?.reasserting = false
+                if self.shouldHandleReasserting {
+                    self.packetTunnelProvider?.reasserting = false
+                }
             }
 
             let settingsGenerator: PacketTunnelSettingsGenerator