fix
This commit is contained in:
parent
715fa6f491
commit
fe680b31b2
@ -8,6 +8,7 @@
|
||||
import Foundation
|
||||
import NIOCore
|
||||
import NIOPosix
|
||||
import SwiftProtobuf
|
||||
|
||||
// 处理和sn-server服务器之间的通讯
|
||||
actor SDLUDPHoleActor {
|
||||
@ -204,7 +205,6 @@ actor SDLUDPHoleActor {
|
||||
}
|
||||
|
||||
return .peerInfo(peerInfo)
|
||||
|
||||
case .event:
|
||||
guard let eventVal = buffer.readInteger(as: UInt8.self),
|
||||
let event = SDLEventType(rawValue: eventVal),
|
||||
|
||||
@ -149,6 +149,7 @@ public class SDLContext {
|
||||
|
||||
private func startUDPHole() async throws {
|
||||
self.udpHoleActor = try await SDLUDPHoleActor(logger: self.logger)
|
||||
|
||||
try await withThrowingTaskGroup(of: Void.self) { group in
|
||||
group.addTask {
|
||||
try await self.udpHoleActor?.start()
|
||||
@ -160,20 +161,19 @@ public class SDLContext {
|
||||
try await Task.sleep(nanoseconds: 5 * 1_000_000_000)
|
||||
try Task.checkCancellation()
|
||||
|
||||
// TODO
|
||||
// if let udpHoleActor = self.udpHoleActor {
|
||||
// let cookie = await udpHoleActor.getCookieId()
|
||||
// var stunRequest = SDLStunRequest()
|
||||
// stunRequest.clientID = self.config.clientId
|
||||
// stunRequest.networkID = self.devAddr.networkID
|
||||
// stunRequest.ip = self.devAddr.netAddr
|
||||
// stunRequest.mac = self.devAddr.mac
|
||||
// stunRequest.natType = UInt32(self.natType.rawValue)
|
||||
//
|
||||
// let remoteAddress = self.config.stunSocketAddress
|
||||
// await udpHoleActor.send(type: .stunRequest, data: try stunRequest.serializedData(), remoteAddress: remoteAddress)
|
||||
// self.lastCookie = cookie
|
||||
// }
|
||||
if let udpHoleActor = self.udpHoleActor {
|
||||
let cookie = await udpHoleActor.getCookieId()
|
||||
var stunRequest = SDLStunRequest()
|
||||
stunRequest.clientID = self.config.clientId
|
||||
stunRequest.networkID = self.config.networkAddress.networkId
|
||||
stunRequest.ip = self.config.networkAddress.ip
|
||||
stunRequest.mac = self.config.networkAddress.mac
|
||||
stunRequest.natType = UInt32(self.natType.rawValue)
|
||||
|
||||
let remoteAddress = self.config.stunSocketAddress
|
||||
await udpHoleActor.send(type: .stunRequest, data: try stunRequest.serializedData(), remoteAddress: remoteAddress)
|
||||
self.lastCookie = cookie
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -181,6 +181,28 @@ public class SDLContext {
|
||||
if let messageStream = self.udpHoleActor?.messageStream {
|
||||
for try await (remoteAddress, message) in messageStream {
|
||||
try Task.checkCancellation()
|
||||
switch message {
|
||||
case .registerSuperAck(let registerSuperAck):
|
||||
await self.handleRegisterSuperAck(registerSuperAck: registerSuperAck)
|
||||
case .registerSuperNak(let registerSuperNak):
|
||||
await self.handleRegisterSuperNak(nakPacket: registerSuperNak)
|
||||
case .peerInfo(let peerInfo):
|
||||
()
|
||||
case .event(let event):
|
||||
try await self.handleEvent(event: event)
|
||||
case .stunReply(let stunReply):
|
||||
await self.handleStunReply(stunReply: stunReply)
|
||||
case .stunProbeReply(_):
|
||||
()
|
||||
case .data(let data):
|
||||
try await self.handleData(data: data)
|
||||
case .register(let register):
|
||||
try await self.handleRegister(remoteAddress: remoteAddress, register: register)
|
||||
case .registerAck(let registerAck):
|
||||
await self.handleRegisterAck(remoteAddress: remoteAddress, registerAck: registerAck)
|
||||
default:
|
||||
self.logger.log("get unknown message: \(message)", level: .error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -254,6 +276,7 @@ public class SDLContext {
|
||||
//// return
|
||||
//// }
|
||||
///
|
||||
|
||||
private func handleRegisterSuperAck(registerSuperAck: SDLRegisterSuperAck) async {
|
||||
// 需要对数据通过rsa的私钥解码
|
||||
let aesKey = try! self.rsaCipher.decode(data: Data(registerSuperAck.aesKey))
|
||||
@ -345,7 +368,7 @@ public class SDLContext {
|
||||
}
|
||||
}
|
||||
|
||||
private func handleRegisterAck(remoteAddress: SocketAddress, registerAck: SDLRegister) async {
|
||||
private func handleRegisterAck(remoteAddress: SocketAddress, registerAck: SDLRegisterAck) async {
|
||||
// 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下
|
||||
let networkAddr = config.networkAddress
|
||||
if registerAck.dstMac == networkAddr.mac && registerAck.networkID == networkAddr.networkId {
|
||||
|
||||
@ -104,8 +104,6 @@ enum SDLHoleInboundMessage {
|
||||
case registerSuperNak(SDLRegisterSuperNak)
|
||||
|
||||
case peerInfo(SDLPeerInfo)
|
||||
case pong
|
||||
|
||||
case event(SDLEvent)
|
||||
|
||||
case stunReply(SDLStunReply)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user