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