diff --git a/Sources/Punchnet/ARPPacket.swift b/Sources/Punchnet/ARPPacket.swift index b6a8076..dbc5ea7 100644 --- a/Sources/Punchnet/ARPPacket.swift +++ b/Sources/Punchnet/ARPPacket.swift @@ -54,7 +54,6 @@ struct ARPPacket { init?(data: Data) { guard data.count >= 28 else { - NSLog("length < 28: len: \(data.count)") return nil } @@ -63,7 +62,6 @@ struct ARPPacket { self.hardwareSize = data[4] self.protocolSize = data[5] guard let opcode = Opcode(rawValue: UInt16(data[6]) << 8 | UInt16(data[7])) else { - NSLog("opcode error") return nil } diff --git a/Sources/Punchnet/SDLContext.swift b/Sources/Punchnet/SDLContext.swift index 9d330e6..2756e3a 100644 --- a/Sources/Punchnet/SDLContext.swift +++ b/Sources/Punchnet/SDLContext.swift @@ -80,13 +80,17 @@ public class SDLContext: @unchecked Sendable { private var bag = Set() private var locker = NSLock() + private let logger: SDLLogger + struct RegisterRequest { let srcMac: Data let dstMac: Data let networkId: UInt32 } - public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher) { + public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher, logger: SDLLogger) { + self.logger = logger + self.config = config self.rsaCipher = rsaCipher self.aesCipher = aesCipher @@ -102,7 +106,7 @@ public class SDLContext: @unchecked Sendable { } public func start() async throws { - self.noticeClient = try await SDLNoticeClient() + self.noticeClient = try await SDLNoticeClient(logger: self.logger) try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { @@ -110,7 +114,7 @@ public class SDLContext: @unchecked Sendable { do { try await self.startUDPHole() } catch let err { - NSLog("udp Hole get err: \(err)") + self.logger.log("[SDLContext] UDPHole get err: \(err)", level: .warning) } } } @@ -120,7 +124,7 @@ public class SDLContext: @unchecked Sendable { do { try await self.startSuperClient() } catch let err { - NSLog("[SDLContext] SuperClient get error: \(err), will restart") + self.logger.log("[SDLContext] SuperClient get error: \(err), will restart", level: .warning) await self.arpServer.clear() try? await Task.sleep(for: .seconds(2)) } @@ -136,7 +140,7 @@ public class SDLContext: @unchecked Sendable { do { try await self.noticeClient?.start() } catch let err { - NSLog("noticeClient get err: \(err)") + self.logger.log("[SDLContext] noticeClient get err: \(err)", level: .warning) } } } @@ -153,7 +157,7 @@ public class SDLContext: @unchecked Sendable { } private func startUDPHole() async throws { - self.udpHole = try await SDLUDPHole() + self.udpHole = try await SDLUDPHole(logger: self.logger) try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { @@ -179,7 +183,7 @@ public class SDLContext: @unchecked Sendable { } private func startSuperClient() async throws { - self.superClient = try await SDLSuperClient(host: self.config.superHost, port: self.config.superPort) + self.superClient = try await SDLSuperClient(host: self.config.superHost, port: self.config.superPort, logger: self.logger) try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { @@ -211,10 +215,10 @@ public class SDLContext: @unchecked Sendable { // 需要重新探测网络的nat类型 Task { self.natType = await SDLNatProber.getNatType(udpHole: self.udpHole, config: self.config) - NSLog("didNetworkPathChanged, nat type is: \(self.natType)") + self.logger.log("didNetworkPathChanged, nat type is: \(self.natType)", level: .info) } case .unreachable: - NSLog("didNetworkPathUnreachable") + self.logger.log("didNetworkPathUnreachable", level: .warning) } } self.monitor.start() @@ -227,7 +231,7 @@ public class SDLContext: @unchecked Sendable { private func handleSuperEvent(event: SDLSuperClient.SuperEvent) async throws { switch event { case .ready: - NSLog("[SDLContext] get registerSuper, mac address: \(Self.formatMacAddress(mac: self.devAddr.mac))") + self.logger.log("[SDLContext] get registerSuper, mac address: \(Self.formatMacAddress(mac: self.devAddr.mac))", level: .debug) guard let message = try await self.superClient?.registerSuper(context: self).get() else { return } @@ -238,7 +242,7 @@ public class SDLContext: @unchecked Sendable { let aesKey = try! self.rsaCipher.decode(data: Data(registerSuperAck.aesKey)) let upgradeType = SDLUpgradeType(rawValue: registerSuperAck.upgradeType) - NSLog("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)") + self.logger.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info) self.devAddr = registerSuperAck.devAddr if upgradeType == .force { @@ -271,7 +275,7 @@ public class SDLContext: @unchecked Sendable { let alertNotice = NoticeMessage.AlertMessage(alert: errorMessage) await self.noticeClient?.send(data: alertNotice.binaryData) } - NSLog("[SDLContext] Get a SuperNak message exit") + self.logger.log("[SDLContext] Get a SuperNak message exit", level: .warning) default: () } @@ -280,10 +284,10 @@ public class SDLContext: @unchecked Sendable { switch evt { case .natChanged(let natChangedEvent): let dstMac = natChangedEvent.mac - NSLog("[SDLContext] natChangedEvent, dstMac: \(dstMac)") + self.logger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info) await sessionManager.removeSession(dstMac: dstMac) case .sendRegister(let sendRegisterEvent): - NSLog("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)") + self.logger.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug) let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp) if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) { // 发送register包 @@ -300,7 +304,7 @@ public class SDLContext: @unchecked Sendable { case .changeNetwork(let changeNetworkCommand): // 需要对数据通过rsa的私钥解码 let aesKey = try! self.rsaCipher.decode(data: Data(changeNetworkCommand.aesKey)) - NSLog("[SDLContext] change network command get aes_key len: \(aesKey.count)") + self.logger.log("[SDLContext] change network command get aes_key len: \(aesKey.count)", level: .info) self.devAddr = changeNetworkCommand.devAddr // 服务器分配的tun网卡信息 @@ -321,12 +325,12 @@ public class SDLContext: @unchecked Sendable { case .ready: // 获取当前网络的类型 //self.natType = await SDLNatProber.getNatType(udpHole: self.udpHole, config: self.config) - SDLLogger.log("[SDLContext] nat type is: \(self.natType)", level: .debug) + self.logger.log("[SDLContext] nat type is: \(self.natType)", level: .debug) case .message(let remoteAddress, let message): switch message { case .register(let register): - NSLog("register packet: \(register), dev_addr: \(self.devAddr)") + self.logger.log("register packet: \(register), dev_addr: \(self.devAddr)", level: .debug) // 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下 if register.dstMac == self.devAddr.mac && register.networkID == self.devAddr.networkID { // 回复ack包 @@ -335,7 +339,7 @@ public class SDLContext: @unchecked Sendable { let session = Session(dstMac: register.srcMac, natAddress: remoteAddress) await self.sessionManager.addSession(session: session) } else { - SDLLogger.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning) + self.logger.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning) } case .registerAck(let registerAck): // 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下 @@ -343,14 +347,14 @@ public class SDLContext: @unchecked Sendable { let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress) await self.sessionManager.addSession(session: session) } else { - SDLLogger.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning) + self.logger.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning) } case .stunReply(let stunReply): let cookie = stunReply.cookie if cookie == self.lastCookie { // 记录下当前在nat上的映射信息,暂时没有用;后续会用来判断网络类型 //self.natAddress = stunReply.natAddress - SDLLogger.log("[SDLContext] get a stunReply: \(try! stunReply.jsonString())") + self.logger.log("[SDLContext] get a stunReply: \(try! stunReply.jsonString())", level: .debug) } default: () @@ -359,12 +363,10 @@ public class SDLContext: @unchecked Sendable { case .data(let data): let mac = LayerPacket.MacAddress(data: data.dstMac) guard (data.dstMac == self.devAddr.mac || mac.isBroadcast() || mac.isMulticast()) else { - NSLog("[SDLContext] didReadData 1") return } guard let decyptedData = try? self.aesCipher.decypt(aesKey: self.aesKey, data: Data(data.data)) else { - NSLog("[SDLContext] didReadData 2") return } @@ -380,32 +382,30 @@ public class SDLContext: @unchecked Sendable { if arpPacket.targetIP == self.devAddr.netAddr { switch arpPacket.opcode { case .request: - NSLog("[SDLContext] get arp request packet") + self.logger.log("[SDLContext] get arp request packet", level: .debug) let response = ARPPacket.arpResponse(for: arpPacket, mac: self.devAddr.mac, ip: self.devAddr.netAddr) await self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal()) case .response: - NSLog("[SDLContext] get arp response packet") + self.logger.log("[SDLContext] get arp response packet", level: .debug) await self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC) } } else { - NSLog("[SDLContext] get invalid arp packet, target_ip: \(arpPacket)") + self.logger.log("[SDLContext] get invalid arp packet, target_ip: \(arpPacket)", level: .debug) } } else { - NSLog("[SDLContext] get invalid arp packet") + self.logger.log("[SDLContext] get invalid arp packet", level: .debug) } case .ipv4: - NSLog("[SDLContext] get ipv4 packet") guard let ipPacket = IPPacket(layerPacket.data), ipPacket.header.destination == self.devAddr.netAddr else { return } - let packet = NEPacket(data: ipPacket.data, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([packet]) default: - NSLog("[SDLContext] get invalid packet") + self.logger.log("[SDLContext] get invalid packet", level: .debug) } } catch let err { - NSLog("[SDLContext] didReadData err: \(err)") + self.logger.log("[SDLContext] didReadData err: \(err)", level: .warning) } } @@ -441,7 +441,7 @@ public class SDLContext: @unchecked Sendable { networkSettings.dnsSettings = NEDNSSettings(servers: ["8.8.8.8", "114.114.114.114"]) } - NSLog("[SDLContext] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)") + self.logger.log("[SDLContext] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)", level: .info) let ipv4Settings = NEIPv4Settings(addresses: [netAddress.ipAddress], subnetMasks: [netAddress.maskAddress]) // 设置路由表 @@ -455,9 +455,9 @@ public class SDLContext: @unchecked Sendable { try await self.provider.setTunnelNetworkSettings(networkSettings) self.startReader() - NSLog("[SDLContext] setTunnelNetworkSettings success, start read packet") + self.logger.log("[SDLContext] setTunnelNetworkSettings success, start read packet", level: .info) } catch let err { - NSLog("[SDLContext] setTunnelNetworkSettings get error: \(err)") + self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error) exit(-1) } } @@ -496,7 +496,7 @@ public class SDLContext: @unchecked Sendable { let arpReqeust = ARPPacket.arpRequest(senderIP: self.devAddr.netAddr, senderMAC: self.devAddr.mac, targetIP: dstIp) await self.routeLayerPacket(dstMac: broadcastMac, type: .arp, data: arpReqeust.marshal()) - NSLog("[SDLContext] dstIp: \(dstIp) arp query not found") + self.logger.log("[SDLContext] dstIp: \(dstIp) arp query not found", level: .debug) } } } @@ -516,7 +516,7 @@ public class SDLContext: @unchecked Sendable { // 通过session发送到对端 if let session = await self.sessionManager.getSession(toAddress: dstMac) { - NSLog("[SDLContext] send packet by session: \(session)") + self.logger.log("[SDLContext] send packet by session: \(session)", level: .debug) await self.udpHole?.sendPacket(context: self, session: session, data: encodedPacket) await self.flowTracer.inc(num: data.count, type: .p2p) @@ -563,17 +563,17 @@ public class SDLContext: @unchecked Sendable { switch message.packet { case .empty: - SDLLogger.log("[SDLContext] hole query_info get empty: \(message)", level: .debug) + self.logger.log("[SDLContext] hole query_info get empty: \(message)", level: .debug) case .peerInfo(let peerInfo): if let remoteAddress = peerInfo.v4Info.socketAddress() { - SDLLogger.log("[SDLContext] hole sock address: \(remoteAddress)", level: .warning) + self.logger.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug) // 发送register包 await self.udpHole?.sendRegister(remoteAddress: remoteAddress, networkId: request.networkId, srcMac: request.srcMac, dst_mac: request.dstMac) } else { - SDLLogger.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning) + self.logger.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning) } default: - SDLLogger.log("[SDLContext] hole query_info is packet: \(message)", level: .warning) + self.logger.log("[SDLContext] hole query_info is packet: \(message)", level: .warning) } } diff --git a/Sources/Punchnet/SDLLogger.swift b/Sources/Punchnet/SDLLogger.swift index ed91b25..1724c2d 100644 --- a/Sources/Punchnet/SDLLogger.swift +++ b/Sources/Punchnet/SDLLogger.swift @@ -7,16 +7,37 @@ import Foundation -struct SDLLogger: @unchecked Sendable { - enum Level { - case debug - case info - case warning - case error +public class SDLLogger: @unchecked Sendable { + public enum Level: Int8, CustomStringConvertible { + case debug = 0 + case info = 1 + case warning = 2 + case error = 3 + + public var description: String { + switch self { + case .debug: + return "Debug" + case .info: + return "Info" + case .warning: + return "Warning" + case .error: + return "Error" + } + } } - static func log(_ message: String, level: Level = .debug) { - NSLog(message) + private let level: Level + + public init(level: Level) { + self.level = level + } + + public func log(_ message: String, level: Level = .debug) { + if self.level.rawValue <= level.rawValue { + NSLog("\(level.description): \(message)") + } } } diff --git a/Sources/Punchnet/SDLNatProber.swift b/Sources/Punchnet/SDLNatProber.swift index c27eb55..8ea3417 100644 --- a/Sources/Punchnet/SDLNatProber.swift +++ b/Sources/Punchnet/SDLNatProber.swift @@ -22,7 +22,7 @@ struct SDLNatProber { } // 获取当前所处的网络的nat类型 - static func getNatType(udpHole: SDLUDPHole?, config: SDLConfiguration) async -> NatType { + static func getNatType(udpHole: SDLUDPHole?, config: SDLConfiguration, logger: SDLLogger) async -> NatType { guard let udpHole else { return .blocked } @@ -45,7 +45,7 @@ struct SDLNatProber { // 如果natAddress2 的IP地址与上次回来的IP是不一样的,它就是对称型NAT; 这次的包也一定能发成功并收到 // 如果ip地址变了,这说明{dstIp, dstPort, srcIp, srcPort}, 其中有一个变了;则用新的ip地址 - NSLog("nat_address1: \(natAddress1), nat_address2: \(natAddress2)") + logger.log("[SDLNatProber] nat_address1: \(natAddress1), nat_address2: \(natAddress2)", level: .debug) if let ipAddress1 = natAddress1.ipAddress, let ipAddress2 = natAddress2.ipAddress, ipAddress1 != ipAddress2 { return .symmetric } @@ -53,14 +53,14 @@ struct SDLNatProber { // step3: ip1:port1 <---- ip2:port2 (ip地址和port都变的情况) // 如果能收到的,说明是完全锥形 说明是IP地址限制锥型NAT,如果不能收到说明是端口限制锥型。 if let natAddress3 = await getNatAddress(udpHole, remoteAddress: addressArray[0][0], attr: .peer) { - NSLog("nat_address1: \(natAddress1), nat_address2: \(natAddress2), nat_address3: \(natAddress3)") + logger.log("[SDLNatProber] nat_address1: \(natAddress1), nat_address2: \(natAddress2), nat_address3: \(natAddress3)", level: .debug) return .fullCone } // step3: ip1:port1 <---- ip1:port2 (port改变情况) // 如果能收到的说明是IP地址限制锥型NAT,如果不能收到说明是端口限制锥型。 if let natAddress4 = await getNatAddress(udpHole, remoteAddress: addressArray[0][0], attr: .port) { - NSLog("nat_address1: \(natAddress1), nat_address2: \(natAddress2), nat_address4: \(natAddress4)") + logger.log("[SDLNatProber] nat_address1: \(natAddress1), nat_address2: \(natAddress2), nat_address4: \(natAddress4)", level: .debug) return .coneRestricted } else { return .portRestricted diff --git a/Sources/Punchnet/SDLNoticeClient.swift b/Sources/Punchnet/SDLNoticeClient.swift index 7e5e785..87f0831 100644 --- a/Sources/Punchnet/SDLNoticeClient.swift +++ b/Sources/Punchnet/SDLNoticeClient.swift @@ -25,8 +25,12 @@ actor SDLNoticeClient { private let remoteAddress: SocketAddress private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded) + private let logger: SDLLogger + // 启动函数 - init() async throws { + init(logger: SDLLogger) async throws { + self.logger = logger + self.remoteAddress = try! SocketAddress(ipAddress: "127.0.0.1", port: 50195) let bootstrap = DatagramBootstrap(group: self.group) @@ -41,7 +45,7 @@ actor SDLNoticeClient { } .get() - SDLLogger.log("[SDLNoticeClient] started and listening on: \(self.asyncChannel.channel.localAddress!)", level: .debug) + self.logger.log("[SDLNoticeClient] started and listening on: \(self.asyncChannel.channel.localAddress!)", level: .debug) } func start() async throws { @@ -49,11 +53,14 @@ actor SDLNoticeClient { try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { try await self.asyncChannel.channel.closeFuture.get() - NSLog("[UDPHole] channel closed") throw SDLError.socketClosed } group.addTask { + defer { + self.writeContinuation.finish() + } + for try await message in self.writeStream { let buf = self.asyncChannel.channel.allocator.buffer(bytes: message) let envelope = AddressedEnvelope(remoteAddress: self.remoteAddress, data: buf) @@ -62,7 +69,9 @@ actor SDLNoticeClient { } } - try await group.waitForAll() + for try await _ in group { + + } } } } diff --git a/Sources/Punchnet/SDLQPSCounter.swift b/Sources/Punchnet/SDLQPSCounter.swift index 9af58fd..9c2859e 100644 --- a/Sources/Punchnet/SDLQPSCounter.swift +++ b/Sources/Punchnet/SDLQPSCounter.swift @@ -20,7 +20,6 @@ class SDLQPSCounter: @unchecked Sendable { timer.schedule(deadline: .now(), repeating: .seconds(1), leeway: .milliseconds(100)) timer.setEventHandler { [weak self] in guard let self = self else { return } - NSLog("[\(self.label)] QPS: \(self.count)") self.count = 0 } timer.resume() diff --git a/Sources/Punchnet/SDLSuperClient.swift b/Sources/Punchnet/SDLSuperClient.swift index 9607631..8accab8 100644 --- a/Sources/Punchnet/SDLSuperClient.swift +++ b/Sources/Punchnet/SDLSuperClient.swift @@ -21,6 +21,7 @@ actor SDLSuperClient { // id生成器 var idGenerator = SDLIdGenerator(seed: 1) + private let logger: SDLLogger // 发送的消息格式 struct TcpMessage { let packetId: UInt32 @@ -35,7 +36,8 @@ actor SDLSuperClient { case command(UInt32, SDLCommand) } - init(host: String, port: Int) async throws { + init(host: String, port: Int, logger: SDLLogger) async throws { + self.logger = logger let bootstrap = ClientBootstrap(group: self.group) .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) .channelInitializer { channel in @@ -62,7 +64,7 @@ actor SDLSuperClient { try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { try await self.asyncChannel.channel.closeFuture.get() - NSLog("[SDLSuperClient] socket closed") + self.logger.log("[SDLSuperClient] socket closed", level: .warning) throw SDLError.socketClosed } @@ -73,7 +75,7 @@ actor SDLSuperClient { for try await var packet in inbound { if let message = SDLSuperClientDecoder.decode(buffer: &packet) { - SDLLogger.log("[SDLSuperTransport] read message: \(message)", level: .warning) + self.logger.log("[SDLSuperTransport] read message: \(message)", level: .debug) switch message.packet { case .event(let event): self.inboundContinuation.yield(.event(event)) @@ -84,7 +86,7 @@ actor SDLSuperClient { } } } - NSLog("[SDLSuperClient] inbound closed") + self.logger.log("[SDLSuperClient] inbound closed", level: .warning) } group.addTask { @@ -99,7 +101,7 @@ actor SDLSuperClient { buffer.writeBytes(message.data) try await outbound.write(buffer) } - NSLog("[SDLSuperClient] outbound closed") + self.logger.log("[SDLSuperClient] outbound closed", level: .warning) } // --MARK: 心跳机制 @@ -109,7 +111,7 @@ actor SDLSuperClient { await self.ping() try await Task.sleep(nanoseconds: 5 * 1_000_000_000) } catch let err { - NSLog("[SDLSuperClient] heartbeat cancelled with error: \(err)") + self.logger.log("[SDLSuperClient] heartbeat cancelled with error: \(err)", level: .warning) break } } @@ -120,7 +122,7 @@ actor SDLSuperClient { } - NSLog("[SDLSuperClient] group closed") + self.logger.log("[SDLSuperClient] group closed", level: .warning) } } } @@ -174,7 +176,6 @@ actor SDLSuperClient { } private func write(type: SDLPacketType, data: Data) -> EventLoopFuture { - SDLLogger.log("[SDLSuperTransport] will write data: \(data)", level: .debug) let packetId = idGenerator.nextId() let promise = self.asyncChannel.channel.eventLoop.makePromise(of: SDLSuperInboundMessage.self) self.callbackPromises[packetId] = promise diff --git a/Sources/Punchnet/SDLUDPHole.swift b/Sources/Punchnet/SDLUDPHole.swift index c68c6a4..61ebcca 100644 --- a/Sources/Punchnet/SDLUDPHole.swift +++ b/Sources/Punchnet/SDLUDPHole.swift @@ -21,6 +21,8 @@ actor SDLUDPHole { public let (eventFlow, eventContinuation) = AsyncStream.makeStream(of: UDPEvent.self, bufferingPolicy: .unbounded) + private let logger: SDLLogger + struct UDPMessage { let remoteAddress: SocketAddress let type: SDLPacketType @@ -35,7 +37,9 @@ actor SDLUDPHole { } // 启动函数 - init() async throws { + init(logger: SDLLogger) async throws { + self.logger = logger + let bootstrap = DatagramBootstrap(group: group) .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) @@ -49,7 +53,7 @@ actor SDLUDPHole { .get() self.localAddress = self.asyncChannel.channel.localAddress - SDLLogger.log("[UDPHole] started and listening on: \(self.localAddress!)", level: .debug) + self.logger.log("[UDPHole] started and listening on: \(self.localAddress!)", level: .debug) } func start() async throws { @@ -59,7 +63,7 @@ actor SDLUDPHole { try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { try await self.asyncChannel.channel.closeFuture.get() - NSLog("[UDPHole] channel closed") + self.logger.log("[UDPHole] channel closed", level: .warning) throw SDLError.socketClosed } @@ -71,7 +75,7 @@ actor SDLUDPHole { if let message = try Self.decode(buffer: &buffer) { switch message { case .data(let data): - SDLLogger.log("[SDLUDPHole] read data: \(data.format()), from: \(remoteAddress)", level: .debug) + self.logger.log("[SDLUDPHole] read data: \(data.format()), from: \(remoteAddress)", level: .debug) self.eventContinuation.yield(.data(data)) case .stunProbeReply(let probeReply): // 执行并移除回调 @@ -80,10 +84,10 @@ actor SDLUDPHole { self.eventContinuation.yield(.message(remoteAddress, message)) } } else { - SDLLogger.log("[SDLUDPHole] decode message, get null", level: .warning) + self.logger.log("[SDLUDPHole] decode message, get null", level: .warning) } } catch let err { - SDLLogger.log("[SDLUDPHole] decode message, get error: \(err)", level: .debug) + self.logger.log("[SDLUDPHole] decode message, get error: \(err)", level: .warning) throw err } } @@ -104,7 +108,7 @@ actor SDLUDPHole { } - SDLLogger.log("[SDLUDPHole] group closed", level: .debug) + self.logger.log("[SDLUDPHole] group closed", level: .warning) } } } @@ -123,7 +127,7 @@ actor SDLUDPHole { stunRequest.mac = ctx.devAddr.mac stunRequest.natType = UInt32(ctx.natType.rawValue) - SDLLogger.log("[SDLUDPHole] stunRequest: \(remoteAddress), host: \(ctx.config.stunServers[0].host):\(ctx.config.stunServers[0].ports[0])", level: .warning) + self.logger.log("[SDLUDPHole] stunRequest: \(remoteAddress), host: \(ctx.config.stunServers[0].host):\(ctx.config.stunServers[0].ports[0])", level: .debug) self.send(remoteAddress: remoteAddress, type: .stunRequest, data: try! stunRequest.serializedData()) @@ -141,7 +145,7 @@ actor SDLUDPHole { stunProbe.cookie = cookie stunProbe.attr = UInt32(attr.rawValue) self.send(remoteAddress: remoteAddress, type: .stunProbe, data: try! stunProbe.serializedData()) - SDLLogger.log("[SDLUDPHole] stunProbe: \(remoteAddress)", level: .warning) + self.logger.log("[SDLUDPHole] stunProbe: \(remoteAddress)", level: .debug) let promise = self.asyncChannel.channel.eventLoop.makePromise(of: SDLStunProbeReply.self) self.promises[cookie] = promise @@ -173,7 +177,7 @@ actor SDLUDPHole { dataPacket.ttl = 255 dataPacket.data = data if let packet = try? dataPacket.serializedData() { - SDLLogger.log("[SDLUDPHole] sendPacket: \(remoteAddress), count: \(packet.count)", level: .debug) + self.logger.log("[SDLUDPHole] sendPacket: \(remoteAddress), count: \(packet.count)", level: .debug) self.send(remoteAddress: remoteAddress, type: .data, data: packet) } } @@ -190,7 +194,7 @@ actor SDLUDPHole { dataPacket.data = data if let packet = try? dataPacket.serializedData() { - NSLog("[SDLContext] forward packet, remoteAddress: \(remoteAddress), data size: \(packet.count)") + self.logger.log("[SDLContext] forward packet, remoteAddress: \(remoteAddress), data size: \(packet.count)", level: .debug) self.send(remoteAddress: remoteAddress, type: .data, data: packet) } } @@ -203,7 +207,7 @@ actor SDLUDPHole { register.dstMac = dst_mac if let packet = try? register.serializedData() { - SDLLogger.log("[SDLUDPHole] SendRegister: \(remoteAddress), src_mac: \(LayerPacket.MacAddress.description(data: srcMac)), dst_mac: \(LayerPacket.MacAddress.description(data: dst_mac))", level: .debug) + self.logger.log("[SDLUDPHole] SendRegister: \(remoteAddress), src_mac: \(LayerPacket.MacAddress.description(data: srcMac)), dst_mac: \(LayerPacket.MacAddress.description(data: dst_mac))", level: .debug) self.send(remoteAddress: remoteAddress, type: .register, data: packet) } } @@ -216,7 +220,7 @@ actor SDLUDPHole { registerAck.dstMac = dst_mac if let packet = try? registerAck.serializedData() { - SDLLogger.log("[SDLUDPHole] SendRegisterAck: \(remoteAddress), \(registerAck)", level: .debug) + self.logger.log("[SDLUDPHole] SendRegisterAck: \(remoteAddress), \(registerAck)", level: .debug) self.send(remoteAddress: remoteAddress, type: .registerAck, data: packet) } } @@ -232,7 +236,6 @@ actor SDLUDPHole { guard let type = buffer.readInteger(as: UInt8.self), let packetType = SDLPacketType(rawValue: type), let bytes = buffer.readBytes(length: buffer.readableBytes) else { - SDLLogger.log("[SDLUDPHole] decode error", level: .error) return nil }