github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/p2p/addrs.go (about) 1 package p2p 2 3 import ( 4 "fmt" 5 6 p2pconfig "github.com/libp2p/go-libp2p/config" 7 hst "github.com/libp2p/go-libp2p/core/host" 8 ma "github.com/multiformats/go-multiaddr" 9 ) 10 11 // Listen returns invoke function that starts listening for inbound connections with libp2p.Host. 12 func Listen(listen []string) func(h hst.Host) (err error) { 13 return func(h hst.Host) (err error) { 14 maListen := make([]ma.Multiaddr, len(listen)) 15 for i, addr := range listen { 16 maListen[i], err = ma.NewMultiaddr(addr) 17 if err != nil { 18 return fmt.Errorf("failure to parse config.P2P.ListenAddresses: %s", err) 19 } 20 } 21 return h.Network().Listen(maListen...) 22 } 23 } 24 25 // addrsFactory returns a constructor for AddrsFactory. 26 func addrsFactory(announce []string, noAnnounce []string) func() (_ p2pconfig.AddrsFactory, err error) { 27 return func() (_ p2pconfig.AddrsFactory, err error) { 28 // Convert maAnnounce strings to Multiaddresses 29 maAnnounce := make([]ma.Multiaddr, len(announce)) 30 for i, addr := range announce { 31 maAnnounce[i], err = ma.NewMultiaddr(addr) 32 if err != nil { 33 return nil, fmt.Errorf("failure to parse config.P2P.AnnounceAddresses: %s", err) 34 } 35 } 36 37 // TODO(@Wondertan): Support filtering with network masks for noAnnounce, e.g. 255.255.255.0 38 // Collect all addresses that should not be announced 39 maNoAnnounce := make(map[string]bool, len(noAnnounce)) 40 for _, addr := range noAnnounce { 41 maddr, err := ma.NewMultiaddr(addr) 42 if err != nil { 43 return nil, fmt.Errorf("failure to parse config.P2P.NoAnnounceAddresses: %s", err) 44 } 45 maNoAnnounce[string(maddr.Bytes())] = true 46 } 47 48 return func(maListen []ma.Multiaddr) []ma.Multiaddr { 49 // copy maAnnounce to out 50 out := make([]ma.Multiaddr, 0, len(maAnnounce)+len(maListen)) 51 out = append(out, maAnnounce...) 52 53 // filter out unneeded 54 for _, maddr := range maListen { 55 ok := maNoAnnounce[string(maddr.Bytes())] 56 if !ok { 57 out = append(out, maddr) 58 } 59 } 60 return out 61 }, nil 62 } 63 }