Skip to content
This repository was archived by the owner on Sep 9, 2022. It is now read-only.

Commit ff52b70

Browse files
authored
Merge pull request #80 from libp2p/feat/addr-handling
return the full address from conn.RemoteMultiaddr
2 parents 0349135 + 9fde889 commit ff52b70

File tree

6 files changed

+27
-22
lines changed

6 files changed

+27
-22
lines changed

conn.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,15 @@ func (c *Conn) untagHop() {
8080

8181
// TODO: is it okay to cast c.Conn().RemotePeer() into a multiaddr? might be "user input"
8282
func (c *Conn) RemoteMultiaddr() ma.Multiaddr {
83-
proto := ma.ProtocolWithCode(ma.P_P2P).Name
84-
peerid := c.stream.Conn().RemotePeer().Pretty()
85-
p2paddr := ma.StringCast(fmt.Sprintf("/%s/%s", proto, peerid))
86-
87-
circaddr := ma.Cast(ma.CodeToVarint(P_CIRCUIT))
88-
return p2paddr.Encapsulate(circaddr)
83+
// TODO: We should be able to do this directly without converting to/from a string.
84+
relayAddr, err := ma.NewComponent(
85+
ma.ProtocolWithCode(ma.P_P2P).Name,
86+
c.stream.Conn().RemotePeer().Pretty(),
87+
)
88+
if err != nil {
89+
panic(err)
90+
}
91+
return ma.Join(c.stream.Conn().RemoteMultiaddr(), relayAddr, circuitAddr)
8992
}
9093

9194
func (c *Conn) LocalMultiaddr() ma.Multiaddr {

dial.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,25 @@ func (d *RelayTransport) Dial(ctx context.Context, a ma.Multiaddr, p peer.ID) (t
2020
}
2121

2222
func (r *Relay) Dial(ctx context.Context, a ma.Multiaddr, p peer.ID) (*Conn, error) {
23-
if !r.Matches(a) {
23+
// split /a/p2p-circuit/b into (/a, /p2p-circuit/b)
24+
relayaddr, destaddr := ma.SplitFunc(a, func(c ma.Component) bool {
25+
return c.Protocol().Code == P_CIRCUIT
26+
})
27+
28+
// If the address contained no /p2p-circuit part, the second part is nil.
29+
if destaddr == nil {
2430
return nil, fmt.Errorf("%s is not a relay address", a)
2531
}
26-
parts := ma.Split(a)
27-
28-
spl := ma.Cast(ma.CodeToVarint(P_CIRCUIT))
2932

30-
var relayaddr, destaddr ma.Multiaddr
31-
for i, p := range parts {
32-
if p.Equal(spl) {
33-
relayaddr = ma.Join(parts[:i]...)
34-
destaddr = ma.Join(parts[i+1:]...)
35-
break
36-
}
37-
}
33+
// Strip the /p2p-circuit prefix from the destaddr.
34+
_, destaddr = ma.SplitFirst(destaddr)
3835

3936
dinfo := &peer.AddrInfo{ID: p, Addrs: []ma.Multiaddr{}}
40-
if len(destaddr.Bytes()) > 0 {
37+
if destaddr != nil {
4138
dinfo.Addrs = append(dinfo.Addrs, destaddr)
4239
}
4340

44-
if len(relayaddr.Bytes()) == 0 {
41+
if relayaddr == nil {
4542
// unspecific relay address, try dialing using known hop relays
4643
return r.tryDialRelays(ctx, *dinfo)
4744
}

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ require (
1111
github.com/multiformats/go-multiaddr v0.0.4
1212
github.com/multiformats/go-multiaddr-net v0.0.1
1313
)
14+
15+
go 1.12

listen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (l *RelayListener) Addr() net.Addr {
5050
}
5151

5252
func (l *RelayListener) Multiaddr() ma.Multiaddr {
53-
return ma.Cast(ma.CodeToVarint(P_CIRCUIT))
53+
return circuitAddr
5454
}
5555

5656
func (l *RelayListener) Close() error {

relay_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ func TestRelayReset(t *testing.T) {
193193

194194
func TestBasicRelayDial(t *testing.T) {
195195
ctx, cancel := context.WithCancel(context.Background())
196-
defer cancel()
197196

198197
hosts := getNetHosts(t, ctx, 3)
199198

@@ -213,6 +212,7 @@ func TestBasicRelayDial(t *testing.T) {
213212
)
214213

215214
defer func() {
215+
cancel()
216216
<-done
217217
if conn1 != nil {
218218
conn1.Close()

transport.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ var Protocol = ma.Protocol{
2020
VCode: ma.CodeToVarint(P_CIRCUIT),
2121
}
2222

23+
var circuitAddr ma.Multiaddr
24+
2325
func init() {
2426
ma.AddProtocol(Protocol)
27+
circuitAddr = ma.Cast(Protocol.VCode)
2528
}
2629

2730
var _ transport.Transport = (*RelayTransport)(nil)

0 commit comments

Comments
 (0)