func initConnections(ctx context.Context, cfg *config.Config, pstore peer.Peerstore, route *dht.IpfsDHT) { // TODO consider stricter error handling // TODO consider Criticalf error logging for _, p := range cfg.Bootstrap { if p.PeerID == "" { log.Criticalf("error: peer does not include PeerID. %v", p) } maddr, err := ma.NewMultiaddr(p.Address) if err != nil { log.Error(err) continue } // setup peer npeer, err := pstore.Get(peer.DecodePrettyID(p.PeerID)) if err != nil { log.Criticalf("Bootstrapping error: %v", err) continue } npeer.AddAddress(maddr) if _, err = route.Connect(ctx, npeer); err != nil { log.Criticalf("Bootstrapping error: %v", err) continue } log.Event(ctx, "bootstrap", npeer) } }
// splitAddresses is a function that takes in a slice of string peer addresses // (multiaddr + peerid) and returns slices of multiaddrs and peerids. func splitAddresses(addrs []string) (maddrs []ma.Multiaddr, pids []peer.ID, err error) { maddrs = make([]ma.Multiaddr, len(addrs)) pids = make([]peer.ID, len(addrs)) for i, addr := range addrs { a, err := ma.NewMultiaddr(path.Dir(addr)) if err != nil { return nil, nil, cmds.ClientError("invalid peer address: " + err.Error()) } maddrs[i] = a pids[i] = peer.DecodePrettyID(path.Base(addr)) } return }