From fb60f1ab680e0bb81a3ea67744e105b0d8aa65f2 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Thu, 16 Apr 2026 15:42:04 +0800 Subject: [PATCH] fix welcome --- Tun/Punchnet/Actors/SDLContextActor.swift | 45 +++++++++++++---------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index 777bffa..4c49fc0 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -108,6 +108,10 @@ actor SDLContextActor { // 注册任务 private var registerTask: Task? + + // stunRequest任务 + private var stunRequestTask: Task? + private let superRegistrationStateMachine = SDLSuperRegistrationStateMachine() public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher) { @@ -323,21 +327,6 @@ actor SDLContextActor { let localAddress = try udpHole.start() SDLLogger.log("[SDLContext] udpHole started, on address: \(localAddress)") - // 处理心跳逻辑 - let pingTask = Task.detached { - let timerStream = SDLAsyncTimerStream() - timerStream.start(interval: .seconds(5)) - - for await _ in timerStream.stream { - if Task.isCancelled { - break - } - await self.sendStunRequest() - } - - SDLLogger.log("[SDLContext] udp pingTask cancel") - } - // 处理消息流 let messageStream = udpHole.messageStream let messageTask = Task.detached { @@ -346,7 +335,7 @@ actor SDLContextActor { self.udpHole = udpHole self.udpHoleLocalAddress = localAddress - self.udpHoleWorkers = [pingTask, messageTask] + self.udpHoleWorkers = [messageTask] // 开始探测nat的类型 await self.probeNatType() @@ -451,6 +440,27 @@ actor SDLContextActor { } } + // MARK: -- StunRequestTask + private func startStunRequestTask(welcome: SDLWelcome) { + // 通过 welcome信息拿到当前可用使用的ipv6地址 + + + // 处理心跳逻辑 + self.stunRequestTask = Task.detached { + let timerStream = SDLAsyncTimerStream() + timerStream.start(interval: .seconds(5)) + + for await _ in timerStream.stream { + if Task.isCancelled { + break + } + await self.sendStunRequest() + } + + SDLLogger.log("[SDLContext] udp stunRequestTask cancel") + } + } + private func sendStunRequest() { guard let sessionToken = self.sessionToken else { return @@ -464,7 +474,6 @@ actor SDLContextActor { stunRequest.natType = UInt32(self.natType.rawValue) stunRequest.sessionToken = sessionToken - if let v6Info = self.makeCurrentV6Info() { stunRequest.v6Info = v6Info } @@ -488,9 +497,7 @@ actor SDLContextActor { let (packets, numbers) = await self.provider.packetFlow.readPackets() for (data, number) in zip(packets, numbers) where number == 2 { - SDLLogger.log("[SDLContext] read Tun packet step 1, data count: \(data.count)", for: .trace) if let ipPacket = IPPacket(data) { - SDLLogger.log("[SDLContext] read Tun packet step 2, data count: \(ipPacket.data.count)", for: .trace) await self.dealTunPacket(packet: ipPacket) } }