Relocate multiaddrJoin and multiaddrSplit to api/types.h
So they can serve as multi-module helpers without having circular deps. License: MIT Signed-off-by: Hector Sanjuan <code@hector.link>
This commit is contained in:
parent
2227e5e25f
commit
a73d7e6f7e
|
@ -8,7 +8,6 @@ import (
|
|||
|
||||
logging "github.com/ipfs/go-log"
|
||||
host "github.com/libp2p/go-libp2p-host"
|
||||
peer "github.com/libp2p/go-libp2p-peer"
|
||||
ma "github.com/multiformats/go-multiaddr"
|
||||
madns "github.com/multiformats/go-multiaddr-dns"
|
||||
manet "github.com/multiformats/go-multiaddr-net"
|
||||
|
@ -161,23 +160,3 @@ func (c *Client) setupHostname() error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func multiaddrSplit(addr ma.Multiaddr) (peer.ID, ma.Multiaddr, error) {
|
||||
pid, err := addr.ValueForProtocol(ma.P_IPFS)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer multiaddress: %s: %s", addr, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
ipfs, _ := ma.NewMultiaddr("/ipfs/" + pid)
|
||||
decapAddr := addr.Decapsulate(ipfs)
|
||||
|
||||
peerID, err := peer.IDB58Decode(pid)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer ID in multiaddress: %s: %s", pid, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
return peerID, decapAddr, nil
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ import (
|
|||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/ipfs/ipfs-cluster/api"
|
||||
|
||||
p2phttp "github.com/hsanjuan/go-libp2p-http"
|
||||
libp2p "github.com/libp2p/go-libp2p"
|
||||
ipnet "github.com/libp2p/go-libp2p-interface-pnet"
|
||||
|
@ -37,7 +39,7 @@ func (c *Client) defaultTransport() {
|
|||
func (c *Client) enableLibp2p() error {
|
||||
c.defaultTransport()
|
||||
|
||||
pid, addr, err := multiaddrSplit(c.config.PeerAddr)
|
||||
pid, addr, err := api.Libp2pMultiaddrSplit(c.config.PeerAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
36
api/types.go
36
api/types.go
|
@ -22,7 +22,7 @@ import (
|
|||
|
||||
// needed to parse /ws multiaddresses
|
||||
_ "github.com/libp2p/go-ws-transport"
|
||||
// needed to prase /dns* multiaddresses
|
||||
// needed to parse /dns* multiaddresses
|
||||
_ "github.com/multiformats/go-multiaddr-dns"
|
||||
)
|
||||
|
||||
|
@ -687,3 +687,37 @@ type Error struct {
|
|||
func (e *Error) Error() string {
|
||||
return fmt.Sprintf("%s (%d)", e.Message, e.Code)
|
||||
}
|
||||
|
||||
// Libp2pMultiaddrSplit takes a LibP2P multiaddress (/<multiaddr>/ipfs/<peerID>)
|
||||
// and decapsulates it, parsing the peer ID. Returns an error if there is
|
||||
// any problem (for example, the provided address not being a Libp2p one).
|
||||
func Libp2pMultiaddrSplit(addr ma.Multiaddr) (peer.ID, ma.Multiaddr, error) {
|
||||
pid, err := addr.ValueForProtocol(ma.P_IPFS)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer multiaddress: %s: %s", addr, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
ipfs, _ := ma.NewMultiaddr("/ipfs/" + pid)
|
||||
decapAddr := addr.Decapsulate(ipfs)
|
||||
|
||||
peerID, err := peer.IDB58Decode(pid)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer ID in multiaddress: %s: %s", pid, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
return peerID, decapAddr, nil
|
||||
}
|
||||
|
||||
// Libp2pMultiaddrJoin takes a LibP2P multiaddress and a peer ID and
|
||||
// encapsulates a new /ipfs/<peerID> address.
|
||||
func Libp2pMultiaddrJoin(addr ma.Multiaddr, p peer.ID) ma.Multiaddr {
|
||||
pidAddr, err := ma.NewMultiaddr("/ipfs/" + peer.IDB58Encode(p))
|
||||
// let this break badly
|
||||
if err != nil {
|
||||
panic("called Libp2pMultiaddrJoin with bad peer!")
|
||||
}
|
||||
return addr.Encapsulate(pidAddr)
|
||||
}
|
||||
|
|
|
@ -580,7 +580,7 @@ func (c *Cluster) ID() api.ID {
|
|||
}
|
||||
for k := range addrsSet {
|
||||
addr, _ := ma.NewMultiaddr(k)
|
||||
addrs = append(addrs, multiaddrJoin(addr, c.id))
|
||||
addrs = append(addrs, api.Libp2pMultiaddrJoin(addr, c.id))
|
||||
}
|
||||
|
||||
peers := []peer.ID{}
|
||||
|
@ -617,7 +617,7 @@ func (c *Cluster) PeerAdd(addr ma.Multiaddr) (api.ID, error) {
|
|||
c.paMux.Lock()
|
||||
defer c.paMux.Unlock()
|
||||
logger.Debugf("peerAdd called with %s", addr)
|
||||
pid, decapAddr, err := multiaddrSplit(addr)
|
||||
pid, decapAddr, err := api.Libp2pMultiaddrSplit(addr)
|
||||
if err != nil {
|
||||
id := api.ID{
|
||||
Error: err.Error(),
|
||||
|
@ -749,7 +749,7 @@ func (c *Cluster) Join(addr ma.Multiaddr) error {
|
|||
// return errors.New("only single-node clusters can be joined")
|
||||
//}
|
||||
|
||||
pid, _, err := multiaddrSplit(addr)
|
||||
pid, _, err := api.Libp2pMultiaddrSplit(addr)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return err
|
||||
|
@ -771,7 +771,7 @@ func (c *Cluster) Join(addr ma.Multiaddr) error {
|
|||
"Cluster",
|
||||
"PeerAdd",
|
||||
api.MultiaddrToSerial(
|
||||
multiaddrJoin(c.config.ListenAddr, c.id)),
|
||||
api.Libp2pMultiaddrJoin(c.config.ListenAddr, c.id)),
|
||||
&myID)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
|
|
@ -5,6 +5,8 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/ipfs/ipfs-cluster/api"
|
||||
|
||||
host "github.com/libp2p/go-libp2p-host"
|
||||
peer "github.com/libp2p/go-libp2p-peer"
|
||||
peerstore "github.com/libp2p/go-libp2p-peerstore"
|
||||
|
@ -27,7 +29,7 @@ func newPeerManager(h host.Host) *peerManager {
|
|||
|
||||
func (pm *peerManager) addPeer(addr ma.Multiaddr, connect bool) error {
|
||||
logger.Debugf("adding peer address %s", addr)
|
||||
pid, decapAddr, err := multiaddrSplit(addr)
|
||||
pid, decapAddr, err := api.Libp2pMultiaddrSplit(addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -36,7 +36,6 @@ func peerManagerClusters(t *testing.T) ([]*Cluster, []*test.IpfsMock) {
|
|||
func clusterAddr(c *Cluster) ma.Multiaddr {
|
||||
cAddr, _ := ma.NewMultiaddr(fmt.Sprintf("%s/ipfs/%s", c.host.Addrs()[0], c.id.Pretty()))
|
||||
return cAddr
|
||||
//return multiaddrJoin(c.config.ListenAddr, c.ID().ID)
|
||||
}
|
||||
|
||||
func TestClustersPeerAdd(t *testing.T) {
|
||||
|
|
|
@ -389,6 +389,6 @@ func (rpcapi *RPCAPI) RemoteMultiaddrForPeer(ctx context.Context, in peer.ID, ou
|
|||
if len(conns) == 0 {
|
||||
return errors.New("no connections to: " + in.Pretty())
|
||||
}
|
||||
*out = api.MultiaddrToSerial(multiaddrJoin(conns[0].RemoteMultiaddr(), in))
|
||||
*out = api.MultiaddrToSerial(api.Libp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), in))
|
||||
return nil
|
||||
}
|
||||
|
|
41
util.go
41
util.go
|
@ -60,41 +60,6 @@ func copyEmptyStructToIfaces(in []struct{}) []interface{} {
|
|||
return ifaces
|
||||
}
|
||||
|
||||
// MultiaddrSplit takes a /proto/value/ipfs/id multiaddress and returns
|
||||
// the id on one side and the /proto/value multiaddress on the other.
|
||||
func MultiaddrSplit(addr ma.Multiaddr) (peer.ID, ma.Multiaddr, error) {
|
||||
return multiaddrSplit(addr)
|
||||
}
|
||||
|
||||
func multiaddrSplit(addr ma.Multiaddr) (peer.ID, ma.Multiaddr, error) {
|
||||
pid, err := addr.ValueForProtocol(ma.P_IPFS)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer multiaddress: %s: %s", addr, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
ipfs, _ := ma.NewMultiaddr("/ipfs/" + pid)
|
||||
decapAddr := addr.Decapsulate(ipfs)
|
||||
|
||||
peerID, err := peer.IDB58Decode(pid)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("invalid peer ID in multiaddress: %s: %s", pid, err)
|
||||
logger.Error(err)
|
||||
return "", nil, err
|
||||
}
|
||||
return peerID, decapAddr, nil
|
||||
}
|
||||
|
||||
func multiaddrJoin(addr ma.Multiaddr, p peer.ID) ma.Multiaddr {
|
||||
pidAddr, err := ma.NewMultiaddr("/ipfs/" + peer.IDB58Encode(p))
|
||||
// let this break badly
|
||||
if err != nil {
|
||||
panic("called multiaddrJoin with bad peer!")
|
||||
}
|
||||
return addr.Encapsulate(pidAddr)
|
||||
}
|
||||
|
||||
// PeersFromMultiaddrs returns all the different peers in the given addresses.
|
||||
// each peer only will appear once in the result, even if several
|
||||
// multiaddresses for it are provided.
|
||||
|
@ -102,7 +67,7 @@ func PeersFromMultiaddrs(addrs []ma.Multiaddr) []peer.ID {
|
|||
var pids []peer.ID
|
||||
pm := make(map[peer.ID]struct{})
|
||||
for _, addr := range addrs {
|
||||
pid, _, err := multiaddrSplit(addr)
|
||||
pid, _, err := api.Libp2pMultiaddrSplit(addr)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
@ -140,9 +105,9 @@ func PeersFromMultiaddrs(addrs []ma.Multiaddr) []peer.ID {
|
|||
func getRemoteMultiaddr(h host.Host, pid peer.ID, addr ma.Multiaddr) ma.Multiaddr {
|
||||
conns := h.Network().ConnsToPeer(pid)
|
||||
if len(conns) > 0 {
|
||||
return multiaddrJoin(conns[0].RemoteMultiaddr(), pid)
|
||||
return api.Libp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), pid)
|
||||
}
|
||||
return multiaddrJoin(addr, pid)
|
||||
return api.Libp2pMultiaddrJoin(addr, pid)
|
||||
}
|
||||
|
||||
func pinInfoSliceToSerial(pi []api.PinInfo) []api.PinInfoSerial {
|
||||
|
|
Loading…
Reference in New Issue
Block a user