// IDB58Decode returns a b58-decoded Peer func IDB58Decode(s string) (ID, error) { m, err := mh.FromB58String(s) if err != nil { return "", err } return ID(m), err }
func addressStringToBytes(p Protocol, s string) ([]byte, error) { switch p.Code { case P_IP4: // ipv4 i := net.ParseIP(s).To4() if i == nil { return nil, fmt.Errorf("failed to parse ip4 addr: %s", s) } return i, nil case P_IP6: // ipv6 i := net.ParseIP(s).To16() if i == nil { return nil, fmt.Errorf("failed to parse ip6 addr: %s", s) } return i, nil // tcp udp dccp sctp case P_TCP, P_UDP, P_DCCP, P_SCTP: i, err := strconv.Atoi(s) if err != nil { return nil, fmt.Errorf("failed to parse %s addr: %s", p.Name, err) } if i >= 65536 { return nil, fmt.Errorf("failed to parse %s addr: %s", p.Name, "greater than 65536") } b := make([]byte, 2) binary.BigEndian.PutUint16(b, uint16(i)) return b, nil case P_IPFS: // ipfs // the address is a varint prefixed multihash string representation m, err := mh.FromB58String(s) if err != nil { return nil, fmt.Errorf("failed to parse ipfs addr: %s %s", s, err) } size := CodeToVarint(len(m)) b := append(size, m...) return b, nil } return []byte{}, fmt.Errorf("failed to parse %s addr: unknown", p.Name) }