Commit 19fbbf77 authored by Janoš Guljaš's avatar Janoš Guljaš Committed by GitHub

expose nat underlay address by p2p service (#820)

parent 6d8d74b2
...@@ -50,6 +50,7 @@ type Service struct { ...@@ -50,6 +50,7 @@ type Service struct {
ctx context.Context ctx context.Context
host host.Host host host.Host
natManager basichost.NATManager natManager basichost.NATManager
natAddrResolver *staticAddressResolver
libp2pPeerstore peerstore.Peerstore libp2pPeerstore peerstore.Peerstore
metrics metrics metrics metrics
networkID uint64 networkID uint64
...@@ -179,15 +180,17 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay ...@@ -179,15 +180,17 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
} }
var advertisableAddresser handshake.AdvertisableAddressResolver var advertisableAddresser handshake.AdvertisableAddressResolver
var natAddrResolver *staticAddressResolver
if o.NATAddr == "" { if o.NATAddr == "" {
advertisableAddresser = &UpnpAddressResolver{ advertisableAddresser = &UpnpAddressResolver{
host: h, host: h,
} }
} else { } else {
advertisableAddresser, err = newStaticAddressResolver(o.NATAddr) natAddrResolver, err = newStaticAddressResolver(o.NATAddr)
if err != nil { if err != nil {
return nil, fmt.Errorf("static nat: %w", err) return nil, fmt.Errorf("static nat: %w", err)
} }
advertisableAddresser = natAddrResolver
} }
handshakeService, err := handshake.New(signer, advertisableAddresser, overlay, networkID, o.LightNode, o.WelcomeMessage, logger) handshakeService, err := handshake.New(signer, advertisableAddresser, overlay, networkID, o.LightNode, o.WelcomeMessage, logger)
...@@ -200,6 +203,7 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay ...@@ -200,6 +203,7 @@ func New(ctx context.Context, signer beecrypto.Signer, networkID uint64, overlay
ctx: ctx, ctx: ctx,
host: h, host: h,
natManager: natManager, natManager: natManager,
natAddrResolver: natAddrResolver,
handshakeService: handshakeService, handshakeService: handshakeService,
libp2pPeerstore: libp2pPeerstore, libp2pPeerstore: libp2pPeerstore,
metrics: newMetrics(), metrics: newMetrics(),
...@@ -390,6 +394,13 @@ func (s *Service) Addresses() (addreses []ma.Multiaddr, err error) { ...@@ -390,6 +394,13 @@ func (s *Service) Addresses() (addreses []ma.Multiaddr, err error) {
addreses = append(addreses, a) addreses = append(addreses, a)
} }
if s.natAddrResolver != nil && len(addreses) > 0 {
a, err := s.natAddrResolver.Resolve(addreses[0])
if err != nil {
return nil, err
}
addreses = append(addreses, a)
}
return addreses, nil return addreses, nil
} }
......
...@@ -10,7 +10,6 @@ import ( ...@@ -10,7 +10,6 @@ import (
"net" "net"
"strings" "strings"
"github.com/ethersphere/bee/pkg/p2p/libp2p/internal/handshake"
libp2ppeer "github.com/libp2p/go-libp2p-core/peer" libp2ppeer "github.com/libp2p/go-libp2p-core/peer"
ma "github.com/multiformats/go-multiaddr" ma "github.com/multiformats/go-multiaddr"
) )
...@@ -20,7 +19,7 @@ type staticAddressResolver struct { ...@@ -20,7 +19,7 @@ type staticAddressResolver struct {
port string port string
} }
func newStaticAddressResolver(addr string) (handshake.AdvertisableAddressResolver, error) { func newStaticAddressResolver(addr string) (*staticAddressResolver, error) {
host, port, err := net.SplitHostPort(addr) host, port, err := net.SplitHostPort(addr)
if err != nil { if err != nil {
return nil, err return nil, err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment