39 lines
1.3 KiB
Swift
39 lines
1.3 KiB
Swift
import libburrow
|
|
import NetworkExtension
|
|
import OSLog
|
|
|
|
class PacketTunnelProvider: NEPacketTunnelProvider {
|
|
let logger = Logger(subsystem: "com.hackclub.burrow", category: "General")
|
|
override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
|
let fild = libburrow.retrieve()
|
|
if fild == -1 {
|
|
// Not sure if this is the right way to return an error
|
|
logger.error("Failed to retrieve file descriptor for burrow.")
|
|
let err = NSError(
|
|
domain: "com.hackclub.burrow",
|
|
code: 1_010,
|
|
userInfo: [NSLocalizedDescriptionKey: "Failed to find TunInterface"]
|
|
)
|
|
completionHandler(err)
|
|
}
|
|
logger.info("fd: \(fild)")
|
|
completionHandler(nil)
|
|
}
|
|
|
|
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
|
completionHandler()
|
|
}
|
|
|
|
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
|
|
if let handler = completionHandler {
|
|
handler(messageData)
|
|
}
|
|
}
|
|
|
|
override func sleep(completionHandler: @escaping () -> Void) {
|
|
completionHandler()
|
|
}
|
|
|
|
override func wake() {
|
|
}
|
|
}
|