diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index b06d743..b319eda 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -48,6 +48,7 @@ actor SDLContextActor { private var udpHole: SDLUDPHole? private var udpHoleWorkers: [Task]? private var udpHoleLocalAddress: SocketAddress? + private var udpHoleV6: SDLUDPHoleV6? private var udpHoleV6Workers: [Task]? private var udpHoleV6LocalAddress: SocketAddress? @@ -347,22 +348,22 @@ actor SDLContextActor { private func startUDPHoleV6() async throws -> SDLUDPHoleV6 { self.udpHoleV6Workers?.forEach {$0.cancel()} self.udpHoleV6Workers = nil - + // 启动udp服务器 let udpHoleV6 = try SDLUDPHoleV6() let localAddress = try udpHoleV6.start() SDLLogger.log("[SDLContext] udpHoleV6 started, on address: \(localAddress)") - + // 处理消息流 let messageStream = udpHoleV6.messageStream let messageTask = Task.detached { await self.consumeUDPHoleMessages(stream: messageStream, localAddress: localAddress, source: .v6) } - + self.udpHoleV6 = udpHoleV6 self.udpHoleV6LocalAddress = localAddress self.udpHoleV6Workers = [messageTask] - + return udpHoleV6 } @@ -392,16 +393,12 @@ actor SDLContextActor { self.quicClient?.stop() self.quicClient = nil - if let dnsClient = self.dnsClient { - await dnsClient.stop() - } + await self.dnsClient?.stop() self.dnsWorker?.cancel() self.dnsWorker = nil self.dnsClient = nil - if let dnsLocalClient = self.dnsLocalClient { - await dnsLocalClient.stop() - } + await self.dnsLocalClient?.stop() self.dnsLocalWorker?.cancel() self.dnsLocalWorker = nil self.dnsLocalClient = nil @@ -424,8 +421,7 @@ actor SDLContextActor { self.dataCipher = nil } - private func publishTunnelEvent(code: Int? = nil, - message: String) { + private func publishTunnelEvent(code: Int? = nil, message: String) { SDLTunnelAppNotifier.shared.publish(code: code, message: message) } @@ -849,6 +845,11 @@ extension SDLContextActor { private func handleHoleControlMessage(_ message: SDLHoleControlMessage, localAddress: SocketAddress, remoteAddress: SocketAddress, source: UDPHoleKind) async { switch message { + case .stunReply(_): + guard source == .v4 else { + return + } + SDLLogger.log("[SDLContext] get a stunReply", for: .debug) case .stunProbeReply(let probeReply): guard source == .v4 else { return @@ -858,9 +859,6 @@ extension SDLContextActor { try? self.handleRegister(remoteAddress: remoteAddress, register: register) case .registerAck(let registerAck): self.handleRegisterAck(remoteAddress: remoteAddress, registerAck: registerAck) - case .stunReply(_): - //SDLLogger.shared.log("[SDLContext] get a stunReply: \(stunReply)") - () } } @@ -932,6 +930,7 @@ extension SDLContextActor { () } } + } private extension UInt32 {