Skip to content

Commit

Permalink
fixup tunnel
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanndickson committed Jan 8, 2025
1 parent 8b60368 commit 6398b00
Showing 1 changed file with 13 additions and 20 deletions.
33 changes: 13 additions & 20 deletions Coder Desktop/VPN/TunnelHandle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,32 @@ let startSymbol = "OpenTunnel"
actor TunnelHandle {
private let logger = Logger(subsystem: "com.coder.Coder.CoderPacketTunnelProvider", category: "tunnel-handle")

private var openTunnelFn: OpenTunnel!
private var tunnelPipe: Pipe!
private var dylibHandle: UnsafeMutableRawPointer!
private let tunnelWritePipe: Pipe
private let tunnelReadPipe: Pipe
private let dylibHandle: UnsafeMutableRawPointer

var writeFD: Int32 { tunnelReadPipe.fileHandleForWriting.fileDescriptor }
var readFD: Int32 { tunnelWritePipe.fileHandleForReading.fileDescriptor }

init(dylibPath: URL) throws(TunnelHandleError) {
dylibHandle = dlopen(dylibPath.path, RTLD_NOW | RTLD_LOCAL)

guard dylibHandle != nil else {
var errStr = "UNKNOWN"
let e = dlerror()
if e != nil {
errStr = String(cString: e!)
}
throw TunnelHandleError.dylib(errStr)
}

let startSym = dlsym(dylibHandle, startSymbol)
guard startSym != nil else {
var errStr = "UNKNOWN"
let e = dlerror()
if e != nil {
errStr = String(cString: e!)
}
throw TunnelHandleError.symbol(startSymbol, errStr)
throw .symbol(startSymbol, errStr)
}
openTunnelFn = unsafeBitCast(startSym, to: OpenTunnel.self)
tunnelPipe = Pipe()
let res = openTunnelFn(tunnelPipe.fileHandleForReading.fileDescriptor,
tunnelPipe.fileHandleForWriting.fileDescriptor)
let openTunnelFn = unsafeBitCast(startSym, to: OpenTunnel.self)
tunnelReadPipe = Pipe()
tunnelWritePipe = Pipe()
let res = openTunnelFn(tunnelReadPipe.fileHandleForReading.fileDescriptor,
tunnelWritePipe.fileHandleForWriting.fileDescriptor)
guard res == 0 else {
throw TunnelHandleError.openTunnel(OpenTunnelError(rawValue: res) ?? .unknown)
throw .openTunnel(OpenTunnelError(rawValue: res) ?? .unknown)
}
}

Expand All @@ -46,13 +41,11 @@ actor TunnelHandle {
}

enum TunnelHandleError: Error {
case dylib(String)
case symbol(String, String)
case openTunnel(OpenTunnelError)

var description: String {
switch self {
case let .dylib(d): return d
case let .symbol(symbol, message): return "\(symbol): \(message)"
case let .openTunnel(error): return "OpenTunnel: \(error.message)"
}
Expand Down

0 comments on commit 6398b00

Please sign in to comment.