From 39fb193eaf0a36e203e262e08ecd439cde123368 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 24 Nov 2017 15:12:47 +0100 Subject: [PATCH] Peerstore: support dns multiaddresses License: MIT Signed-off-by: Hector Sanjuan --- peer_manager.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/peer_manager.go b/peer_manager.go index 348fed92..fcaa7866 100644 --- a/peer_manager.go +++ b/peer_manager.go @@ -1,12 +1,15 @@ package ipfscluster import ( + "context" "fmt" + "time" host "github.com/libp2p/go-libp2p-host" peer "github.com/libp2p/go-libp2p-peer" peerstore "github.com/libp2p/go-libp2p-peerstore" ma "github.com/multiformats/go-multiaddr" + madns "github.com/multiformats/go-multiaddr-dns" ) // peerManager provides wrappers peerset control @@ -25,6 +28,19 @@ func (pm *peerManager) addPeer(addr ma.Multiaddr) error { return err } pm.host.Peerstore().AddAddr(pid, decapAddr, peerstore.PermanentAddrTTL) + + // dns multiaddresses need to be resolved because libp2p only does that + // on explicit bhost.Connect(). + if madns.Matches(addr) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) + defer cancel() + resolvedAddrs, err := madns.Resolve(ctx, addr) + if err != nil { + logger.Error(err) + return err + } + pm.importAddresses(resolvedAddrs) + } return nil }