From 14e8ef894a53c050a2b487991bb4edcf9d094bfd Mon Sep 17 00:00:00 2001 From: Andrea Maria Piana Date: Fri, 9 Dec 2022 16:02:04 +0000 Subject: [PATCH] Allow setting fallback nodes after start In some cases, we don't have fallback nodes when we start. That might be due to some connectivity issues. This commit adds a method to set the fallback nodes, and triggers a refresh so that they are picked up. The method is synchronous. --- discover/v5_udp.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/discover/v5_udp.go b/discover/v5_udp.go index d4e6a2e..dea1293 100644 --- a/discover/v5_udp.go +++ b/discover/v5_udp.go @@ -29,12 +29,13 @@ import ( "sync" "time" + "github.com/waku-org/go-discover/discover/v5wire" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/netutil" - "github.com/waku-org/go-discover/discover/v5wire" ) const ( @@ -846,6 +847,17 @@ func packNodes(reqid []byte, nodes []*enode.Node) []*v5wire.Nodes { return resp } +func (t *UDPv5) SetFallbackNodes(nodes []*enode.Node) error { + err := t.tab.setFallbackNodes(nodes) + if err != nil { + return err + } + refreshDone := make(chan struct{}) + t.tab.doRefresh(refreshDone) + <-refreshDone + return nil +} + // handleTalkRequest runs the talk request handler of the requested protocol. func (t *UDPv5) handleTalkRequest(p *v5wire.TalkRequest, fromID enode.ID, fromAddr *net.UDPAddr) { t.trlock.Lock()