First working version

This commit is contained in:
GFWFighter
2023-10-24 18:29:53 +03:30
parent fe7cdc276e
commit b83fcce310
19 changed files with 734 additions and 32 deletions

View File

@@ -0,0 +1,52 @@
//
// Logger.swift
// SingBoxPacketTunnel
//
// Created by GFWFighter on 10/24/23.
//
import Foundation
class Logger {
private static let queue = DispatchQueue.init(label: "\(FilePath.packageName).PacketTunnelLog", qos: .utility)
private let fileManager = FileManager.default
private let url: URL
private var _fileHandle: FileHandle?
private var fileHandle: FileHandle? {
get {
if let _fileHandle { return _fileHandle }
let handle = try? FileHandle(forWritingTo: url)
_fileHandle = handle
return handle
}
}
private var lock = NSLock()
init(path: URL) {
url = path
}
func write(_ message: String) {
Logger.queue.async { [message, unowned self] () in
lock.lock()
defer { lock.unlock() }
let output = message + "\n"
do {
if !self.fileManager.fileExists(atPath: url.path) {
try output.write(to: url, atomically: true, encoding: .utf8)
} else {
guard let fileHandle else {
return
}
fileHandle.seekToEndOfFile()
if let data = output.data(using: .utf8) {
fileHandle.write(data)
}
}
} catch {}
}
}
}

View File

@@ -11,18 +11,18 @@ class PacketTunnelProvider: ExtensionProvider {
private var upload: Int64 = 0
private var download: Int64 = 0
private var trafficLock: NSLock = NSLock()
// private var trafficLock: NSLock = NSLock()
var trafficReader: TrafficReader!
// var trafficReader: TrafficReader!
override func startTunnel(options: [String : NSObject]?) async throws {
try await super.startTunnel(options: options)
trafficReader = TrafficReader { [unowned self] traffic in
/*trafficReader = TrafficReader { [unowned self] traffic in
trafficLock.lock()
upload += traffic.up
download += traffic.down
trafficLock.unlock()
}
}*/
}
override func handleAppMessage(_ messageData: Data) async -> Data? {

View File

@@ -18,8 +18,11 @@ open class ExtensionProvider: NEPacketTunnelProvider {
private var systemProxyEnabled = false
private var platformInterface: ExtensionPlatformInterface!
private var config: String!
override open func startTunnel(options: [String: NSObject]?) async throws {
try? FileManager.default.removeItem(at: ExtensionProvider.errorFile)
try? FileManager.default.removeItem(at: FilePath.workingDirectory.appendingPathComponent("TestLog"))
let disableMemoryLimit = (options?["DisableMemoryLimit"] as? NSString as? String ?? "NO") == "YES"
guard let config = options?["Config"] as? NSString as? String else {
@@ -31,8 +34,6 @@ open class ExtensionProvider: NEPacketTunnelProvider {
return
}
self.config = config
try? FileManager.default.removeItem(at: ExtensionProvider.errorFile)
do {
try FileManager.default.createDirectory(at: FilePath.workingDirectory, withIntermediateDirectories: true)
@@ -41,7 +42,12 @@ open class ExtensionProvider: NEPacketTunnelProvider {
return
}
LibboxSetup(FilePath.sharedDirectory.relativePath, FilePath.workingDirectory.relativePath, FilePath.cacheDirectory.relativePath, false)
LibboxSetup(
FilePath.sharedDirectory.relativePath,
FilePath.workingDirectory.relativePath,
FilePath.cacheDirectory.relativePath,
false
)
var error: NSError?
LibboxRedirectStderr(FilePath.cacheDirectory.appendingPathComponent("stderr.log").relativePath, &error)

View File

@@ -19,7 +19,7 @@ class SingBox {
else {
return nil
}
json["log"] = [
/*json["log"] = [
"disabled": false,
"level": "info",
"output": "log",
@@ -50,7 +50,7 @@ class SingBox {
routing["geosite"] = [
"path": FilePath.assetsDirectory.appendingPathComponent("geosite.db"),
]
json["route"] = routing
json["route"] = routing*/
guard let data = try? JSONSerialization.data(withJSONObject: json) else {
return nil
}