diff --git a/Tun/Punchnet/Actors/SDLNATProberActor.swift b/Tun/Punchnet/Actors/SDLNATProberActor.swift index 9ec1d07..7f23315 100644 --- a/Tun/Punchnet/Actors/SDLNATProberActor.swift +++ b/Tun/Punchnet/Actors/SDLNATProberActor.swift @@ -102,8 +102,8 @@ actor SDLNATProberActor { session.replies[reply.step] = reply // 提前退出的情况,没有nat映射 - if let step1 = session.replies[1] { - let localAddress = await self.udpHole.getLocalAddress() + if session.replies[1] != nil { + let localAddress = self.udpHole.getLocalAddress() if reply.socketAddress() == localAddress { finish(cookie: session.cookieId, .noNat) return @@ -123,14 +123,14 @@ actor SDLNATProberActor { if session.replies[1] != nil && session.replies[2] != nil && session.replies[3] != nil && session.replies[4] != nil { // step3: ip2:port2 <---- ip1:port1 (ip地址和port都变的情况) // 如果能收到的,说明是完全锥形 说明是IP地址限制锥型NAT,如果不能收到说明是端口限制锥型。 - if let step3 = session.replies[3] { + if session.replies[3] != nil { finish(cookie: session.cookieId, .fullCone) return } // step3: ip1:port1 <---- ip1:port2 (port改变情况) // 如果能收到的说明是IP地址限制锥型NAT,如果不能收到说明是端口限制锥型。 - if let step4 = session.replies[4] { + if session.replies[4] != nil { finish(cookie: session.cookieId, .coneRestricted) return } @@ -163,10 +163,10 @@ actor SDLNATProberActor { // MARK: - Internal helpers private func sendProbe(cookie: UInt32) async { - await self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 1, attr: .none), remoteAddress: addressArray[0][0]) - await self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 2, attr: .none), remoteAddress: addressArray[1][1]) - await self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 3, attr: .peer), remoteAddress: addressArray[0][0]) - await self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 4, attr: .port), remoteAddress: addressArray[0][0]) + self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 1, attr: .none), remoteAddress: addressArray[0][0]) + self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 2, attr: .none), remoteAddress: addressArray[1][1]) + self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 3, attr: .peer), remoteAddress: addressArray[0][0]) + self.udpHole.send(type: .stunProbe, data: makeProbePacket(cookieId: cookie, step: 4, attr: .port), remoteAddress: addressArray[0][0]) } private func makeProbePacket(cookieId: UInt32, step: UInt32, attr: SDLProbeAttr) -> Data { diff --git a/Tun/Punchnet/Actors/SDLNoticeClientActor.swift b/Tun/Punchnet/Actors/SDLNoticeClient.swift similarity index 96% rename from Tun/Punchnet/Actors/SDLNoticeClientActor.swift rename to Tun/Punchnet/Actors/SDLNoticeClient.swift index c68a9b9..eb1585a 100644 --- a/Tun/Punchnet/Actors/SDLNoticeClientActor.swift +++ b/Tun/Punchnet/Actors/SDLNoticeClient.swift @@ -19,7 +19,7 @@ import NIOCore import NIOPosix // 处理和sn-server服务器之间的通讯 -actor SDLNoticeClientActor { +final class SDLNoticeClient { private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) private var channel: Channel? private let logger: SDLLogger @@ -63,7 +63,7 @@ actor SDLNoticeClientActor { } -extension SDLNoticeClientActor { +extension SDLNoticeClient { private class SDLNoticeClientInboundHandler: ChannelInboundHandler { typealias InboundIn = AddressedEnvelope diff --git a/Tun/Punchnet/SDLContext.swift b/Tun/Punchnet/SDLContext.swift index b8a8717..511eada 100644 --- a/Tun/Punchnet/SDLContext.swift +++ b/Tun/Punchnet/SDLContext.swift @@ -47,7 +47,7 @@ public class SDLContext { var providerActor: SDLTunnelProviderActor var puncherActor: SDLPuncherActor // dns的client对象 - var dnsClientActor: SDLDNSClientActor? + var dnsClient: SDLDNSClient? // 网络探测对象 var proberActor: SDLNATProberActor? @@ -65,7 +65,7 @@ public class SDLContext { private var monitor: SDLNetworkMonitor? // 内部socket通讯 - private var noticeClientActor: SDLNoticeClientActor? + private var noticeClient: SDLNoticeClient? // 流量统计 private var flowTracer = SDLFlowTracerActor() @@ -94,13 +94,13 @@ public class SDLContext { // 启动dns服务 let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(self.config.remoteDnsServer, port: 15353) - self.dnsClientActor = try await SDLDNSClientActor(dnsServerAddress: dnsSocketAddress, logger: self.logger) - try await self.dnsClientActor?.start() + self.dnsClient = try await SDLDNSClient(dnsServerAddress: dnsSocketAddress, logger: self.logger) + try self.dnsClient?.start() self.logger.log("[SDLContext] dnsClient started") // 启动noticeClient - self.noticeClientActor = try SDLNoticeClientActor(noticePort: self.config.noticePort, logger: self.logger) - try await self.noticeClientActor?.start() + self.noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort, logger: self.logger) + try self.noticeClient?.start() self.logger.log("[SDLContext] noticeClient started") // 启动monitor @@ -132,7 +132,7 @@ public class SDLContext { // 处理DNS的事件流 group.addTask { - if let packetFlow = self.dnsClientActor?.packetFlow { + if let packetFlow = self.dnsClient?.packetFlow { for await packet in packetFlow { let nePacket = NEPacket(data: packet, protocolFamily: 2) await self.providerActor.writePackets(packets: [nePacket]) @@ -163,7 +163,7 @@ public class SDLContext { public func stop() async { self.udpHole = nil - self.noticeClientActor = nil + self.noticeClient = nil self.readTask?.cancel() } @@ -248,8 +248,8 @@ public class SDLContext { self.logger.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info) // 服务器分配的tun网卡信息 do { - let ipAddress = try await self.providerActor.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClientActor.Helper.dnsServer) - await self.noticeClientActor?.send(data: NoticeMessage.ipAdress(ip: ipAddress)) + let ipAddress = try await self.providerActor.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClient.Helper.dnsServer) + self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress)) self.startReader() } catch let err { @@ -269,11 +269,11 @@ public class SDLContext { switch errorCode { case .invalidToken, .nodeDisabled: let alertNotice = NoticeMessage.alert(alert: errorMessage) - await self.noticeClientActor?.send(data: alertNotice) + self.noticeClient?.send(data: alertNotice) exit(-1) case .noIpAddress, .networkFault, .internalFault: let alertNotice = NoticeMessage.alert(alert: errorMessage) - await self.noticeClientActor?.send(data: alertNotice) + self.noticeClient?.send(data: alertNotice) } self.logger.log("[SDLContext] Get a SuperNak message exit", level: .warning) @@ -299,7 +299,7 @@ public class SDLContext { case .networkShutdown(let shutdownEvent): let alertNotice = NoticeMessage.alert(alert: shutdownEvent.message) - await self.noticeClientActor?.send(data: alertNotice) + self.noticeClient?.send(data: alertNotice) exit(-1) } } @@ -434,10 +434,10 @@ public class SDLContext { // 处理读取的每个数据包 private func dealPacket(packet: IPPacket) async { let networkAddr = self.config.networkAddress - if SDLDNSClientActor.Helper.isDnsRequestPacket(ipPacket: packet) { + if SDLDNSClient.Helper.isDnsRequestPacket(ipPacket: packet) { let destIp = packet.header.destination_ip self.logger.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination.asIpAddress())", level: .debug) - await self.dnsClientActor?.forward(ipPacket: packet) + self.dnsClient?.forward(ipPacket: packet) return } @@ -503,7 +503,7 @@ public class SDLContext { deinit { self.udpHole = nil - self.dnsClientActor = nil + self.dnsClient = nil } } diff --git a/Tun/Punchnet/Actors/SDLDNSClientActor.swift b/Tun/Punchnet/SDLDNSClient.swift similarity index 97% rename from Tun/Punchnet/Actors/SDLDNSClientActor.swift rename to Tun/Punchnet/SDLDNSClient.swift index 3227b8b..c35378e 100644 --- a/Tun/Punchnet/Actors/SDLDNSClientActor.swift +++ b/Tun/Punchnet/SDLDNSClient.swift @@ -10,8 +10,7 @@ import NIOCore import NIOPosix // 处理和sn-server服务器之间的通讯 -@available(macOS 14, *) -actor SDLDNSClientActor { +final class SDLDNSClient { private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) private var channel: Channel? @@ -58,7 +57,7 @@ actor SDLDNSClientActor { } -extension SDLDNSClientActor { +extension SDLDNSClient { private final class SDLDNSInboundHandler: ChannelInboundHandler { typealias InboundIn = AddressedEnvelope diff --git a/Tun/Punchnet/Actors/SDLUDPHole.swift b/Tun/Punchnet/SDLUDPHole.swift similarity index 100% rename from Tun/Punchnet/Actors/SDLUDPHole.swift rename to Tun/Punchnet/SDLUDPHole.swift