master
go 49 lines 1.23 KB
Raw
1 package config
2
3 import (
4 "errors"
5
6 peer "github.com/libp2p/go-libp2p/core/peer"
7 ma "github.com/multiformats/go-multiaddr"
8 )
9
10 // ErrInvalidPeerAddr signals an address is not a valid peer address.
11 var ErrInvalidPeerAddr = errors.New("invalid peer address")
12
13 func (c *Config) BootstrapPeers() ([]peer.AddrInfo, error) {
14 return ParseBootstrapPeers(c.Bootstrap)
15 }
16
17 func (c *Config) SetBootstrapPeers(bps []peer.AddrInfo) {
18 c.Bootstrap = BootstrapPeerStrings(bps)
19 }
20
21 // ParseBootstrapPeers parses a bootstrap list into a list of AddrInfos.
22 func ParseBootstrapPeers(addrs []string) ([]peer.AddrInfo, error) {
23 maddrs := make([]ma.Multiaddr, len(addrs))
24 for i, addr := range addrs {
25 var err error
26 maddrs[i], err = ma.NewMultiaddr(addr)
27 if err != nil {
28 return nil, err
29 }
30 }
31 return peer.AddrInfosFromP2pAddrs(maddrs...)
32 }
33
34 // BootstrapPeerStrings formats a list of AddrInfos as a bootstrap peer list
35 // suitable for serialization.
36 func BootstrapPeerStrings(bps []peer.AddrInfo) []string {
37 bpss := make([]string, 0, len(bps))
38 for _, pi := range bps {
39 addrs, err := peer.AddrInfoToP2pAddrs(&pi)
40 if err != nil {
41 // programmer error.
42 panic(err)
43 }
44 for _, addr := range addrs {
45 bpss = append(bpss, addr.String())
46 }
47 }
48 return bpss
49 }