From 9713b28d68612a3728f3a17118850a1368c0715c Mon Sep 17 00:00:00 2001 From: aeddi Date: Wed, 30 Jan 2019 16:40:51 +0100 Subject: [PATCH] feat(p2p): added helpers to count relays found in peerstore, check if they're connected and reconnect to them --- core/network/p2p/relay_conn.go | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 core/network/p2p/relay_conn.go diff --git a/core/network/p2p/relay_conn.go b/core/network/p2p/relay_conn.go new file mode 100644 index 0000000000..47c126c237 --- /dev/null +++ b/core/network/p2p/relay_conn.go @@ -0,0 +1,56 @@ +package p2p + +import ( + "context" + + host "github.com/libp2p/go-libp2p-host" + inet "github.com/libp2p/go-libp2p-net" + peer "github.com/libp2p/go-libp2p-peer" +) + +func getRelaysFromPeerstore(host host.Host) peer.IDSlice { + var relays peer.IDSlice + peers := host.Peerstore().Peers() + + for _, peer := range peers { + tags := host.ConnManager().GetTagInfo(peer) + if tags != nil { + val, exist := tags.Tags["relay-hop"] + if exist && val == 2 { + relays = append(relays, peer) + } + } + } + + return relays +} + +func CountConnectedRelays(host host.Host) int { + relays := getRelaysFromPeerstore(host) + connectedRelays := 0 + + for _, relay := range relays { + if host.Network().Connectedness(relay) == inet.Connected { + connectedRelays++ + } + } + + return connectedRelays +} + +func ReconnectToRelays(host host.Host, limit int) int { + connectedRelays := 0 + relays := getRelaysFromPeerstore(host) + + for _, relay := range relays { + relayInfo := host.Peerstore().PeerInfo(relay) + if host.Connect(context.Background(), relayInfo) == nil { + connectedRelays++ + if connectedRelays == limit { + break + } + } + } + + return connectedRelays +}