From 3fa37a345226c42db412ae952fba12800338c41f Mon Sep 17 00:00:00 2001 From: Cyril Fougeray Date: Tue, 11 Aug 2020 15:04:54 +0200 Subject: [PATCH 1/2] Added parsing of IPv6 addresses for incomming mDNS requests --- p2p/discovery/mdns.go | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/p2p/discovery/mdns.go b/p2p/discovery/mdns.go index 18a139b907..94fed3d310 100644 --- a/p2p/discovery/mdns.go +++ b/p2p/discovery/mdns.go @@ -157,7 +157,7 @@ func (m *mdnsService) pollForEntries(ctx context.Context) { } func (m *mdnsService) handleEntry(e *mdns.ServiceEntry) { - log.Debugf("Handling MDNS entry: %s:%d %s", e.AddrV4, e.Port, e.Info) + log.Debugf("Handling MDNS entry: [IPv4 %s][IPv6 %s]:%d %s", e.AddrV4, e.AddrV6, e.Port, e.Info) mpeer, err := peer.IDB58Decode(e.Info) if err != nil { log.Warning("Error parsing peer ID from mdns entry: ", err) @@ -169,12 +169,27 @@ func (m *mdnsService) handleEntry(e *mdns.ServiceEntry) { return } - maddr, err := manet.FromNetAddr(&net.TCPAddr{ - IP: e.AddrV4, - Port: e.Port, - }) - if err != nil { - log.Warning("Error parsing multiaddr from mdns entry: ", err) + var maddr ma.Multiaddr + if e.AddrV4 != nil { + maddr, err = manet.FromNetAddr(&net.TCPAddr{ + IP: e.AddrV4, + Port: e.Port, + }) + if err != nil { + log.Warning("Error parsing multiaddr from mdns entry: ", err) + return + } + } else if e.AddrV6 != nil { + maddr, err = manet.FromNetAddr(&net.TCPAddr{ + IP: e.AddrV6, + Port: e.Port, + }) + if err != nil { + log.Warning("Error parsing multiaddr from mdns entry: ", err) + return + } + } else { + log.Warning("Error parsing multiaddr from mdns entry: no IP address found") return } From 16d314cf300ca99f71b196fb8321992838f92884 Mon Sep 17 00:00:00 2001 From: Cyril Fougeray Date: Thu, 20 Aug 2020 18:36:07 +0200 Subject: [PATCH 2/2] Deduplicating code when parsing ipv4/ipv6 address; from the comment on the PR --- p2p/discovery/mdns.go | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/p2p/discovery/mdns.go b/p2p/discovery/mdns.go index 94fed3d310..bccc9e6d21 100644 --- a/p2p/discovery/mdns.go +++ b/p2p/discovery/mdns.go @@ -169,30 +169,25 @@ func (m *mdnsService) handleEntry(e *mdns.ServiceEntry) { return } - var maddr ma.Multiaddr + var addr net.IP if e.AddrV4 != nil { - maddr, err = manet.FromNetAddr(&net.TCPAddr{ - IP: e.AddrV4, - Port: e.Port, - }) - if err != nil { - log.Warning("Error parsing multiaddr from mdns entry: ", err) - return - } + addr = e.AddrV4 } else if e.AddrV6 != nil { - maddr, err = manet.FromNetAddr(&net.TCPAddr{ - IP: e.AddrV6, - Port: e.Port, - }) - if err != nil { - log.Warning("Error parsing multiaddr from mdns entry: ", err) - return - } + addr = e.AddrV6 } else { log.Warning("Error parsing multiaddr from mdns entry: no IP address found") return } + maddr, err := manet.FromNetAddr(&net.TCPAddr{ + IP: addr, + Port: e.Port, + }) + if err != nil { + log.Warning("Error parsing multiaddr from mdns entry: ", err) + return + } + pi := peer.AddrInfo{ ID: mpeer, Addrs: []ma.Multiaddr{maddr},