Skip to content

Commit

Permalink
tcpreuse: error on using tcpreuse with pnet (#3129)
Browse files Browse the repository at this point in the history
Co-authored-by: Marco Munizaga <[email protected]>
  • Loading branch information
sukunrt and MarcoPolo authored Jan 10, 2025
1 parent 3143db2 commit ca611f1
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 6 deletions.
34 changes: 29 additions & 5 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -446,12 +446,9 @@ func (cfg *Config) newBasicHost(swrm *swarm.Swarm, eventBus event.Bus) (*bhost.B
return h, nil
}

// NewNode constructs a new libp2p Host from the Config.
//
// This function consumes the config. Do not reuse it (really!).
func (cfg *Config) NewNode() (host.Host, error) {
func (cfg *Config) validate() error {
if cfg.EnableAutoRelay && !cfg.Relay {
return nil, fmt.Errorf("cannot enable autorelay; relay is not enabled")
return fmt.Errorf("cannot enable autorelay; relay is not enabled")
}
// If possible check that the resource manager conn limit is higher than the
// limit set in the conn manager.
Expand All @@ -462,6 +459,33 @@ func (cfg *Config) NewNode() (host.Host, error) {
}
}

if len(cfg.PSK) > 0 && cfg.ShareTCPListener {
return errors.New("cannot use shared TCP listener with PSK")
}

return nil
}

// NewNode constructs a new libp2p Host from the Config.
//
// This function consumes the config. Do not reuse it (really!).
func (cfg *Config) NewNode() (host.Host, error) {

validateErr := cfg.validate()
if validateErr != nil {
if cfg.ResourceManager != nil {
cfg.ResourceManager.Close()
}
if cfg.ConnManager != nil {
cfg.ConnManager.Close()
}
if cfg.Peerstore != nil {
cfg.Peerstore.Close()
}

return nil, validateErr
}

if !cfg.DisableMetrics {
rcmgr.MustRegisterWith(cfg.PrometheusRegisterer)
}
Expand Down
11 changes: 10 additions & 1 deletion libp2p_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/peerstore"
"github.com/libp2p/go-libp2p/core/pnet"
"github.com/libp2p/go-libp2p/core/routing"
"github.com/libp2p/go-libp2p/core/transport"
rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager"
Expand Down Expand Up @@ -761,6 +762,7 @@ func TestSharedTCPAddr(t *testing.T) {
ListenAddrStrings("/ip4/0.0.0.0/tcp/8888/ws"),
)
require.NoError(t, err)
defer h.Close()
sawTCP := false
sawWS := false
for _, addr := range h.Addrs() {
Expand All @@ -773,5 +775,12 @@ func TestSharedTCPAddr(t *testing.T) {
}
require.True(t, sawTCP)
require.True(t, sawWS)
h.Close()

_, err = New(
ShareTCPListener(),
Transport(tcp.NewTCPTransport),
Transport(websocket.New),
PrivateNetwork(pnet.PSK([]byte{1, 2, 3})),
)
require.ErrorContains(t, err, "cannot use shared TCP listener with PSK")
}

0 comments on commit ca611f1

Please sign in to comment.