@@ -144,7 +144,7 @@ type Options struct {
144144 WSSNATAddr string
145145 EnableWS bool
146146 AutoTLSEnabled bool
147- WSSPort string
147+ WSSAddr string
148148 AutoTLSStorageDir string
149149 AutoTLSCAEndpoint string
150150 AutoTLSDomain string
@@ -161,43 +161,38 @@ type Options struct {
161161}
162162
163163func New (ctx context.Context , signer beecrypto.Signer , networkID uint64 , overlay swarm.Address , addr string , ab addressbook.Putter , storer storage.StateStorer , lightNodes * lightnode.Container , logger log.Logger , tracer * tracing.Tracer , o Options ) (* Service , error ) {
164- host , port , err := net . SplitHostPort (addr )
164+ parsedAddr , err := parseAddress (addr )
165165 if err != nil {
166- return nil , fmt . Errorf ( "address: %w" , err )
166+ return nil , err
167167 }
168168
169- ip4Addr := "0.0.0.0"
170- ip6Addr := "::"
171-
172- if host != "" {
173- ip := net .ParseIP (host )
174- if ip4 := ip .To4 (); ip4 != nil {
175- ip4Addr = ip4 .String ()
176- ip6Addr = ""
177- } else if ip6 := ip .To16 (); ip6 != nil {
178- ip6Addr = ip6 .String ()
179- ip4Addr = ""
169+ var listenAddrs []string
170+ if parsedAddr .IP4 != "" {
171+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s" , parsedAddr .IP4 , parsedAddr .Port ))
172+ if o .EnableWS {
173+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s/ws" , parsedAddr .IP4 , parsedAddr .Port ))
180174 }
181175 }
182176
183- var listenAddrs []string
184- if ip4Addr != "" {
185- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s" , ip4Addr , port ))
177+ if parsedAddr .IP6 != "" {
178+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s" , parsedAddr .IP6 , parsedAddr .Port ))
186179 if o .EnableWS {
187- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s/ws" , ip4Addr , port ))
188- if o .AutoTLSEnabled {
189- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s/tls/sni/*.%s/ws" , ip4Addr , o .WSSPort , o .AutoTLSDomain ))
190- }
180+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s/ws" , parsedAddr .IP6 , parsedAddr .Port ))
191181 }
192182 }
193183
194- if ip6Addr != "" {
195- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s" , ip6Addr , port ))
196- if o .EnableWS {
197- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s/ws" , ip6Addr , port ))
198- if o .AutoTLSEnabled {
199- listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s/tls/sni/*.%s/ws" , ip6Addr , o .WSSPort , o .AutoTLSDomain ))
200- }
184+ if o .AutoTLSEnabled {
185+ parsedWssAddr , err := parseAddress (o .WSSAddr )
186+ if err != nil {
187+ return nil , err
188+ }
189+
190+ if parsedWssAddr .IP4 != "" {
191+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip4/%s/tcp/%s/tls/sni/*.%s/ws" , parsedWssAddr .IP4 , parsedWssAddr .Port , o .AutoTLSDomain ))
192+ }
193+
194+ if parsedWssAddr .IP6 != "" {
195+ listenAddrs = append (listenAddrs , fmt .Sprintf ("/ip6/%s/tcp/%s/tls/sni/*.%s/ws" , parsedWssAddr .IP6 , parsedWssAddr .Port , o .AutoTLSDomain ))
201196 }
202197 }
203198
@@ -476,7 +471,7 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
476471
477472 if o .AutoTLSEnabled && o .EnableWS {
478473 // Check reachability for AutoTLS
479- logger .Debug ("Reachability for AutoTLS: " , autoNAT .Status ())
474+ logger .Debug ("Reachability for AutoTLS: " , "status" , autoNAT .Status (). String ())
480475 if autoNAT .Status () != network .ReachabilityPublic {
481476 logger .Warning ("Node not publicly reachable; AutoTLS may fail" )
482477 }
@@ -518,6 +513,37 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
518513 return s , nil
519514}
520515
516+ type parsedAddress struct {
517+ IP4 string
518+ IP6 string
519+ Port string
520+ }
521+
522+ func parseAddress (addr string ) (* parsedAddress , error ) {
523+ host , port , err := net .SplitHostPort (addr )
524+ if err != nil {
525+ return nil , fmt .Errorf ("address: %w" , err )
526+ }
527+
528+ res := & parsedAddress {
529+ IP4 : "0.0.0.0" ,
530+ IP6 : "::" ,
531+ Port : port ,
532+ }
533+
534+ if host != "" {
535+ ip := net .ParseIP (host )
536+ if ip4parsed := ip .To4 (); ip4parsed != nil {
537+ res .IP4 = ip4parsed .String ()
538+ res .IP6 = ""
539+ } else if ip6parsed := ip .To16 (); ip6parsed != nil {
540+ res .IP6 = ip6parsed .String ()
541+ res .IP4 = ""
542+ }
543+ }
544+ return res , nil
545+ }
546+
521547func (s * Service ) reachabilityWorker () error {
522548 sub , err := s .host .EventBus ().Subscribe ([]any {new (event.EvtLocalReachabilityChanged )})
523549 if err != nil {
@@ -847,14 +873,8 @@ func (s *Service) Addresses() (addresses []ma.Multiaddr, err error) {
847873
848874 s .logger .Debug ("host listen addresses" , "addresses" , uniqueAddrs )
849875
850- // if a resolver is configured, add resolved addresses.
851876 if s .advertisableAddresser != nil {
852- // Iterate over non-loopback listen addresses to resolve them.
853877 for _ , addr := range s .host .Addrs () {
854- if manet .IsIPLoopback (addr ) {
855- continue
856- }
857-
858878 resolved , err := s .advertisableAddresser .Resolve (addr )
859879 if err != nil {
860880 s .logger .Warning ("could not resolve address" , "addr" , addr , "error" , err )
0 commit comments