enable relay by default in New

This commit is contained in:
vyzo 2018-09-28 11:30:45 +03:00
parent 2787133b04
commit 0600392e23
4 changed files with 40 additions and 9 deletions

View File

@ -44,8 +44,9 @@ type Config struct {
Insecure bool
Protector pnet.Protector
Relay bool
RelayOpts []circuit.RelayOpt
RelayCustom bool
Relay bool
RelayOpts []circuit.RelayOpt
ListenAddrs []ma.Multiaddr
AddrsFactory bhost.AddrsFactory

View File

@ -70,6 +70,11 @@ var DefaultListenAddrs = func(cfg *Config) error {
))
}
// DefaultEnableRelay enables relay dialing and listening by default
var DefaultEnableRelay = func(cfg *Config) error {
return cfg.Apply(EnableRelay())
}
// Complete list of default options and when to fallback on them.
//
// Please *DON'T* specify default options any other way. Putting this all here
@ -102,6 +107,10 @@ var defaults = []struct {
fallback: func(cfg *Config) bool { return cfg.Peerstore == nil },
opt: DefaultPeerstore,
},
{
fallback: func(cfg *Config) bool { return !cfg.RelayCustom },
opt: DefaultEnableRelay,
},
}
// Defaults configures libp2p to use the default options. Can be combined with

View File

@ -81,6 +81,7 @@ func TestDefaultListenAddrs(t *testing.T) {
ctx := context.Background()
re := regexp.MustCompile("/(ip)[4|6]/((0.0.0.0)|(::))/tcp/")
re2 := regexp.MustCompile("/p2p-circuit")
// Test 1: Setting the correct listen addresses if userDefined.Transport == nil && userDefined.ListenAddrs == nil
h, err := New(ctx)
@ -88,14 +89,15 @@ func TestDefaultListenAddrs(t *testing.T) {
t.Fatal(err)
}
for _, addr := range h.Network().ListenAddresses() {
if re.FindStringSubmatchIndex(addr.String()) == nil {
t.Error("expected ip4 or ip6 interface")
if re.FindStringSubmatchIndex(addr.String()) == nil &&
re2.FindStringSubmatchIndex(addr.String()) == nil {
t.Error("expected ip4 or ip6 or relay interface")
}
}
h.Close()
// Test 2: Listen addr should not set if user defined transport is passed.
// Test 2: Listen addr only include relay if user defined transport is passed.
h, err = New(
ctx,
Transport(tcp.NewTCPTransport),
@ -104,8 +106,11 @@ func TestDefaultListenAddrs(t *testing.T) {
t.Fatal(err)
}
if len(h.Network().ListenAddresses()) != 0 {
t.Error("expected zero listen addrs as none is set with user defined transport")
if len(h.Network().ListenAddresses()) != 1 {
t.Error("expected one listen addr with user defined transport")
}
if re2.FindStringSubmatchIndex(h.Network().ListenAddresses()[0].String()) == nil {
t.Error("expected relay address")
}
h.Close()
}

View File

@ -201,15 +201,25 @@ func AddrsFactory(factory config.AddrsFactory) Option {
}
}
// EnableRelay configures libp2p to enable the relay transport.
// EnableRelay configures libp2p to enable the relay transport with configuration options.
func EnableRelay(options ...circuit.RelayOpt) Option {
return func(cfg *Config) error {
cfg.RelayCustom = true
cfg.Relay = true
cfg.RelayOpts = options
return nil
}
}
// DisableRelay configures libp2p to disable the relay transport
func DisableRelay() Option {
return func(cfg *Config) error {
cfg.RelayCustom = true
cfg.Relay = false
return nil
}
}
// FilterAddresses configures libp2p to never dial nor accept connections from
// the given addresses.
func FilterAddresses(addrs ...*net.IPNet) Option {
@ -245,9 +255,15 @@ func NATManager(nm config.NATManagerC) Option {
// NoListenAddrs will configure libp2p to not listen by default.
//
// This will both clear any configured listen addrs and prevent libp2p from
// applying the default listen address option.
// applying the default listen address option. It also disables relay, unless the
// user explicitly specifies with an option, as the transport creates an implicit
// listen address that would make the node diable through any relay it was connected to.
var NoListenAddrs = func(cfg *Config) error {
cfg.ListenAddrs = []ma.Multiaddr{}
if !cfg.RelayCustom {
cfg.RelayCustom = true
cfg.Relay = false
}
return nil
}