WireGuardKit: Pass logHandler via constructor
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
This commit is contained in:
parent
d2c38702c8
commit
2329f712cf
|
@ -8,7 +8,11 @@ import os
|
||||||
|
|
||||||
class PacketTunnelProvider: NEPacketTunnelProvider {
|
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) {
|
override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
||||||
let activationAttemptId = options?["activationAttemptId"] as? String
|
let activationAttemptId = options?["activationAttemptId"] as? String
|
||||||
|
@ -25,11 +29,6 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup WireGuard logger
|
|
||||||
adapter.setLogHandler { logLevel, message in
|
|
||||||
wg_log(logLevel.osLogLevel, message: message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the tunnel
|
// Start the tunnel
|
||||||
adapter.start(tunnelConfiguration: tunnelConfiguration) { adapterError in
|
adapter.start(tunnelConfiguration: tunnelConfiguration) { adapterError in
|
||||||
guard let adapterError = adapterError else {
|
guard let adapterError = adapterError else {
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class WireGuardAdapter {
|
||||||
private weak var packetTunnelProvider: NEPacketTunnelProvider?
|
private weak var packetTunnelProvider: NEPacketTunnelProvider?
|
||||||
|
|
||||||
/// Log handler closure.
|
/// Log handler closure.
|
||||||
private var logHandler: LogHandler?
|
private let logHandler: LogHandler
|
||||||
|
|
||||||
/// WireGuard internal handle returned by `wgTurnOn` that's used to associate the calls
|
/// WireGuard internal handle returned by `wgTurnOn` that's used to associate the calls
|
||||||
/// with the specific WireGuard tunnel.
|
/// with the specific WireGuard tunnel.
|
||||||
|
@ -91,14 +91,18 @@ public class WireGuardAdapter {
|
||||||
/// Designated initializer.
|
/// Designated initializer.
|
||||||
/// - Parameter packetTunnelProvider: an instance of `NEPacketTunnelProvider`. Internally stored
|
/// - Parameter packetTunnelProvider: an instance of `NEPacketTunnelProvider`. Internally stored
|
||||||
/// as a weak reference.
|
/// 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.packetTunnelProvider = packetTunnelProvider
|
||||||
|
self.logHandler = logHandler
|
||||||
|
|
||||||
|
setupLogHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
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.
|
// can happen after deallocation.
|
||||||
deactivateLogHandler()
|
wgSetLogger(nil, nil)
|
||||||
|
|
||||||
// Cancel network monitor
|
// Cancel network monitor
|
||||||
networkMonitor?.cancel()
|
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.
|
/// Start the tunnel tunnel.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - tunnelConfiguration: tunnel configuration.
|
/// - tunnelConfiguration: tunnel configuration.
|
||||||
|
@ -247,8 +237,8 @@ public class WireGuardAdapter {
|
||||||
|
|
||||||
// MARK: - Private methods
|
// MARK: - Private methods
|
||||||
|
|
||||||
/// Install WireGuard log handler.
|
/// Setup WireGuard log handler.
|
||||||
private func activateLogHandler() {
|
private func setupLogHandler() {
|
||||||
let context = Unmanaged.passUnretained(self).toOpaque()
|
let context = Unmanaged.passUnretained(self).toOpaque()
|
||||||
wgSetLogger(context) { (context, logLevel, message) in
|
wgSetLogger(context) { (context, logLevel, message) in
|
||||||
guard let context = context, let message = message else { return }
|
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.
|
/// Resolve endpoints and update network configuration.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - tunnelConfiguration: tunnel configuration
|
/// - tunnelConfiguration: tunnel configuration
|
||||||
|
|
Loading…
Reference in New Issue