diff --git a/net/handshake/handshake3.go b/net/handshake/handshake3.go index ad83b13ec..406728dd2 100644 --- a/net/handshake/handshake3.go +++ b/net/handshake/handshake3.go @@ -48,7 +48,9 @@ func Handshake3Update(lpeer, rpeer peer.Peer, msg *pb.Handshake3) (*Handshake3Re if err != nil { return res, err } - lpeer.AddAddress(observedAddr) + if lpeer.AddAddress(observedAddr) { + log.Infof("(nat) added new local, remote-observed address: %s", observedAddr) + } res.LocalObservedAddress = observedAddr // remote's reported addresses diff --git a/peer/peer.go b/peer/peer.go index fbea65fd1..7cc8a4ccb 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -66,7 +66,8 @@ type Peer interface { Addresses() []ma.Multiaddr // AddAddress adds the given Multiaddr address to Peer's addresses. - AddAddress(a ma.Multiaddr) + // returns whether this was a newly added address. + AddAddress(a ma.Multiaddr) bool // NetAddress returns the first Multiaddr found for a given network. NetAddress(n string) ma.Multiaddr @@ -141,16 +142,18 @@ func (p *peer) Addresses() []ma.Multiaddr { } // AddAddress adds the given Multiaddr address to Peer's addresses. -func (p *peer) AddAddress(a ma.Multiaddr) { +// Returns whether this address was a newly added address +func (p *peer) AddAddress(a ma.Multiaddr) bool { p.Lock() defer p.Unlock() for _, addr := range p.addresses { if addr.Equal(a) { - return + return false } } p.addresses = append(p.addresses, a) + return true } // NetAddress returns the first Multiaddr found for a given network.