p2p: skip nodes with node.nr label when selecting relay peer

This commit is contained in:
rkonfj
2025-02-06 17:21:16 +08:00
parent 6ffb1d49b6
commit 00feea3a5e
2 changed files with 25 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
package disco
import "strings"
type PeerID string
func (id PeerID) String() string {
@@ -17,3 +19,21 @@ func (id PeerID) Len() byte {
func (id PeerID) Bytes() []byte {
return []byte(id)
}
type Labels []string
func (ls Labels) Get(key string) (string, bool) {
for _, l := range ls {
kv := strings.Split(l, "=")
if len(kv) == 2 {
if kv[0] == key {
return kv[1], true
}
continue
}
if kv[0] == key {
return "", true
}
}
return "", false
}

View File

@@ -270,8 +270,12 @@ func (c *PacketConn) relayPeer(peerID disco.PeerID) disco.PeerID {
if meta == nil {
continue
}
if _, ok := disco.Labels(meta["label"]).Get("node.nr"); ok {
// can not as relay peer when `node.nr` label is present
continue
}
peerNAT := disco.NATType(meta.Get("nat"))
if peerNAT == disco.Easy || peerNAT == disco.IP4 {
if peerNAT == disco.Easy || peerNAT == disco.IP4 || peerNAT == disco.IP46 {
return p.PeerID
}
}