diff --git a/Apple/NetworkExtension/PacketTunnelProvider.swift b/Apple/NetworkExtension/PacketTunnelProvider.swift index a8e42e0..ede20d9 100644 --- a/Apple/NetworkExtension/PacketTunnelProvider.swift +++ b/Apple/NetworkExtension/PacketTunnelProvider.swift @@ -10,14 +10,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { case missingTunnelConfiguration } - private let logger = Logger.logger(for: PacketTunnelProvider.self) - - private var client: TunnelClient { - get throws { try _client.get() } - } - private let _client: Result = Result { - try TunnelClient.unix(socketURL: Constants.socketURL) - } + private static let logger = Logger.logger(for: PacketTunnelProvider.self) override init() { do { @@ -26,31 +19,33 @@ class PacketTunnelProvider: NEPacketTunnelProvider { databasePath: try Constants.databaseURL.path(percentEncoded: false) ) } catch { - logger.error("Failed to spawn networking thread: \(error)") + Self.logger.error("Failed to spawn networking thread: \(error)") } } - override func startTunnel(options: [String: NSObject]? = nil) async throws { + nonisolated override func startTunnel(options: [String: NSObject]? = nil) async throws { do { + let client = try TunnelClient.unix(socketURL: Constants.socketURL) let configuration = try await Array(client.tunnelConfiguration(.init()).prefix(1)).first guard let settings = configuration?.settings else { throw Error.missingTunnelConfiguration } try await setTunnelNetworkSettings(settings) _ = try await client.tunnelStart(.init()) - logger.log("Started tunnel with network settings: \(settings)") + Self.logger.log("Started tunnel with network settings: \(settings)") } catch { - logger.error("Failed to start tunnel: \(error)") + Self.logger.error("Failed to start tunnel: \(error)") throw error } } - override func stopTunnel(with reason: NEProviderStopReason) async { + nonisolated override func stopTunnel(with reason: NEProviderStopReason) async { do { + let client = try TunnelClient.unix(socketURL: Constants.socketURL) _ = try await client.tunnelStop(.init()) - logger.log("Stopped client") + Self.logger.log("Stopped client") } catch { - logger.error("Failed to stop tunnel: \(error)") + Self.logger.error("Failed to stop tunnel: \(error)") } } }