test ip6 conversion

This commit is contained in:
Juan Batiz-Benet 2015-01-12 18:07:14 -08:00
parent 2bb75c7221
commit 97da87cf8f
4 changed files with 43 additions and 15 deletions

View File

@ -112,13 +112,13 @@ func ToNetAddr(maddr ma.Multiaddr) (net.Addr, error) {
}
switch network {
case "tcp":
case "tcp", "tcp4", "tcp6":
return net.ResolveTCPAddr(network, host)
case "udp":
case "udp", "udp4", "udp6":
return net.ResolveUDPAddr(network, host)
case "utp":
case "utp", "utp4", "utp6":
return utp.ResolveUTPAddr(network, host)
case "ip":
case "ip", "ip4", "ip6":
return net.ResolveIPAddr(network, host)
}
@ -158,8 +158,10 @@ func DialArgs(m ma.Multiaddr) (string, string, error) {
var host string
switch parts[0] {
case "ip4":
network = network + "4"
host = strings.Join([]string{parts[1], parts[3]}, ":")
case "ip6":
network = network + "6"
host = fmt.Sprintf("[%s]:%s", parts[1], parts[3])
}
return network, host, nil

View File

@ -152,7 +152,10 @@ func TestDialArgs(t *testing.T) {
}
}
test("/ip4/127.0.0.1/udp/1234", "udp", "127.0.0.1:1234")
test("/ip4/127.0.0.1/tcp/4321", "tcp", "127.0.0.1:4321")
test("/ip4/127.0.0.1/udp/1234/utp", "utp", "127.0.0.1:1234")
test("/ip4/127.0.0.1/udp/1234", "udp4", "127.0.0.1:1234")
test("/ip4/127.0.0.1/tcp/4321", "tcp4", "127.0.0.1:4321")
test("/ip4/127.0.0.1/udp/1234/utp", "utp4", "127.0.0.1:1234")
test("/ip6/::1/udp/1234", "udp6", "[::1]:1234")
test("/ip6/::1/tcp/4321", "tcp6", "[::1]:4321")
test("/ip6/::1/udp/1234/utp", "utp6", "[::1]:1234")
}

12
net.go
View File

@ -106,12 +106,12 @@ func (d *Dialer) Dial(remote ma.Multiaddr) (Conn, error) {
// ok, Dial!
var nconn net.Conn
switch rnet {
case "tcp":
case "tcp", "tcp4", "tcp6":
nconn, err = d.Dialer.Dial(rnet, rnaddr)
if err != nil {
return nil, err
}
case "utp":
case "udp", "udp4", "udp6":
return nil, fmt.Errorf("utp is currently broken")
// // construct utp dialer, with options on our net.Dialer
@ -236,6 +236,14 @@ func Listen(laddr ma.Multiaddr) (Listener, error) {
return nil, err
}
// we need to fetch the new multiaddr from the listener, as it
// may have resolved to some other value.
nladdr, err := FromNetAddr(nl.Addr())
if err != nil {
return nil, err
}
laddr = nladdr
return &maListener{
Listener: nl,
laddr: laddr,

View File

@ -141,7 +141,10 @@ func TestListen(t *testing.T) {
func TestListenAddrs(t *testing.T) {
test := func(addr string, succeed bool) {
test := func(addr, resaddr string, succeed bool) {
if resaddr == "" {
resaddr = addr
}
maddr := newMultiaddr(t, addr)
l, err := Listen(maddr)
@ -152,10 +155,13 @@ func TestListenAddrs(t *testing.T) {
return
}
if succeed && err != nil {
t.Fatal("failed to listen", addr, err)
t.Error("failed to listen", addr, err)
}
if l == nil {
t.Fatal("failed to listen", addr, succeed, err)
t.Error("failed to listen", addr, succeed, err)
}
if l.Multiaddr().String() != resaddr {
t.Error("listen addr did not resolve properly", l.Multiaddr().String(), resaddr, succeed, err)
}
if err = l.Close(); err != nil {
@ -163,9 +169,18 @@ func TestListenAddrs(t *testing.T) {
}
}
test("/ip4/127.0.0.1/tcp/4324", true)
test("/ip4/127.0.0.1/udp/4325", false)
test("/ip4/127.0.0.1/udp/4326/udt", false)
test("/ip4/127.0.0.1/tcp/4324", "", true)
test("/ip4/127.0.0.1/udp/4325", "", false)
test("/ip4/127.0.0.1/udp/4326/udt", "", false)
test("/ip4/0.0.0.0/tcp/4324", "", true)
test("/ip4/0.0.0.0/udp/4325", "", false)
test("/ip4/0.0.0.0/udp/4326/udt", "", false)
test("/ip6/::1/tcp/4324", "", true)
test("/ip6/::1/udp/4325", "", false)
test("/ip6/::1/udp/4326/udt", "", false)
test("/ip6/::/tcp/4324", "", true)
test("/ip6/::/udp/4325", "", false)
test("/ip6/::/udp/4326/udt", "", false)
// test("/ip4/127.0.0.1/udp/4326/utp", true)
}