]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
WireGuardKit: Pass logHandler via constructor
authorAndrej Mihajlov <and@mullvad.net>
Wed, 2 Dec 2020 12:48:24 +0000 (13:48 +0100)
committerAndrej Mihajlov <and@mullvad.net>
Thu, 3 Dec 2020 12:22:52 +0000 (13:22 +0100)
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift

index 28eb986fdf6a11af86f54f45af9353ff4b9fbd37..f88d1175bac306b1f9ed75c06fdcdb08e564090f 100644 (file)
@@ -8,7 +8,11 @@ import os
 
 class PacketTunnelProvider: NEPacketTunnelProvider {
 
-    private lazy var adapter = WireGuardAdapter(with: self)
+    private lazy var adapter: WireGuardAdapter = {
+        return WireGuardAdapter(with: self) { logLevel, message in
+            wg_log(logLevel.osLogLevel, message: message)
+        }
+    }()
 
     override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
         let activationAttemptId = options?["activationAttemptId"] as? String
@@ -25,11 +29,6 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
             return
         }
 
-        // Setup WireGuard logger
-        adapter.setLogHandler { logLevel, message in
-            wg_log(logLevel.osLogLevel, message: message)
-        }
-
         // Start the tunnel
         adapter.start(tunnelConfiguration: tunnelConfiguration) { adapterError in
             guard let adapterError = adapterError else {
index 749def346c3a64b5a3833ca838cc9cdc9fb087cd..a19939f662c543e88544e2131fe0abb8efe2a568 100644 (file)
@@ -35,7 +35,7 @@ public class WireGuardAdapter {
     private weak var packetTunnelProvider: NEPacketTunnelProvider?
 
     /// Log handler closure.
-    private var logHandler: LogHandler?
+    private let logHandler: LogHandler
 
     /// WireGuard internal handle returned by `wgTurnOn` that's used to associate the calls
     /// with the specific WireGuard tunnel.
@@ -91,14 +91,18 @@ public class WireGuardAdapter {
     /// Designated initializer.
     /// - Parameter packetTunnelProvider: an instance of `NEPacketTunnelProvider`. Internally stored
     ///   as a weak reference.
-    public init(with packetTunnelProvider: NEPacketTunnelProvider) {
+    /// - Parameter logHandler: a log handler closure.
+    public init(with packetTunnelProvider: NEPacketTunnelProvider, logHandler: @escaping LogHandler) {
         self.packetTunnelProvider = packetTunnelProvider
+        self.logHandler = logHandler
+
+        setupLogHandler()
     }
 
     deinit {
-        // Force deactivate logger to make sure that no further calls to the instance of this class
+        // Force remove logger to make sure that no further calls to the instance of this class
         // can happen after deallocation.
-        deactivateLogHandler()
+        wgSetLogger(nil, nil)
 
         // Cancel network monitor
         networkMonitor?.cancel()
@@ -129,20 +133,6 @@ public class WireGuardAdapter {
         }
     }
 
-    /// Set log handler.
-    /// - Parameter logHandler: log handler closure
-    public func setLogHandler(_ logHandler: LogHandler?) {
-        workQueue.async {
-            self.logHandler = logHandler
-        }
-
-        if logHandler == nil {
-            deactivateLogHandler()
-        } else {
-            activateLogHandler()
-        }
-    }
-
     /// Start the tunnel tunnel.
     /// - Parameters:
     ///   - tunnelConfiguration: tunnel configuration.
@@ -247,8 +237,8 @@ public class WireGuardAdapter {
 
     // MARK: - Private methods
 
-    /// Install WireGuard log handler.
-    private func activateLogHandler() {
+    /// Setup WireGuard log handler.
+    private func setupLogHandler() {
         let context = Unmanaged.passUnretained(self).toOpaque()
         wgSetLogger(context) { (context, logLevel, message) in
             guard let context = context, let message = message else { return }
@@ -263,11 +253,6 @@ public class WireGuardAdapter {
         }
     }
 
-    /// Uninstall WireGuard log handler.
-    private func deactivateLogHandler() {
-        wgSetLogger(nil, nil)
-    }
-
     /// Resolve endpoints and update network configuration.
     /// - Parameters:
     ///   - tunnelConfiguration: tunnel configuration