From c39c4d535cb32fabaab9ce892b1c039f21068bd2 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 14 Sep 2022 15:19:11 -0400 Subject: [PATCH] feat: support multiple DNS discovery URLs (#309) --- waku.go | 4 ++-- waku/node.go | 24 +++++++++++++----------- waku/options.go | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/waku.go b/waku.go index 3736a6e8..0540dfa1 100644 --- a/waku.go +++ b/waku.go @@ -354,10 +354,10 @@ func main() { Usage: "Enable DNS discovery", Destination: &options.DNSDiscovery.Enable, }, - &cli.StringFlag{ + &cli.StringSliceFlag{ Name: "dns-discovery-url", Usage: "URL for DNS node list in format 'enrtree://@'", - Destination: &options.DNSDiscovery.URL, + Destination: &options.DNSDiscovery.URLs, }, &cli.StringFlag{ Name: "dns-discovery-name-server", diff --git a/waku/node.go b/waku/node.go index 7a0286f9..2aa5c1f8 100644 --- a/waku/node.go +++ b/waku/node.go @@ -226,18 +226,20 @@ func Execute(options Options) { var discoveredNodes []dnsdisc.DiscoveredNode if options.DNSDiscovery.Enable { - if options.DNSDiscovery.URL != "" { - logger.Info("attempting DNS discovery with ", zap.String("URL", options.DNSDiscovery.URL)) - nodes, err := dnsdisc.RetrieveNodes(ctx, options.DNSDiscovery.URL, dnsdisc.WithNameserver(options.DNSDiscovery.Nameserver)) - if err != nil { - logger.Warn("dns discovery error ", zap.Error(err)) - } else { - var discAddresses []multiaddr.Multiaddr - for _, n := range nodes { - discAddresses = append(discAddresses, n.Addresses...) + if len(options.DNSDiscovery.URLs.Value()) != 0 { + for _, url := range options.DNSDiscovery.URLs.Value() { + logger.Info("attempting DNS discovery with ", zap.String("URL", url)) + nodes, err := dnsdisc.RetrieveNodes(ctx, url, dnsdisc.WithNameserver(options.DNSDiscovery.Nameserver)) + if err != nil { + logger.Warn("dns discovery error ", zap.Error(err)) + } else { + var discAddresses []multiaddr.Multiaddr + for _, n := range nodes { + discAddresses = append(discAddresses, n.Addresses...) + } + logger.Info("found dns entries ", logging.MultiAddrs("nodes", discAddresses...)) + discoveredNodes = nodes } - logger.Info("found dns entries ", logging.MultiAddrs("nodes", discAddresses...)) - discoveredNodes = nodes } } else { logger.Fatal("DNS discovery URL is required") diff --git a/waku/options.go b/waku/options.go index 3f861679..339eda6c 100644 --- a/waku/options.go +++ b/waku/options.go @@ -103,7 +103,7 @@ type SwapOptions struct { // information for nodes. It's very useful for bootstrapping a p2p network. type DNSDiscoveryOptions struct { Enable bool - URL string + URLs cli.StringSlice Nameserver string }