@@ -6,7 +6,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
6
6
let logger = Logger ( subsystem: " com.hackclub.burrow " , category: " frontend " )
7
7
var client : BurrowIpc ?
8
8
var osInitialized = false
9
- override func startTunnel( options: [ String : NSObject ] ? , completionHandler : @escaping ( Error ? ) -> Void ) {
9
+ override func startTunnel( options: [ String : NSObject ] ? = nil ) async throws {
10
10
logger. log ( " Starting tunnel " )
11
11
if !osInitialized {
12
12
libburrow. initialize_oslog ( )
@@ -15,28 +15,35 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
15
15
libburrow. start_srv ( )
16
16
client = BurrowIpc ( logger: logger)
17
17
logger. info ( " Started server " )
18
- Task {
19
- do {
20
- let command = BurrowRequest ( id: 0 , command: " ServerConfig " )
21
- guard let data = try await client? . request ( command, type: Response< BurrowResult< ServerConfigData>>. self )
22
- else {
23
- throw BurrowError . cantParseResult
24
- }
25
- let encoded = try JSONEncoder ( ) . encode ( data. result)
26
- self . logger. log ( " Received final data: \( String ( decoding: encoded, as: UTF8 . self) ) " )
27
- guard let serverconfig = data. result. Ok else {
28
- throw BurrowError . resultIsError
29
- }
30
- guard let tunNs = self . generateTunSettings ( from: serverconfig) else {
31
- throw BurrowError . addrDoesntExist
32
- }
33
- try await self . setTunnelNetworkSettings ( tunNs)
34
- self . logger. info ( " Set remote tunnel address to \( tunNs. tunnelRemoteAddress) " )
35
- completionHandler ( nil )
36
- } catch {
37
- self . logger. error ( " An error occurred: \( error) " )
38
- completionHandler ( error)
18
+ do {
19
+ let command = BurrowSingleCommand ( id: 0 , command: " ServerConfig " )
20
+ guard let data = try await client? . request ( command, type: Response< BurrowResult< ServerConfigData>>. self )
21
+ else {
22
+ throw BurrowError . cantParseResult
39
23
}
24
+ let encoded = try JSONEncoder ( ) . encode ( data. result)
25
+ self . logger. log ( " Received final data: \( String ( decoding: encoded, as: UTF8 . self) ) " )
26
+ guard let serverconfig = data. result. Ok else {
27
+ throw BurrowError . resultIsError
28
+ }
29
+ guard let tunNs = self . generateTunSettings ( from: serverconfig) else {
30
+ throw BurrowError . addrDoesntExist
31
+ }
32
+ try await self . setTunnelNetworkSettings ( tunNs)
33
+ self . logger. info ( " Set remote tunnel address to \( tunNs. tunnelRemoteAddress) " )
34
+
35
+ // let tunFd = self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int;
36
+ // self.logger.info("Found File Descriptor: \(tunFd)")
37
+ let startCommand = start_req_fd ( id: 1 )
38
+ guard let data = try await client? . request ( startCommand, type: Response< BurrowResult< String>>. self )
39
+ else {
40
+ throw BurrowError . cantParseResult
41
+ }
42
+ let encodedStartRes = try JSONEncoder ( ) . encode ( data. result)
43
+ self . logger. log ( " Received start server response: \( String ( decoding: encodedStartRes, as: UTF8 . self) ) " )
44
+ } catch {
45
+ self . logger. error ( " An error occurred: \( error) " )
46
+ throw error
40
47
}
41
48
}
42
49
private func generateTunSettings( from: ServerConfigData ) -> NETunnelNetworkSettings ? {
@@ -50,16 +57,12 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
50
57
logger. log ( " Initialized ipv4 settings: \( nst. ipv4Settings) " )
51
58
return nst
52
59
}
53
- override func stopTunnel( with reason: NEProviderStopReason , completionHandler: @escaping ( ) -> Void ) {
54
- completionHandler ( )
60
+ override func stopTunnel( with reason: NEProviderStopReason ) async {
55
61
}
56
- override func handleAppMessage( _ messageData: Data , completionHandler: ( ( Data ? ) -> Void ) ? ) {
57
- if let handler = completionHandler {
58
- handler ( messageData)
59
- }
62
+ override func handleAppMessage( _ messageData: Data ) async -> Data ? {
63
+ messageData
60
64
}
61
- override func sleep( completionHandler: @escaping ( ) -> Void ) {
62
- completionHandler ( )
65
+ override func sleep( ) async {
63
66
}
64
67
override func wake( ) {
65
68
}
0 commit comments