fix welcome
This commit is contained in:
parent
d70549d85d
commit
fb60f1ab68
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user