fix puncher

This commit is contained in:
anlicheng 2026-04-14 16:28:13 +08:00
parent a3af3fde32
commit 6b7e02a65b

View File

@ -93,7 +93,7 @@ actor SDLPuncherActor {
quicClient.send(type: .queryInfo, data: queryData) quicClient.send(type: .queryInfo, data: queryData)
} }
func handlePeerInfo(using udpHole: SDLUDPHole?, peerInfo: SDLPeerInfo) async { func handlePeerInfo(using udpHole: SDLUDPHole?, udpHoleV6: SDLUDPHoleV6?, peerInfo: SDLPeerInfo) async {
let now = Date() let now = Date()
self.cleanupExpiredEntries(now: now) self.cleanupExpiredEntries(now: now)
@ -108,23 +108,6 @@ actor SDLPuncherActor {
entry.markCoolingDown() entry.markCoolingDown()
self.requestEntries[peerInfo.dstMac] = entry self.requestEntries[peerInfo.dstMac] = entry
guard let udpHole else {
SDLLogger.log("[SDLPuncherActor] udpHole is nil when peerInfo arrived", for: .debug)
return
}
guard peerInfo.hasV4Info else {
SDLLogger.log("[SDLPuncherActor] peerInfo missing v4Info", for: .debug)
return
}
guard let remoteAddress = try? await peerInfo.v4Info.socketAddress() else {
SDLLogger.log("[SDLPuncherActor] failed to resolve peerInfo.v4Info", for: .debug)
return
}
SDLLogger.log("[SDLContext] hole sock address: \(remoteAddress)", for: .punchnet)
var register = SDLRegister() var register = SDLRegister()
register.networkID = entry.request.networkId register.networkID = entry.request.networkId
register.srcMac = entry.request.srcMac register.srcMac = entry.request.srcMac
@ -135,7 +118,25 @@ actor SDLPuncherActor {
return return
} }
udpHole.send(type: .register, data: registerData, remoteAddress: remoteAddress) // register
if let udpHole, peerInfo.hasV4Info {
if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
SDLLogger.log("[SDLContext] hole sock address: \(remoteAddress)", for: .punchnet)
udpHole.send(type: .register, data: registerData, remoteAddress: remoteAddress)
} else {
SDLLogger.log("[SDLPuncherActor] failed to resolve peerInfo.v4Info", for: .debug)
}
}
if let udpHoleV6, peerInfo.hasV6Info {
if let remoteAddress = try? await peerInfo.v6Info.socketAddress() {
SDLLogger.log("[SDLContext] hole sock address v6: \(remoteAddress)", for: .punchnet)
udpHoleV6.send(type: .register, data: registerData, remoteAddress: remoteAddress)
} else {
SDLLogger.log("[SDLPuncherActor] failed to resolve peerInfo.v6Info", for: .debug)
}
}
} }
func stop() { func stop() {