diff options
author | Andrej Mihajlov <and@mullvad.net> | 2022-02-21 15:29:02 +0100 |
---|---|---|
committer | Andrej Mihajlov <and@mullvad.net> | 2022-02-21 15:54:49 +0100 |
commit | b7f344968dfe80aae19c1b56ead5a281ad238824 (patch) | |
tree | 494387dad5a52999d8eb47c744a280b7bec3f187 | |
parent | Merge branch 'am/ignore-set-network-settings-error-when-offline' into am/develop (diff) | |
download | wireguard-apple-am/develop.tar.xz wireguard-apple-am/develop.zip |
Kit: make it possible to opt-out from automatically raising the reasserting flag.am/develop
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
-rw-r--r-- | Sources/WireGuardKit/WireGuardAdapter.swift | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Sources/WireGuardKit/WireGuardAdapter.swift b/Sources/WireGuardKit/WireGuardAdapter.swift index 0f00b89..19cfdbb 100644 --- a/Sources/WireGuardKit/WireGuardAdapter.swift +++ b/Sources/WireGuardKit/WireGuardAdapter.swift @@ -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 |