fix hole data

This commit is contained in:
anlicheng 2026-04-14 17:14:40 +08:00
parent 969921c438
commit be702e0628

View File

@ -521,8 +521,7 @@ actor SDLContextActor {
}
if let stunData = try? stunRequest.serializedData() {
let remoteAddress = self.config.stunSocketAddress
self.sendHolePacket(type: .stunRequest, data: stunData, remoteAddress: remoteAddress)
self.sendSuperPacket(type: .stunRequest, data: stunData)
}
}
@ -609,12 +608,12 @@ actor SDLContextActor {
if sendRegisterEvent.natIp > 0 && sendRegisterEvent.natPort > 0 {
let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp)
if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) {
self.sendHolePacket(type: .register, data: registerData, remoteAddress: remoteAddress)
self.sendPeerPacket(type: .register, data: registerData, remoteAddress: remoteAddress)
}
}
if sendRegisterEvent.hasV6Info, let remoteAddress = try? await sendRegisterEvent.v6Info.socketAddress() {
self.sendHolePacket(type: .register, data: registerData, remoteAddress: remoteAddress)
self.sendPeerPacket(type: .register, data: registerData, remoteAddress: remoteAddress)
}
case .shutdown(let shutdownEvent):
let alertNotice = NoticeMessage.alert(alert: shutdownEvent.message)
@ -659,7 +658,7 @@ actor SDLContextActor {
registerAck.srcMac = networkAddr.mac
registerAck.dstMac = register.srcMac
self.sendHolePacket(type: .registerAck, data: try registerAck.serializedData(), remoteAddress: remoteAddress)
self.sendPeerPacket(type: .registerAck, data: try registerAck.serializedData(), remoteAddress: remoteAddress)
// , super-nodenatudpnat
let session = Session(dstMac: register.srcMac, natAddress: remoteAddress)
self.sessionManager.addSession(session: session)
@ -912,18 +911,18 @@ actor SDLContextActor {
// 广
if ARPPacket.isBroadcastMac(dstMac) {
// super_node
self.sendHolePacket(type: .data, data: data, remoteAddress: self.config.stunSocketAddress)
self.sendSuperPacket(type: .data, data: data)
}
else {
// session
if let session = self.sessionManager.getSession(toAddress: dstMac) {
SDLLogger.log("[SDLContext] step 5 send packet by session: \(session)", for: .trace)
self.sendHolePacket(type: .data, data: data, remoteAddress: session.natAddress)
self.sendPeerPacket(type: .data, data: data, remoteAddress: session.natAddress)
self.flowTracer.inc(num: data.count, type: .p2p)
}
else {
// super_node
self.sendHolePacket(type: .data, data: data, remoteAddress: self.config.stunSocketAddress)
self.sendSuperPacket(type: .data, data: data)
SDLLogger.log("[SDLContext] step 5 send packet by super: \(self.config.stunSocketAddress)", for: .trace)
//
self.flowTracer.inc(num: data.count, type: .forward)
@ -986,8 +985,13 @@ actor SDLContextActor {
SDLLogger.log("[SDLContext] nat_type is: \(natType)")
}
// hole
private func sendHolePacket(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) {
// super/stun
private func sendSuperPacket(type: SDLPacketType, data: Data) {
self.udpHole?.send(type: type, data: data, remoteAddress: self.config.stunSocketAddress)
}
// peer
private func sendPeerPacket(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) {
switch remoteAddress {
case .v4:
self.udpHole?.send(type: type, data: data, remoteAddress: remoteAddress)