Localize remaining strings in network extension
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
@@ -4,32 +4,16 @@
|
||||
import NetworkExtension
|
||||
|
||||
class ErrorNotifier {
|
||||
|
||||
let activationAttemptId: String?
|
||||
weak var tunnelProvider: NEPacketTunnelProvider?
|
||||
|
||||
init(activationAttemptId: String?, tunnelProvider: NEPacketTunnelProvider) {
|
||||
init(activationAttemptId: String?) {
|
||||
self.activationAttemptId = activationAttemptId
|
||||
self.tunnelProvider = tunnelProvider
|
||||
ErrorNotifier.removeLastErrorFile()
|
||||
}
|
||||
|
||||
func errorMessage(for error: PacketTunnelProviderError) -> (String, String)? {
|
||||
switch error {
|
||||
case .savedProtocolConfigurationIsInvalid:
|
||||
return ("Activation failure", "Could not retrieve tunnel information from the saved configuration.")
|
||||
case .dnsResolutionFailure:
|
||||
return ("DNS resolution failure", "One or more endpoint domains could not be resolved.")
|
||||
case .couldNotStartWireGuard:
|
||||
return ("Activation failure", "WireGuard backend could not be started.")
|
||||
case .coultNotSetNetworkSettings:
|
||||
return ("Activation failure", "Error applying network settings on the tunnel.")
|
||||
}
|
||||
}
|
||||
|
||||
func notify(_ error: PacketTunnelProviderError) {
|
||||
guard let (title, message) = errorMessage(for: error), let activationAttemptId = activationAttemptId, let lastErrorFilePath = FileManager.networkExtensionLastErrorFileURL?.path else { return }
|
||||
let errorMessageData = "\(activationAttemptId)\n\(title)\n\(message)".data(using: .utf8)
|
||||
guard let activationAttemptId = activationAttemptId, let lastErrorFilePath = FileManager.networkExtensionLastErrorFileURL?.path else { return }
|
||||
let errorMessageData = "\(activationAttemptId)\n\(error)".data(using: .utf8)
|
||||
FileManager.default.createFile(atPath: lastErrorFilePath, contents: errorMessageData, attributes: nil)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,13 +6,6 @@ import Network
|
||||
import NetworkExtension
|
||||
import os.log
|
||||
|
||||
enum PacketTunnelProviderError: Error {
|
||||
case savedProtocolConfigurationIsInvalid
|
||||
case dnsResolutionFailure
|
||||
case couldNotStartWireGuard
|
||||
case coultNotSetNetworkSettings
|
||||
}
|
||||
|
||||
class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
|
||||
private var wgHandle: Int32?
|
||||
@@ -26,7 +19,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
|
||||
override func startTunnel(options: [String: NSObject]?, completionHandler startTunnelCompletionHandler: @escaping (Error?) -> Void) {
|
||||
let activationAttemptId = options?["activationAttemptId"] as? String
|
||||
let errorNotifier = ErrorNotifier(activationAttemptId: activationAttemptId, tunnelProvider: self)
|
||||
let errorNotifier = ErrorNotifier(activationAttemptId: activationAttemptId)
|
||||
|
||||
guard let tunnelProviderProtocol = protocolConfiguration as? NETunnelProviderProtocol,
|
||||
let tunnelConfiguration = tunnelProviderProtocol.asTunnelConfiguration() else {
|
||||
@@ -52,8 +45,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
let fileDescriptor = packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32 //swiftlint:disable:this force_cast
|
||||
if fileDescriptor < 0 {
|
||||
wg_log(.error, staticMessage: "Starting tunnel failed: Could not determine file descriptor")
|
||||
errorNotifier.notify(PacketTunnelProviderError.couldNotStartWireGuard)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotStartWireGuard)
|
||||
errorNotifier.notify(PacketTunnelProviderError.couldNotDetermineFileDescriptor)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotDetermineFileDescriptor)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -67,8 +60,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
let handle = wireguardSettings.withGoString { return wgTurnOn($0, fileDescriptor) }
|
||||
if handle < 0 {
|
||||
wg_log(.error, message: "Starting tunnel failed with wgTurnOn returning \(handle)")
|
||||
errorNotifier.notify(PacketTunnelProviderError.couldNotStartWireGuard)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotStartWireGuard)
|
||||
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotStartBackend)
|
||||
return
|
||||
}
|
||||
wgHandle = handle
|
||||
@@ -77,8 +70,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
setTunnelNetworkSettings(networkSettings) { error in
|
||||
if let error = error {
|
||||
wg_log(.error, message: "Starting tunnel failed with setTunnelNetworkSettings returning \(error.localizedDescription)")
|
||||
errorNotifier.notify(PacketTunnelProviderError.coultNotSetNetworkSettings)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.coultNotSetNetworkSettings)
|
||||
errorNotifier.notify(PacketTunnelProviderError.couldNotSetNetworkSettings)
|
||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotSetNetworkSettings)
|
||||
} else {
|
||||
startTunnelCompletionHandler(nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user