// 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 }
func doMount(node *core.IpfsNode, fsdir, nsdir string) error { fmtFuseErr := func(err error) error { s := err.Error() if strings.Contains(s, fuseNoDirectory) { s = strings.Replace(s, `fusermount: "fusermount:`, "", -1) s = strings.Replace(s, `\n", exit status 1`, "", -1) return cmds.ClientError(s) } return err } // this sync stuff is so that both can be mounted simultaneously. var fsmount mount.Mount var nsmount mount.Mount var err1 error var err2 error done := make(chan struct{}) go func() { fsmount, err1 = rofs.Mount(node, fsdir) done <- struct{}{} }() go func() { nsmount, err2 = ipns.Mount(node, nsdir, fsdir) done <- struct{}{} }() <-done <-done if err1 != nil || err2 != nil { fsmount.Close() nsmount.Close() if err1 != nil { return fmtFuseErr(err1) } else { return fmtFuseErr(err2) } } // setup node state, so that it can be cancelled node.Mounts.Ipfs = fsmount node.Mounts.Ipns = nsmount return nil }
}, Run: func(req cmds.Request) (interface{}, error) { node, err := req.Context().GetNode() if err != nil { return nil, err } if len(req.Arguments()) == 0 { return printPeer(node.Identity) } pid := req.Arguments()[0] id := peer.ID(b58.Decode(pid)) if len(id) == 0 { return nil, cmds.ClientError("Invalid peer id") } ctx, _ := context.WithTimeout(context.TODO(), time.Second*5) if node.Routing == nil { return nil, errors.New(offlineIdErrorMessage) } p, err := node.Routing.FindPeer(ctx, id) if err == kb.ErrLookupFailure { return nil, errors.New(offlineIdErrorMessage) } if err != nil { return nil, err } return printPeer(p)
if err != nil { return nil, err } typeStr, found, err := req.Option("type").String() if err != nil { return nil, err } if !found { typeStr = "direct" } switch typeStr { case "all", "direct", "indirect", "recursive": default: return nil, cmds.ClientError("Invalid type '" + typeStr + "', must be one of {direct, indirect, recursive, all}") } keys := make([]u.Key, 0) if typeStr == "direct" || typeStr == "all" { keys = append(keys, n.Pinning.DirectKeys()...) } if typeStr == "indirect" || typeStr == "all" { keys = append(keys, n.Pinning.IndirectKeys()...) } if typeStr == "recursive" || typeStr == "all" { keys = append(keys, n.Pinning.RecursiveKeys()...) } return &KeyList{Keys: keys}, nil },