diff --git a/p2p/host/relay/relay.go b/p2p/host/relay/relay.go index 95b5079c4d5dbcbd7448d5ba9c68b94e6b88b121..17aa09cd492383e81110a88b3d9352328da533a2 100644 --- a/p2p/host/relay/relay.go +++ b/p2p/host/relay/relay.go @@ -3,21 +3,34 @@ package relay import ( "context" + basic "github.com/libp2p/go-libp2p/p2p/host/basic" + discovery "github.com/libp2p/go-libp2p-discovery" host "github.com/libp2p/go-libp2p-host" + ma "github.com/multiformats/go-multiaddr" ) // RelayHost is a Host that provides Relay services. type RelayHost struct { - host.Host + *basic.BasicHost advertise discovery.Advertiser + addrsF basic.AddrsFactory } // New constructs a new RelayHost -func NewRelayHost(ctx context.Context, host host.Host, advertise discovery.Advertiser) *RelayHost { - h := &RelayHost{Host: host, advertise: advertise} +func NewRelayHost(ctx context.Context, bhost *basic.BasicHost, advertise discovery.Advertiser) *RelayHost { + h := &RelayHost{ + BasicHost: bhost, + addrsF: bhost.AddrsFactory, + advertise: advertise, + } + bhost.AddrsFactory = h.hostAddrs discovery.Advertise(ctx, advertise, "/libp2p/relay") return h } +func (h *RelayHost) hostAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + return filterUnspecificRelay(h.addrsF(addrs)) +} + var _ host.Host = (*RelayHost)(nil)