diff --git a/libp2p.go b/libp2p.go index 333bbe1d5cd9426fecaef1cbc71cecf42ad15c44..bfb0c18193373f448b95007147f2230ce09aa529 100644 --- a/libp2p.go +++ b/libp2p.go @@ -31,6 +31,7 @@ type Config struct { Protector pnet.Protector Reporter metrics.Reporter DisableSecio bool + EnableNAT bool } type Option func(cfg *Config) error @@ -92,6 +93,13 @@ func NoEncryption() Option { return TransportEncryption(EncPlaintext) } +func NATPortMap() Option { + return func(cfg *Config) error { + cfg.EnableNAT = true + return nil + } +} + func Muxer(m mux.Transport) Option { return func(cfg *Config) error { if cfg.Muxer != nil { @@ -199,7 +207,13 @@ func newWithCfg(ctx context.Context, cfg *Config) (host.Host, error) { netw := (*swarm.Network)(swrm) - return bhost.New(netw), nil + hostOpts := &bhost.HostOpts{} + + if cfg.EnableNAT { + hostOpts.NATManager = bhost.NewNATManager(netw) + } + + return bhost.NewHost(ctx, netw, hostOpts) } func DefaultMuxer() mux.Transport { diff --git a/libp2p_test.go b/libp2p_test.go new file mode 100644 index 0000000000000000000000000000000000000000..d2ab62e4d1cd652bc7d4f1c88db9f44a49b70c84 --- /dev/null +++ b/libp2p_test.go @@ -0,0 +1,34 @@ +package libp2p + +import ( + "context" + "fmt" + "testing" + + crypto "github.com/libp2p/go-libp2p-crypto" + host "github.com/libp2p/go-libp2p-host" +) + +func TestNewHost(t *testing.T) { + _, err := makeRandomHost(t, 9000) + if err != nil { + t.Fatal(err) + } +} + +func makeRandomHost(t *testing.T, port int) (host.Host, error) { + ctx := context.Background() + priv, _, err := crypto.GenerateKeyPair(crypto.RSA, 2048) + if err != nil { + t.Fatal(err) + } + + opts := []Option{ + ListenAddrStrings(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", port)), + Identity(priv), + Muxer(DefaultMuxer()), + NATPortMap(), + } + + return New(ctx, opts...) +}