2018-08-23 08:19:25 +00:00
|
|
|
//
|
2018-08-23 10:07:55 +00:00
|
|
|
// TunnelKitProvider+Interaction.swift
|
|
|
|
// TunnelKit
|
2018-08-23 08:19:25 +00:00
|
|
|
//
|
|
|
|
// Created by Davide De Rosa on 9/24/17.
|
|
|
|
// Copyright © 2018 London Trust Media. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
2018-08-23 10:07:55 +00:00
|
|
|
extension TunnelKitProvider {
|
2018-08-23 08:19:25 +00:00
|
|
|
|
|
|
|
// MARK: Interaction
|
|
|
|
|
2018-08-23 10:07:55 +00:00
|
|
|
/// The messages accepted by `TunnelKitProvider`.
|
2018-08-23 08:19:25 +00:00
|
|
|
public class Message: Equatable {
|
|
|
|
|
|
|
|
/// Requests a snapshot of the latest debug log. Returns the log data decoded from UTF-8.
|
|
|
|
public static let requestLog = Message(0xff)
|
|
|
|
|
|
|
|
/// Requests the current bytes count from data channel (if connected).
|
|
|
|
///
|
|
|
|
/// Data is 16 bytes: low 8 = received, high 8 = sent.
|
|
|
|
public static let dataCount = Message(0xfe)
|
|
|
|
|
|
|
|
/// The underlying raw message `Data` to forward to the tunnel via IPC.
|
|
|
|
public let data: Data
|
|
|
|
|
|
|
|
private init(_ byte: UInt8) {
|
|
|
|
data = Data(bytes: [byte])
|
|
|
|
}
|
|
|
|
|
|
|
|
init(_ data: Data) {
|
|
|
|
self.data = data
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: Equatable
|
|
|
|
|
|
|
|
/// :nodoc:
|
|
|
|
public static func ==(lhs: Message, rhs: Message) -> Bool {
|
|
|
|
return (lhs.data == rhs.data)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-08-23 10:07:55 +00:00
|
|
|
/// The errors raised by `TunnelKitProvider`.
|
2018-08-23 08:19:25 +00:00
|
|
|
public enum ProviderError: Error {
|
|
|
|
|
2018-08-23 10:07:55 +00:00
|
|
|
/// The `TunnelKitProvider.Configuration` provided is incorrect or incomplete.
|
2018-08-23 08:19:25 +00:00
|
|
|
case configuration(field: String)
|
|
|
|
|
|
|
|
/// Credentials are missing or protected (e.g. device locked).
|
|
|
|
case credentials(field: String)
|
|
|
|
|
|
|
|
/// The pseudo-random number generator could not be initialized.
|
|
|
|
case prngInitialization
|
|
|
|
|
|
|
|
/// The TLS certificate could not be serialized.
|
|
|
|
case certificateSerialization
|
|
|
|
|
|
|
|
/// Socket endpoint could not be resolved.
|
|
|
|
case dnsFailure
|
|
|
|
|
|
|
|
/// No more protocols available to try.
|
|
|
|
case exhaustedProtocols
|
|
|
|
|
|
|
|
/// Socket failed to reach active state.
|
|
|
|
case socketActivity
|
|
|
|
|
|
|
|
/// An error occurred at the link level.
|
|
|
|
case linkError
|
|
|
|
|
|
|
|
/// The current network changed (e.g. switched from WiFi to data connection).
|
|
|
|
case networkChanged
|
|
|
|
}
|
|
|
|
}
|