@@ -6,37 +6,32 @@ let startSymbol = "OpenTunnel"
6
6
actor TunnelHandle {
7
7
private let logger = Logger ( subsystem: " com.coder.Coder.CoderPacketTunnelProvider " , category: " tunnel-handle " )
8
8
9
- private var openTunnelFn : OpenTunnel !
10
- private var tunnelPipe : Pipe !
11
- private var dylibHandle : UnsafeMutableRawPointer !
9
+ private let tunnelWritePipe : Pipe
10
+ private let tunnelReadPipe : Pipe
11
+ private let dylibHandle : UnsafeMutableRawPointer
12
+
13
+ var writeFD : Int32 { tunnelReadPipe. fileHandleForWriting. fileDescriptor }
14
+ var readFD : Int32 { tunnelWritePipe. fileHandleForReading. fileDescriptor }
12
15
13
16
init ( dylibPath: URL ) throws ( TunnelHandleError) {
14
17
dylibHandle = dlopen ( dylibPath. path, RTLD_NOW | RTLD_LOCAL)
15
18
16
- guard dylibHandle != nil else {
17
- var errStr = " UNKNOWN "
18
- let e = dlerror ( )
19
- if e != nil {
20
- errStr = String ( cString: e!)
21
- }
22
- throw TunnelHandleError . dylib ( errStr)
23
- }
24
-
25
19
let startSym = dlsym ( dylibHandle, startSymbol)
26
20
guard startSym != nil else {
27
21
var errStr = " UNKNOWN "
28
22
let e = dlerror ( )
29
23
if e != nil {
30
24
errStr = String ( cString: e!)
31
25
}
32
- throw TunnelHandleError . symbol ( startSymbol, errStr)
26
+ throw . symbol( startSymbol, errStr)
33
27
}
34
- openTunnelFn = unsafeBitCast ( startSym, to: OpenTunnel . self)
35
- tunnelPipe = Pipe ( )
36
- let res = openTunnelFn ( tunnelPipe. fileHandleForReading. fileDescriptor,
37
- tunnelPipe. fileHandleForWriting. fileDescriptor)
28
+ let openTunnelFn = unsafeBitCast ( startSym, to: OpenTunnel . self)
29
+ tunnelReadPipe = Pipe ( )
30
+ tunnelWritePipe = Pipe ( )
31
+ let res = openTunnelFn ( tunnelReadPipe. fileHandleForReading. fileDescriptor,
32
+ tunnelWritePipe. fileHandleForWriting. fileDescriptor)
38
33
guard res == 0 else {
39
- throw TunnelHandleError . openTunnel ( OpenTunnelError ( rawValue: res) ?? . unknown)
34
+ throw . openTunnel( OpenTunnelError ( rawValue: res) ?? . unknown)
40
35
}
41
36
}
42
37
@@ -46,13 +41,11 @@ actor TunnelHandle {
46
41
}
47
42
48
43
enum TunnelHandleError : Error {
49
- case dylib( String )
50
44
case symbol( String , String )
51
45
case openTunnel( OpenTunnelError )
52
46
53
47
var description : String {
54
48
switch self {
55
- case let . dylib( d) : return d
56
49
case let . symbol( symbol, message) : return " \( symbol) : \( message) "
57
50
case let . openTunnel( error) : return " OpenTunnel: \( error. message) "
58
51
}
0 commit comments