Skip to content

Commit 201fa11

Browse files
authored
Merge pull request #64 from willscott/feat/toip
add ToIP to complement ToNetAddr
2 parents 07114b1 + 9a640fd commit 201fa11

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

convert.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,25 @@ func FromIP(ip net.IP) (ma.Multiaddr, error) {
9898
return FromIPAndZone(ip, "")
9999
}
100100

101+
// ToIP converts a Multiaddr to a net.IP when possible
102+
func ToIP(addr ma.Multiaddr) (net.IP, error) {
103+
n, err := ToNetAddr(addr)
104+
if err != nil {
105+
return nil, err
106+
}
107+
108+
switch netAddr := n.(type) {
109+
case *net.UDPAddr:
110+
return netAddr.IP, nil
111+
case *net.TCPAddr:
112+
return netAddr.IP, nil
113+
case *net.IPAddr:
114+
return netAddr.IP, nil
115+
default:
116+
return nil, fmt.Errorf("non IP Multiaddr: %T", netAddr)
117+
}
118+
}
119+
101120
// DialArgs is a convenience function that returns network and address as
102121
// expected by net.Dial. See https://godoc.org/net#Dial for an overview of
103122
// possible return values (we do not support the unixpacket ones yet). Unix

convert_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,20 @@ func testToNetAddr(t *testing.T, maddr, ntwk, addr string) {
5151
// should convert properly
5252
switch ntwk {
5353
case "tcp":
54-
_ = naddr.(*net.TCPAddr)
54+
taddr := naddr.(*net.TCPAddr)
55+
if ip, err := ToIP(m); err != nil || !taddr.IP.Equal(ip) {
56+
t.Fatalf("ToIP() and ToNetAddr diverged: %s != %s", taddr, ip)
57+
}
5558
case "udp":
56-
_ = naddr.(*net.UDPAddr)
59+
uaddr := naddr.(*net.UDPAddr)
60+
if ip, err := ToIP(m); err != nil || !uaddr.IP.Equal(ip) {
61+
t.Fatalf("ToIP() and ToNetAddr diverged: %s != %s", uaddr, ip)
62+
}
5763
case "ip":
58-
_ = naddr.(*net.IPAddr)
64+
ipaddr := naddr.(*net.IPAddr)
65+
if ip, err := ToIP(m); err != nil || !ipaddr.IP.Equal(ip) {
66+
t.Fatalf("ToIP() and ToNetAddr diverged: %s != %s", ipaddr, ip)
67+
}
5968
}
6069
}
6170

0 commit comments

Comments
 (0)