Files
umbrix/ios/SingBoxPacketTunnel/PacketTunnelProvider.swift

38 lines
1004 B
Swift
Raw Normal View History

2023-10-16 20:43:42 +03:30
//
// PacketTunnelProvider.swift
// SingBoxPacketTunnel
//
// Created by GFWFighter on 7/24/1402 AP.
//
import NetworkExtension
2023-10-17 03:15:15 +03:30
class PacketTunnelProvider: ExtensionProvider {
2023-10-16 20:43:42 +03:30
2023-10-17 03:15:15 +03:30
private var upload: Int64 = 0
private var download: Int64 = 0
private var trafficLock: NSLock = NSLock()
2023-10-16 20:43:42 +03:30
2023-10-17 03:15:15 +03:30
var trafficReader: TrafficReader!
2023-10-16 20:43:42 +03:30
2023-10-17 03:15:15 +03:30
override func startTunnel(options: [String : NSObject]?) async throws {
try await super.startTunnel(options: options)
trafficReader = TrafficReader { [unowned self] traffic in
trafficLock.lock()
upload += traffic.up
download += traffic.down
trafficLock.unlock()
2023-10-16 20:43:42 +03:30
}
}
2023-10-17 03:15:15 +03:30
override func handleAppMessage(_ messageData: Data) async -> Data? {
let message = String(data: messageData, encoding: .utf8)
switch message {
case "stats":
return "\(upload),\(download)".data(using: .utf8)!
default:
return nil
}
2023-10-16 20:43:42 +03:30
}
}