fix welcome

This commit is contained in:
anlicheng 2026-04-16 15:42:04 +08:00
parent d70549d85d
commit fb60f1ab68

View File

@ -108,6 +108,10 @@ actor SDLContextActor {
// //
private var registerTask: Task<Void, Never>? private var registerTask: Task<Void, Never>?
// stunRequest
private var stunRequestTask: Task<Void, Never>?
private let superRegistrationStateMachine = SDLSuperRegistrationStateMachine() private let superRegistrationStateMachine = SDLSuperRegistrationStateMachine()
public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher) { public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher) {
@ -323,21 +327,6 @@ actor SDLContextActor {
let localAddress = try udpHole.start() let localAddress = try udpHole.start()
SDLLogger.log("[SDLContext] udpHole started, on address: \(localAddress)") 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 messageStream = udpHole.messageStream
let messageTask = Task.detached { let messageTask = Task.detached {
@ -346,7 +335,7 @@ actor SDLContextActor {
self.udpHole = udpHole self.udpHole = udpHole
self.udpHoleLocalAddress = localAddress self.udpHoleLocalAddress = localAddress
self.udpHoleWorkers = [pingTask, messageTask] self.udpHoleWorkers = [messageTask]
// nat // nat
await self.probeNatType() 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() { private func sendStunRequest() {
guard let sessionToken = self.sessionToken else { guard let sessionToken = self.sessionToken else {
return return
@ -464,7 +474,6 @@ actor SDLContextActor {
stunRequest.natType = UInt32(self.natType.rawValue) stunRequest.natType = UInt32(self.natType.rawValue)
stunRequest.sessionToken = sessionToken stunRequest.sessionToken = sessionToken
if let v6Info = self.makeCurrentV6Info() { if let v6Info = self.makeCurrentV6Info() {
stunRequest.v6Info = v6Info stunRequest.v6Info = v6Info
} }
@ -488,9 +497,7 @@ actor SDLContextActor {
let (packets, numbers) = await self.provider.packetFlow.readPackets() let (packets, numbers) = await self.provider.packetFlow.readPackets()
for (data, number) in zip(packets, numbers) where number == 2 { 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) { 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) await self.dealTunPacket(packet: ipPacket)
} }
} }