aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-02-21 15:29:02 +0100
committerAndrej Mihajlov <and@mullvad.net>2022-03-02 11:14:37 +0100
commitabbdeb8e398e8192c06bce06c1ac4ae67d6303ff (patch)
tree62a8a38771acebbabc7465246cc232dee855610d
parentUI: When saving on-demand rules, deactivate if reqd and then save (diff)
downloadwireguard-apple-abbdeb8e398e8192c06bce06c1ac4ae67d6303ff.tar.xz
wireguard-apple-abbdeb8e398e8192c06bce06c1ac4ae67d6303ff.zip
Kit: make it possible to opt-out from automatically raising the reasserting flag.am/reasserting-opt-out
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
-rw-r--r--Sources/WireGuardKit/WireGuardAdapter.swift18
1 files changed, 15 insertions, 3 deletions
diff --git a/Sources/WireGuardKit/WireGuardAdapter.swift b/Sources/WireGuardKit/WireGuardAdapter.swift
index 4cb2e2e..1e77011 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
+ }
}
do {