@@ -61,6 +61,10 @@ type AdvertisableAddressResolver interface {
6161 Resolve (observedAddress ma.Multiaddr ) (ma.Multiaddr , error )
6262}
6363
64+ type Addresser interface {
65+ AdvertizableAddrs () ([]ma.Multiaddr , error )
66+ }
67+
6468type Option struct {
6569 bee260compatibility bool
6670}
@@ -85,7 +89,7 @@ type Service struct {
8589 libp2pID libp2ppeer.ID
8690 metrics metrics
8791 picker p2p.Picker
88- hostAddrs []ma. Multiaddr
92+ hostAddresser Addresser
8993}
9094
9195// Info contains the information received from the handshake.
@@ -103,7 +107,7 @@ func (i *Info) LightString() string {
103107}
104108
105109// New creates a new handshake Service.
106- func New (signer crypto.Signer , advertisableAddresser AdvertisableAddressResolver , overlay swarm.Address , networkID uint64 , fullNode bool , nonce []byte , hostAddrs []ma. Multiaddr , welcomeMessage string , validateOverlay bool , ownPeerID libp2ppeer.ID , logger log.Logger ) (* Service , error ) {
110+ func New (signer crypto.Signer , advertisableAddresser AdvertisableAddressResolver , overlay swarm.Address , networkID uint64 , fullNode bool , nonce []byte , hostAddresser Addresser , welcomeMessage string , validateOverlay bool , ownPeerID libp2ppeer.ID , logger log.Logger ) (* Service , error ) {
107111 if len (welcomeMessage ) > MaxWelcomeMessageLength {
108112 return nil , ErrWelcomeMessageLength
109113 }
@@ -119,7 +123,7 @@ func New(signer crypto.Signer, advertisableAddresser AdvertisableAddressResolver
119123 libp2pID : ownPeerID ,
120124 logger : logger .WithName (loggerName ).Register (),
121125 metrics : newMetrics (),
122- hostAddrs : hostAddrs ,
126+ hostAddresser : hostAddresser ,
123127 }
124128 svc .welcomeMessage .Store (welcomeMessage )
125129
@@ -181,7 +185,14 @@ func (s *Service) Handshake(ctx context.Context, stream p2p.Stream, peerMultiadd
181185 advertisableUnderlays [i ] = advertisableUnderlay
182186 }
183187
184- advertisableUnderlays = append (advertisableUnderlays , s .hostAddrs ... )
188+ if s .hostAddresser != nil {
189+ hostAddrs , err := s .hostAddresser .AdvertizableAddrs ()
190+ if err != nil {
191+ return nil , fmt .Errorf ("get host advertizable addresses: %w" , err )
192+ }
193+
194+ advertisableUnderlays = append (advertisableUnderlays , hostAddrs ... )
195+ }
185196
186197 // sort to remove potential duplicates
187198 slices .SortFunc (advertisableUnderlays , func (a , b ma.Multiaddr ) int {
@@ -280,7 +291,14 @@ func (s *Service) Handle(ctx context.Context, stream p2p.Stream, peerMultiaddrs
280291 advertisableUnderlays [i ] = advertisableUnderlay
281292 }
282293
283- advertisableUnderlays = append (advertisableUnderlays , s .hostAddrs ... )
294+ if s .hostAddresser != nil {
295+ hostAddrs , err := s .hostAddresser .AdvertizableAddrs ()
296+ if err != nil {
297+ return nil , fmt .Errorf ("get host advertizable addresses: %w" , err )
298+ }
299+
300+ advertisableUnderlays = append (advertisableUnderlays , hostAddrs ... )
301+ }
284302
285303 // sort to remove potential duplicates
286304 slices .SortFunc (advertisableUnderlays , func (a , b ma.Multiaddr ) int {
0 commit comments