fix hole data
This commit is contained in:
parent
969921c438
commit
be702e0628
@ -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-node查询到的nat地址不一定靠谱,需要通过udp包的来源地址作为nat地址
|
||||
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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user