From 8d6b2cd721eb81144fa4d6f99002afc1106ab330 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Mon, 15 May 2023 14:44:36 -0400 Subject: [PATCH] refactor: add `--ext-ip` and `--dns4-domain-name` values to the list of node multiaddressess --- waku/v2/node/wakunode2.go | 10 ++++++--- waku/v2/node/wakuoptions.go | 35 ++++++++++++++++++++------------ waku/v2/node/wakuoptions_test.go | 2 +- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index 96bb219a..6f33b38f 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -124,6 +124,7 @@ func defaultStoreFactory(w *WakuNode) store.Store { // New is used to instantiate a WakuNode using a set of WakuNodeOptions func New(opts ...WakuNodeOption) (*WakuNode, error) { + var err error params := new(WakuNodeParameters) params.libP2POpts = DefaultLibP2POptions @@ -157,11 +158,16 @@ func New(opts ...WakuNodeOption) (*WakuNode, error) { // Setting default host address if none was provided if params.hostAddr == nil { - err := WithHostAddress(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: 0})(params) + params.hostAddr, err = net.ResolveTCPAddr("tcp", "0.0.0.0:0") + if err != nil { + return nil, err + } + err = WithHostAddress(params.hostAddr)(params) if err != nil { return nil, err } } + if len(params.multiAddr) > 0 { params.libP2POpts = append(params.libP2POpts, libp2p.ListenAddrs(params.multiAddr...)) } @@ -172,8 +178,6 @@ func New(opts ...WakuNodeOption) (*WakuNode, error) { params.libP2POpts = append(params.libP2POpts, libp2p.AddrsFactory(params.addressFactory)) } - var err error - w := new(WakuNode) w.bcaster = relay.NewBroadcaster(1024) w.opts = params diff --git a/waku/v2/node/wakuoptions.go b/waku/v2/node/wakuoptions.go index 4891fd9b..1ca086fc 100644 --- a/waku/v2/node/wakuoptions.go +++ b/waku/v2/node/wakuoptions.go @@ -167,9 +167,9 @@ func WithLogLevel(lvl zapcore.Level) WakuNodeOption { func WithDns4Domain(dns4Domain string) WakuNodeOption { return func(params *WakuNodeParameters) error { params.dns4Domain = dns4Domain - - params.addressFactory = func([]multiaddr.Multiaddr) []multiaddr.Multiaddr { - var result []multiaddr.Multiaddr + previousAddrFactory := params.addressFactory + params.addressFactory = func(inputAddr []multiaddr.Multiaddr) (addresses []multiaddr.Multiaddr) { + addresses = append(addresses, inputAddr...) hostAddrMA, err := multiaddr.NewMultiaddr("/dns4/" + params.dns4Domain) if err != nil { @@ -178,18 +178,23 @@ func WithDns4Domain(dns4Domain string) WakuNodeOption { tcp, _ := multiaddr.NewMultiaddr(fmt.Sprintf("/tcp/%d", params.hostAddr.Port)) - result = append(result, hostAddrMA.Encapsulate(tcp)) + addresses = append(addresses, hostAddrMA.Encapsulate(tcp)) if params.enableWS || params.enableWSS { if params.enableWSS { wss, _ := multiaddr.NewMultiaddr(fmt.Sprintf("/tcp/%d/wss", params.wssPort)) - result = append(result, hostAddrMA.Encapsulate(wss)) + addresses = append(addresses, hostAddrMA.Encapsulate(wss)) } else { ws, _ := multiaddr.NewMultiaddr(fmt.Sprintf("/tcp/%d/ws", params.wsPort)) - result = append(result, hostAddrMA.Encapsulate(ws)) + addresses = append(addresses, hostAddrMA.Encapsulate(ws)) } } - return result + + if previousAddrFactory != nil { + return previousAddrFactory(addresses) + } else { + return addresses + } } return nil @@ -214,17 +219,17 @@ func WithHostAddress(hostAddr *net.TCPAddr) WakuNodeOption { func WithAdvertiseAddresses(advertiseAddrs ...ma.Multiaddr) WakuNodeOption { return func(params *WakuNodeParameters) error { params.advertiseAddrs = advertiseAddrs - params.addressFactory = func([]multiaddr.Multiaddr) (addresses []multiaddr.Multiaddr) { - return advertiseAddrs - } - return nil + return WithMultiaddress(advertiseAddrs...)(params) } } // WithExternalIP is a WakuNodeOption that allows overriding the advertised external IP used in the waku node with custom value func WithExternalIP(ip net.IP) WakuNodeOption { return func(params *WakuNodeParameters) error { + oldAddrFactory := params.addressFactory params.addressFactory = func(inputAddr []multiaddr.Multiaddr) (addresses []multiaddr.Multiaddr) { + addresses = append(addresses, inputAddr...) + component := "/ip4/" if ip.To4() == nil && ip.To16() != nil { component = "/ip6/" @@ -248,14 +253,18 @@ func WithExternalIP(ip net.IP) WakuNodeOption { addresses = append(addresses, addr) } - return addresses + if oldAddrFactory != nil { + return oldAddrFactory(addresses) + } else { + return addresses + } } return nil } } // WithMultiaddress is a WakuNodeOption that configures libp2p to listen on a list of multiaddresses -func WithMultiaddress(addresses []multiaddr.Multiaddr) WakuNodeOption { +func WithMultiaddress(addresses ...multiaddr.Multiaddr) WakuNodeOption { return func(params *WakuNodeParameters) error { params.multiAddr = append(params.multiAddr, addresses...) return nil diff --git a/waku/v2/node/wakuoptions_test.go b/waku/v2/node/wakuoptions_test.go index ab7b228c..ba83d8c5 100644 --- a/waku/v2/node/wakuoptions_test.go +++ b/waku/v2/node/wakuoptions_test.go @@ -34,7 +34,7 @@ func TestWakuOptions(t *testing.T) { options := []WakuNodeOption{ WithHostAddress(hostAddr), WithAdvertiseAddresses(addr), - WithMultiaddress([]multiaddr.Multiaddr{addr}), + WithMultiaddress(addr), WithPrivateKey(prvKey), WithLibP2POptions(), WithWakuRelay(),