From acd4dd9a8936f3c70bd74c9a7dc859ca38c9604d Mon Sep 17 00:00:00 2001 From: Jamie Steiner Date: Sun, 4 Mar 2018 07:35:18 +0200 Subject: [PATCH] added NAT traversal option and constructor test --- libp2p.go | 16 +++++++++++++++- libp2p_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 libp2p_test.go diff --git a/libp2p.go b/libp2p.go index 333bbe1d5..bfb0c1819 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 000000000..d2ab62e4d --- /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...) +}