diff --git a/core/core.go b/core/core.go index 26fd53882..5475d6a08 100644 --- a/core/core.go +++ b/core/core.go @@ -820,6 +820,7 @@ func constructPeerHost(ctx context.Context, id peer.ID, ps pstore.Peerstore, bwr hostOpts = append(hostOpts, opts.AddrsFactory) } + addrsFactory := opts.AddrsFactory if !opts.DisableRelay { filterRelayAddr := func(addrs []ma.Multiaddr) []ma.Multiaddr { var raddrs []ma.Multiaddr @@ -832,7 +833,16 @@ func constructPeerHost(ctx context.Context, id peer.ID, ps pstore.Peerstore, bwr } return raddrs } - hostOpts = append(hostOpts, p2pbhost.AddrsFactory(filterRelayAddr)) + + if addrsFactory != nil { + addrsFactory = composeAddrsFactory(addrsFactory, filterRelayAddr) + } else { + addrsFactory = filterRelayAddr + } + } + + if addrsFactory != nil { + hostOpts = append(hostOpts, addrsFactory) } host := p2pbhost.New(network, hostOpts...) @@ -852,6 +862,12 @@ func constructPeerHost(ctx context.Context, id peer.ID, ps pstore.Peerstore, bwr return host, nil } +func composeAddrsFactory(f, g p2pbhost.AddrsFactory) p2pbhost.AddrsFactory { + return func(addrs []ma.Multiaddr) []ma.Multiaddr { + return f(g(addrs)) + } +} + // startListening on the network addresses func startListening(ctx context.Context, host p2phost.Host, cfg *config.Config) error { listenAddrs, err := listenAddresses(cfg)