mirror of
https://github.com/passepartoutvpn/passepartout-apple.git
synced 2025-01-12 03:29:21 +00:00
9769a151db
When e.g. a OpenVPNModule is created without a configuration and a provider/server is then selected, the ProfileProcessor class serializes the profile with the provider configuration injected. When the module is re-edited, we can see the provider server configuration in the module after selecting "None" as provider. Instead, validate the provider modules in ProfileProcessor, but generate the provider configuration on the fly in the tunnel.
77 lines
2.5 KiB
Swift
77 lines
2.5 KiB
Swift
//
|
|
// PacketTunnelProvider.swift
|
|
// Passepartout
|
|
//
|
|
// Created by Davide De Rosa on 2/24/24.
|
|
// Copyright (c) 2024 Davide De Rosa. All rights reserved.
|
|
//
|
|
// https://github.com/passepartoutvpn
|
|
//
|
|
// This file is part of Passepartout.
|
|
//
|
|
// Passepartout is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Passepartout is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
|
//
|
|
|
|
import CommonLibrary
|
|
@preconcurrency import NetworkExtension
|
|
import PassepartoutKit
|
|
|
|
final class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable {
|
|
private var fwd: NEPTPForwarder?
|
|
|
|
override func startTunnel(options: [String: NSObject]? = nil) async throws {
|
|
PassepartoutConfiguration.shared.configureLogging(
|
|
to: BundleConfiguration.urlForTunnelLog,
|
|
parameters: Constants.shared.log,
|
|
logsPrivateData: UserDefaults.appGroup.bool(forKey: AppPreference.logsPrivateData.key)
|
|
)
|
|
do {
|
|
fwd = try await NEPTPForwarder(
|
|
provider: self,
|
|
decoder: Registry.sharedProtocolCoder,
|
|
registry: .shared,
|
|
environment: .shared
|
|
)
|
|
try await fwd?.startTunnel(options: options)
|
|
} catch {
|
|
pp_log(.app, .fault, "Unable to start tunnel: \(error)")
|
|
PassepartoutConfiguration.shared.flushLog()
|
|
throw error
|
|
}
|
|
}
|
|
|
|
override func stopTunnel(with reason: NEProviderStopReason) async {
|
|
await fwd?.stopTunnel(with: reason)
|
|
fwd = nil
|
|
PassepartoutConfiguration.shared.flushLog()
|
|
}
|
|
|
|
override func cancelTunnelWithError(_ error: (any Error)?) {
|
|
PassepartoutConfiguration.shared.flushLog()
|
|
super.cancelTunnelWithError(error)
|
|
}
|
|
|
|
override func handleAppMessage(_ messageData: Data) async -> Data? {
|
|
await fwd?.handleAppMessage(messageData)
|
|
}
|
|
|
|
override func wake() {
|
|
fwd?.wake()
|
|
}
|
|
|
|
override func sleep() async {
|
|
await fwd?.sleep()
|
|
}
|
|
}
|