fix logger

This commit is contained in:
anlicheng 2026-02-04 00:07:06 +08:00
parent 57e360bee2
commit c63b20b568
10 changed files with 63 additions and 78 deletions

View File

@ -32,10 +32,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
// //
let rsaCipher = try! CCRSACipher(keySize: 1024) let rsaCipher = try! CCRSACipher(keySize: 1024)
let aesChiper = CCAESChiper() let aesChiper = CCAESChiper()
let logger = SDLLogger(level: .debug)
self.rootTask = Task { self.rootTask = Task {
self.contextActor = SDLContextActor(provider: self, config: config, rsaCipher: rsaCipher, aesCipher: aesChiper, logger: logger) self.contextActor = SDLContextActor(provider: self, config: config, rsaCipher: rsaCipher, aesCipher: aesChiper)
await self.contextActor?.start() await self.contextActor?.start()
completionHandler(nil) completionHandler(nil)
} }

View File

@ -54,7 +54,6 @@ actor SDLNATProberActor {
private let udpHole: SDLUDPHole private let udpHole: SDLUDPHole
private let addressArray: [[SocketAddress]] private let addressArray: [[SocketAddress]]
private let logger: SDLLogger
// MARK: - Completion // MARK: - Completion
private var cookieId: UInt32 = 1 private var cookieId: UInt32 = 1
@ -63,10 +62,9 @@ actor SDLNATProberActor {
// MARK: - Init // MARK: - Init
init(udpHole: SDLUDPHole, addressArray: [[SocketAddress]], logger: SDLLogger) { init(udpHole: SDLUDPHole, addressArray: [[SocketAddress]]) {
self.udpHole = udpHole self.udpHole = udpHole
self.addressArray = addressArray self.addressArray = addressArray
self.logger = logger
} }
// MARK: - Public API // MARK: - Public API
@ -104,7 +102,7 @@ actor SDLNATProberActor {
// 退nat // 退nat
if session.replies[1] != nil { if session.replies[1] != nil {
let localAddress = self.udpHole.getLocalAddress() let localAddress = self.udpHole.getLocalAddress()
if reply.socketAddress() == localAddress { if await reply.socketAddress() == localAddress {
finish(cookie: session.cookieId, .noNat) finish(cookie: session.cookieId, .noNat)
return return
} }
@ -113,7 +111,7 @@ actor SDLNATProberActor {
if let step1 = session.replies[1], let step2 = session.replies[2] { if let step1 = session.replies[1], let step2 = session.replies[2] {
// natAddress2 IPIPNAT; // natAddress2 IPIPNAT;
// ip{dstIp, dstPort, srcIp, srcPort}, ip // ip{dstIp, dstPort, srcIp, srcPort}, ip
if let addr1 = step1.socketAddress(), let addr2 = step2.socketAddress(), addr1 != addr2 { if let addr1 = await step1.socketAddress(), let addr2 = await step2.socketAddress(), addr1 != addr2 {
finish(cookie: session.cookieId, .symmetric) finish(cookie: session.cookieId, .symmetric)
return return
} }

View File

@ -20,7 +20,6 @@ actor SDLPuncherActor {
private var pendingRequests: [UInt32:RegisterRequest] = [:] private var pendingRequests: [UInt32:RegisterRequest] = [:]
// holer // holer
private var logger: SDLLogger
private var querySocketAddress: SocketAddress private var querySocketAddress: SocketAddress
nonisolated private let(requestStream, requestContinuation) = AsyncStream.makeStream(of: RegisterRequest.self, bufferingPolicy: .unbounded) nonisolated private let(requestStream, requestContinuation) = AsyncStream.makeStream(of: RegisterRequest.self, bufferingPolicy: .unbounded)
@ -31,10 +30,9 @@ actor SDLPuncherActor {
let networkId: UInt32 let networkId: UInt32
} }
init(udpHole: SDLUDPHole, querySocketAddress: SocketAddress, logger: SDLLogger) { init(udpHole: SDLUDPHole, querySocketAddress: SocketAddress) {
self.udpHole = udpHole self.udpHole = udpHole
self.querySocketAddress = querySocketAddress self.querySocketAddress = querySocketAddress
self.logger = logger
} }
nonisolated func submitRegisterRequest(request: RegisterRequest) { nonisolated func submitRegisterRequest(request: RegisterRequest) {
@ -74,8 +72,8 @@ actor SDLPuncherActor {
func handlePeerInfo(peerInfo: SDLPeerInfo) async { func handlePeerInfo(peerInfo: SDLPeerInfo) async {
if let request = pendingRequests.removeValue(forKey: peerInfo.pktID) { if let request = pendingRequests.removeValue(forKey: peerInfo.pktID) {
if let remoteAddress = peerInfo.v4Info.socketAddress() { if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
self.logger.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug) SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
// register // register
var register = SDLRegister() var register = SDLRegister()
register.networkID = request.networkId register.networkID = request.networkId
@ -84,7 +82,7 @@ actor SDLPuncherActor {
self.udpHole.send(type: .register, data: try! register.serializedData(), remoteAddress: remoteAddress) self.udpHole.send(type: .register, data: try! register.serializedData(), remoteAddress: remoteAddress)
} else { } else {
self.logger.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning) SDLLogger.shared.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning)
} }
} }
} }

View File

@ -22,7 +22,6 @@ actor SDLAddressResolver {
func resolve(host: String, port: Int) async throws -> SocketAddress { func resolve(host: String, port: Int) async throws -> SocketAddress {
let key = "\(host):\(port)" let key = "\(host):\(port)"
if let cached = cache[key] { if let cached = cache[key] {
return cached return cached
} }
@ -30,8 +29,8 @@ actor SDLAddressResolver {
let address = try await pool.runIfActive { let address = try await pool.runIfActive {
try SocketAddress.makeAddressResolvingHost(host, port: port) try SocketAddress.makeAddressResolvingHost(host, port: port)
} }
cache[key] = address cache[key] = address
return address return address
} }

View File

@ -57,20 +57,17 @@ actor SDLContextActor {
// //
nonisolated private let flowTracer = SDLFlowTracer() nonisolated private let flowTracer = SDLFlowTracer()
nonisolated private let logger: SDLLogger
// //
private var loopChildWorkers: [Task<Void, Never>] = [] private var loopChildWorkers: [Task<Void, Never>] = []
public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher, logger: SDLLogger) { public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher) {
self.logger = logger
self.config = config self.config = config
self.rsaCipher = rsaCipher self.rsaCipher = rsaCipher
self.aesCipher = aesCipher self.aesCipher = aesCipher
self.sessionManager = SessionManager() self.sessionManager = SessionManager()
self.arpServer = ArpServer(known_macs: [:]) self.arpServer = ArpServer(known_macs: [:])
self.providerAdapter = SDLTunnelProviderAdapter(provider: provider, logger: logger) self.providerAdapter = SDLTunnelProviderAdapter(provider: provider)
} }
public func start() { public func start() {
@ -78,32 +75,32 @@ actor SDLContextActor {
self.loopChildWorkers.append(spawnLoop { self.loopChildWorkers.append(spawnLoop {
let noticeClient = try self.startNoticeClient() let noticeClient = try self.startNoticeClient()
self.logger.log("[SDLContext] noticeClient running!!!!") SDLLogger.shared.log("[SDLContext] noticeClient running!!!!")
try await noticeClient.waitClose() try await noticeClient.waitClose()
self.logger.log("[SDLContext] noticeClient closed!!!!") SDLLogger.shared.log("[SDLContext] noticeClient closed!!!!")
}) })
self.loopChildWorkers.append(spawnLoop { self.loopChildWorkers.append(spawnLoop {
let dnsClient = try await self.startDnsClient() let dnsClient = try await self.startDnsClient()
self.logger.log("[SDLContext] dns running!!!!") SDLLogger.shared.log("[SDLContext] dns running!!!!")
try await dnsClient.waitClose() try await dnsClient.waitClose()
self.logger.log("[SDLContext] dns closed!!!!") SDLLogger.shared.log("[SDLContext] dns closed!!!!")
}) })
self.loopChildWorkers.append(spawnLoop { self.loopChildWorkers.append(spawnLoop {
let udpHole = try await self.startUDPHole() let udpHole = try await self.startUDPHole()
self.logger.log("[SDLContext] udp running!!!!") SDLLogger.shared.log("[SDLContext] udp running!!!!")
try await udpHole.waitClose() try await udpHole.waitClose()
self.logger.log("[SDLContext] udp closed!!!!") SDLLogger.shared.log("[SDLContext] udp closed!!!!")
}) })
} }
private func startNoticeClient() throws -> SDLNoticeClient { private func startNoticeClient() throws -> SDLNoticeClient {
// noticeClient // noticeClient
let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort, logger: self.logger) let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort, logger: SDLLogger.shared)
noticeClient.start() noticeClient.start()
self.logger.log("[SDLContext] noticeClient started") SDLLogger.shared.log("[SDLContext] noticeClient started")
self.noticeClient = noticeClient self.noticeClient = noticeClient
return noticeClient return noticeClient
@ -116,7 +113,7 @@ actor SDLContextActor {
// monitor // monitor
let monitor = SDLNetworkMonitor() let monitor = SDLNetworkMonitor()
monitor.start() monitor.start()
self.logger.log("[SDLContext] monitor started") SDLLogger.shared.log("[SDLContext] monitor started")
self.monitor = monitor self.monitor = monitor
self.monitorWorker = Task.detached { self.monitorWorker = Task.detached {
@ -125,9 +122,9 @@ actor SDLContextActor {
case .changed: case .changed:
// nat // nat
//self.natType = await self.getNatType() //self.natType = await self.getNatType()
self.logger.log("didNetworkPathChanged, nat type is:", level: .info) SDLLogger.shared.log("didNetworkPathChanged, nat type is:", level: .info)
case .unreachable: case .unreachable:
self.logger.log("didNetworkPathUnreachable", level: .warning) SDLLogger.shared.log("didNetworkPathUnreachable", level: .warning)
} }
} }
} }
@ -139,9 +136,9 @@ actor SDLContextActor {
// dns // dns
let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(self.config.remoteDnsServer, port: 15353) let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(self.config.remoteDnsServer, port: 15353)
let dnsClient = try await SDLDNSClient(dnsServerAddress: dnsSocketAddress, logger: self.logger) let dnsClient = try await SDLDNSClient(dnsServerAddress: dnsSocketAddress, logger: SDLLogger.shared)
try dnsClient.start() try dnsClient.start()
self.logger.log("[SDLContext] dnsClient started") SDLLogger.shared.log("[SDLContext] dnsClient started")
self.dnsClient = dnsClient self.dnsClient = dnsClient
self.dnsWorker = Task.detached { self.dnsWorker = Task.detached {
// //
@ -162,9 +159,9 @@ actor SDLContextActor {
self.udpHoleWorkers = nil self.udpHoleWorkers = nil
// udp // udp
let udpHole = try SDLUDPHole(logger: self.logger) let udpHole = try SDLUDPHole(logger: SDLLogger.shared)
try udpHole.start() try udpHole.start()
self.logger.log("[SDLContext] udpHole started") SDLLogger.shared.log("[SDLContext] udpHole started")
self.udpHole = udpHole self.udpHole = udpHole
await udpHole.channelIsActived() await udpHole.channelIsActived()
@ -180,12 +177,12 @@ actor SDLContextActor {
if Task.isCancelled { if Task.isCancelled {
break break
} }
self.logger.log("[SDLContext] will do stunRequest22") SDLLogger.shared.log("[SDLContext] will do stunRequest22")
await self.sendStunRequest() await self.sendStunRequest()
self.logger.log("[SDLContext] will do stunRequest44") SDLLogger.shared.log("[SDLContext] will do stunRequest44")
} }
self.logger.log("[SDLContext] will do stunRequest55") SDLLogger.shared.log("[SDLContext] will do stunRequest55")
} }
// //
@ -257,14 +254,14 @@ actor SDLContextActor {
return return
} }
self.puncherActor = SDLPuncherActor(udpHole: udpHole, querySocketAddress: config.stunSocketAddress, logger: logger) self.puncherActor = SDLPuncherActor(udpHole: udpHole, querySocketAddress: config.stunSocketAddress)
self.proberActor = SDLNATProberActor(udpHole: udpHole, addressArray: self.config.stunProbeSocketAddressArray, logger: self.logger) self.proberActor = SDLNATProberActor(udpHole: udpHole, addressArray: self.config.stunProbeSocketAddressArray)
// nat // nat
Task.detached { Task.detached {
if let natType = await self.proberActor?.probeNatType() { if let natType = await self.proberActor?.probeNatType() {
await self.setNatType(natType: natType) await self.setNatType(natType: natType)
self.logger.log("[SDLContext] nat_type is: \(natType)") SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
} }
} }
@ -281,7 +278,7 @@ actor SDLContextActor {
registerSuper.accessToken = self.config.accessToken registerSuper.accessToken = self.config.accessToken
if let registerSuperData = try? registerSuper.serializedData() { if let registerSuperData = try? registerSuper.serializedData() {
self.logger.log("[SDLContext] will send register super") SDLLogger.shared.log("[SDLContext] will send register super")
self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress) self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress)
} }
} }
@ -294,7 +291,7 @@ actor SDLContextActor {
stunRequest.mac = self.config.networkAddress.mac stunRequest.mac = self.config.networkAddress.mac
stunRequest.natType = UInt32(self.natType.rawValue) stunRequest.natType = UInt32(self.natType.rawValue)
self.logger.log("[SDLContext] will send stun request") SDLLogger.shared.log("[SDLContext] will send stun request")
if let stunData = try? stunRequest.serializedData() { if let stunData = try? stunRequest.serializedData() {
let remoteAddress = self.config.stunSocketAddress let remoteAddress = self.config.stunSocketAddress
@ -306,17 +303,17 @@ actor SDLContextActor {
// rsa // rsa
let aesKey = try! self.rsaCipher.decode(data: Data(registerSuperAck.aesKey)) let aesKey = try! self.rsaCipher.decode(data: Data(registerSuperAck.aesKey))
self.logger.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info) SDLLogger.shared.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info)
// tun // tun
do { do {
let ipAddress = try await self.providerAdapter.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClient.Helper.dnsServer) let ipAddress = try await self.providerAdapter.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClient.Helper.dnsServer)
self.logger.log("[SDLContext] setNetworkSettings successed") SDLLogger.shared.log("[SDLContext] setNetworkSettings successed")
self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress)) self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
self.logger.log("[SDLContext] send ip successed") SDLLogger.shared.log("[SDLContext] send ip successed")
self.startReader() self.startReader()
self.logger.log("[SDLContext] reader started") SDLLogger.shared.log("[SDLContext] reader started")
} catch let err { } catch let err {
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error) SDLLogger.shared.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
exit(-1) exit(-1)
} }
@ -338,7 +335,7 @@ actor SDLContextActor {
let alertNotice = NoticeMessage.alert(alert: errorMessage) let alertNotice = NoticeMessage.alert(alert: errorMessage)
self.noticeClient?.send(data: alertNotice) self.noticeClient?.send(data: alertNotice)
} }
self.logger.log("[SDLContext] Get a SuperNak message exit", level: .warning) SDLLogger.shared.log("[SDLContext] Get a SuperNak message exit", level: .warning)
} }
@ -346,10 +343,10 @@ actor SDLContextActor {
switch event { switch event {
case .natChanged(let natChangedEvent): case .natChanged(let natChangedEvent):
let dstMac = natChangedEvent.mac let dstMac = natChangedEvent.mac
self.logger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info) SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
sessionManager.removeSession(dstMac: dstMac) sessionManager.removeSession(dstMac: dstMac)
case .sendRegister(let sendRegisterEvent): case .sendRegister(let sendRegisterEvent):
self.logger.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug) SDLLogger.shared.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug)
let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp) let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp)
if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) { if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) {
// register // register
@ -369,7 +366,7 @@ actor SDLContextActor {
private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws { private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws {
let networkAddr = config.networkAddress let networkAddr = config.networkAddress
self.logger.log("register packet: \(register), network_address: \(networkAddr)", level: .debug) SDLLogger.shared.log("register packet: \(register), network_address: \(networkAddr)", level: .debug)
// tun, // tun,
if register.dstMac == networkAddr.mac && register.networkID == networkAddr.networkId { if register.dstMac == networkAddr.mac && register.networkID == networkAddr.networkId {
@ -384,7 +381,7 @@ actor SDLContextActor {
let session = Session(dstMac: register.srcMac, natAddress: remoteAddress) let session = Session(dstMac: register.srcMac, natAddress: remoteAddress)
self.sessionManager.addSession(session: session) self.sessionManager.addSession(session: session)
} else { } else {
self.logger.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning) SDLLogger.shared.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning)
} }
} }
@ -395,7 +392,7 @@ actor SDLContextActor {
let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress) let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress)
self.sessionManager.addSession(session: session) self.sessionManager.addSession(session: session)
} else { } else {
self.logger.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning) SDLLogger.shared.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning)
} }
} }
@ -426,18 +423,18 @@ actor SDLContextActor {
if arpPacket.targetIP == networkAddr.ip { if arpPacket.targetIP == networkAddr.ip {
switch arpPacket.opcode { switch arpPacket.opcode {
case .request: case .request:
self.logger.log("[SDLContext] get arp request packet", level: .debug) SDLLogger.shared.log("[SDLContext] get arp request packet", level: .debug)
let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip) let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip)
self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal()) self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal())
case .response: case .response:
self.logger.log("[SDLContext] get arp response packet", level: .debug) SDLLogger.shared.log("[SDLContext] get arp response packet", level: .debug)
self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC) self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC)
} }
} else { } else {
self.logger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug) SDLLogger.shared.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug)
} }
} else { } else {
self.logger.log("[SDLContext] get invalid arp packet", level: .debug) SDLLogger.shared.log("[SDLContext] get invalid arp packet", level: .debug)
} }
case .ipv4: case .ipv4:
guard let ipPacket = IPPacket(layerPacket.data), ipPacket.header.destination == networkAddr.ip else { guard let ipPacket = IPPacket(layerPacket.data), ipPacket.header.destination == networkAddr.ip else {
@ -446,7 +443,7 @@ actor SDLContextActor {
let packet = NEPacket(data: ipPacket.data, protocolFamily: 2) let packet = NEPacket(data: ipPacket.data, protocolFamily: 2)
self.providerAdapter.writePackets(packets: [packet]) self.providerAdapter.writePackets(packets: [packet])
default: default:
self.logger.log("[SDLContext] get invalid packet", level: .debug) SDLLogger.shared.log("[SDLContext] get invalid packet", level: .debug)
} }
} }
@ -491,7 +488,7 @@ actor SDLContextActor {
let networkAddr = self.config.networkAddress let networkAddr = self.config.networkAddress
if SDLDNSClient.Helper.isDnsRequestPacket(ipPacket: packet) { if SDLDNSClient.Helper.isDnsRequestPacket(ipPacket: packet) {
let destIp = packet.header.destination_ip let destIp = packet.header.destination_ip
self.logger.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination.asIpAddress())", level: .debug) SDLLogger.shared.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination.asIpAddress())", level: .debug)
self.dnsClient?.forward(ipPacket: packet) self.dnsClient?.forward(ipPacket: packet)
return return
} }
@ -509,7 +506,7 @@ actor SDLContextActor {
self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data) self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
} }
else { else {
self.logger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug) SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug)
// arp广 // arp广
let arpReqeust = ARPPacket.arpRequest(senderIP: networkAddr.ip, senderMAC: networkAddr.mac, targetIP: dstIp) let arpReqeust = ARPPacket.arpRequest(senderIP: networkAddr.ip, senderMAC: networkAddr.mac, targetIP: dstIp)
self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal()) self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
@ -541,7 +538,7 @@ actor SDLContextActor {
else { else {
// session // session
if let session = self.sessionManager.getSession(toAddress: dstMac) { if let session = self.sessionManager.getSession(toAddress: dstMac) {
self.logger.log("[SDLContext] send packet by session: \(session)", level: .debug) SDLLogger.shared.log("[SDLContext] send packet by session: \(session)", level: .debug)
self.udpHole?.send(type: .data, data: data, remoteAddress: session.natAddress) self.udpHole?.send(type: .data, data: data, remoteAddress: session.natAddress)
self.flowTracer.inc(num: data.count, type: .p2p) self.flowTracer.inc(num: data.count, type: .p2p)
} }

View File

@ -28,10 +28,12 @@ public class SDLLogger: @unchecked Sendable {
} }
} }
static let shared = SDLLogger(level: .debug)
private let level: Level private let level: Level
private let log: Logger private let log: Logger
public init(level: Level) { private init(level: Level) {
self.level = level self.level = level
self.log = Logger(subsystem: "com.jihe.punchnet", category: "punchnet") self.log = Logger(subsystem: "com.jihe.punchnet", category: "punchnet")
} }

View File

@ -77,18 +77,18 @@ enum SDLNAKErrorCode: UInt8 {
} }
extension SDLV4Info { extension SDLV4Info {
func socketAddress() -> SocketAddress? { func socketAddress() async throws -> SocketAddress {
let address = "\(v4[0]).\(v4[1]).\(v4[2]).\(v4[3])" let address = "\(v4[0]).\(v4[1]).\(v4[2]).\(v4[3])"
return try? SocketAddress.makeAddressResolvingHost(address, port: Int(port)) return try await SDLAddressResolver.shared.resolve(host: address, port: Int(port))
} }
} }
extension SDLStunProbeReply { extension SDLStunProbeReply {
func socketAddress() -> SocketAddress? { func socketAddress() async -> SocketAddress? {
let address = SDLUtil.int32ToIp(self.ip) let address = SDLUtil.int32ToIp(self.ip)
return try? SocketAddress.makeAddressResolvingHost(address, port: Int(port)) return try? await SDLAddressResolver.shared.resolve(host: address, port: Int(port))
} }
} }

View File

@ -46,21 +46,15 @@ final class SDLNoticeClient {
func start() { func start() {
let channel = self.channel let channel = self.channel
self.task = Task.detached { self.task = Task.detached {
self.logger.log("[SDLNoticeClient] task 11", level: .debug)
guard let remoteAddress = try? await SDLAddressResolver.shared.resolve(host: "127.0.0.1", port: self.noticePort) else { guard let remoteAddress = try? await SDLAddressResolver.shared.resolve(host: "127.0.0.1", port: self.noticePort) else {
self.logger.log("[SDLNoticeClient] task 22", level: .debug)
return return
} }
for await data in self.writeStream { for await data in self.writeStream {
if Task.isCancelled { if Task.isCancelled {
self.logger.log("[SDLNoticeClient] task 33", level: .debug)
break break
} }
self.logger.log("[SDLNoticeClient] task 44", level: .debug)
self.logger.log("[SDLNoticeClient] send packet", level: .debug)
let buf = channel.allocator.buffer(bytes: data) let buf = channel.allocator.buffer(bytes: data)
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buf) let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buf)
channel.eventLoop.execute { channel.eventLoop.execute {

View File

@ -28,10 +28,8 @@ final class SDLTunnelProviderAdapter {
} }
let provider: NEPacketTunnelProvider let provider: NEPacketTunnelProvider
let logger: SDLLogger
public init(provider: NEPacketTunnelProvider, logger: SDLLogger) { public init(provider: NEPacketTunnelProvider) {
self.logger = logger
self.provider = provider self.provider = provider
} }
@ -60,7 +58,7 @@ final class SDLTunnelProviderAdapter {
dnsSettings.matchDomains = [networkDomain] dnsSettings.matchDomains = [networkDomain]
dnsSettings.matchDomainsNoSearch = false dnsSettings.matchDomainsNoSearch = false
networkSettings.dnsSettings = dnsSettings networkSettings.dnsSettings = dnsSettings
self.logger.log("[SDLTunnelProviderAdapter] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)", level: .info) SDLLogger.shared.log("[SDLTunnelProviderAdapter] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)", level: .info)
let ipv4Settings = NEIPv4Settings(addresses: [netAddress.ipAddress], subnetMasks: [netAddress.maskAddress]) let ipv4Settings = NEIPv4Settings(addresses: [netAddress.ipAddress], subnetMasks: [netAddress.maskAddress])
// //

View File

@ -62,7 +62,7 @@ struct NetworkDisconnctedView: View {
maskLen: 24, maskLen: 24,
accessToken: "accessToken1234", accessToken: "accessToken1234",
hostname: "mysql", hostname: "mysql",
noticePort: 123456) noticePort: 1234)
// token使token // token使token
try await VPNManager.shared.enableVpn(options: options!) try await VPNManager.shared.enableVpn(options: options!)
} }