fix : avoid our node to be a relaynode candidate (#4037)

This commit is contained in:
emp3r0r7 2025-12-18 15:25:18 +01:00 committed by GitHub
parent 9833795864
commit d8a1f88bda
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 5 deletions

View file

@ -82,15 +82,23 @@ data class Packet(
companion object {
const val RELAY_NODE_SUFFIX_MASK = 0xFF
fun getRelayNode(relayNodeId: Int, nodes: List<Node>): Node? {
fun getRelayNode(relayNodeId: Int, nodes: List<Node>, ourNodeNum: Int?): Node? {
val relayNodeIdSuffix = relayNodeId and RELAY_NODE_SUFFIX_MASK
val candidateRelayNodes = nodes.filter { (it.num and RELAY_NODE_SUFFIX_MASK) == relayNodeIdSuffix }
val candidateRelayNodes =
nodes.filter {
it.num != ourNodeNum &&
it.lastHeard != 0 &&
(it.num and RELAY_NODE_SUFFIX_MASK) == relayNodeIdSuffix
}
val closestRelayNode =
if (candidateRelayNodes.size == 1) {
candidateRelayNodes.first()
} else {
candidateRelayNodes.minByOrNull { it.hopsAway }
}
return closestRelayNode
}
}