Skip to content

Commit d044fa4

Browse files
use the transport.Upgrader interface
1 parent 5155c77 commit d044fa4

14 files changed

+99
-131
lines changed

config/config.go

+19-10
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/libp2p/go-libp2p-core/peerstore"
1515
"github.com/libp2p/go-libp2p-core/pnet"
1616
"github.com/libp2p/go-libp2p-core/routing"
17+
"github.com/libp2p/go-libp2p-core/sec"
1718
"github.com/libp2p/go-libp2p-core/transport"
1819
"github.com/libp2p/go-libp2p-peerstore/pstoremem"
1920

@@ -139,30 +140,38 @@ func (cfg *Config) makeSwarm() (*swarm.Swarm, error) {
139140
return swarm.NewSwarm(pid, cfg.Peerstore, swarm.WithMetrics(cfg.Reporter), swarm.WithConnectionGater(cfg.ConnectionGater))
140141
}
141142

142-
func (cfg *Config) addTransports(h host.Host) (err error) {
143+
func (cfg *Config) addTransports(h host.Host) error {
143144
swrm, ok := h.Network().(transport.TransportNetwork)
144145
if !ok {
145146
// Should probably skip this if no transports.
146147
return fmt.Errorf("swarm does not support transports")
147148
}
148-
upgrader := new(tptu.Upgrader)
149-
upgrader.PSK = cfg.PSK
150-
upgrader.ConnGater = cfg.ConnectionGater
149+
var secure sec.SecureMuxer
151150
if cfg.Insecure {
152-
upgrader.Secure = makeInsecureTransport(h.ID(), cfg.PeerKey)
151+
secure = makeInsecureTransport(h.ID(), cfg.PeerKey)
153152
} else {
154-
upgrader.Secure, err = makeSecurityMuxer(h, cfg.SecurityTransports)
153+
var err error
154+
secure, err = makeSecurityMuxer(h, cfg.SecurityTransports)
155155
if err != nil {
156156
return err
157157
}
158158
}
159-
160-
upgrader.Muxer, err = makeMuxer(h, cfg.Muxers)
159+
muxer, err := makeMuxer(h, cfg.Muxers)
161160
if err != nil {
162161
return err
163162
}
164-
165-
tpts, err := makeTransports(h, upgrader, cfg.ConnectionGater, cfg.Transports)
163+
var opts []tptu.Option
164+
if len(cfg.PSK) > 0 {
165+
opts = append(opts, tptu.WithPSK(cfg.PSK))
166+
}
167+
if cfg.ConnectionGater != nil {
168+
opts = append(opts, tptu.WithConnectionGater(cfg.ConnectionGater))
169+
}
170+
upgrader, err := tptu.New(secure, muxer, opts...)
171+
if err != nil {
172+
return err
173+
}
174+
tpts, err := makeTransports(h, upgrader, cfg.ConnectionGater, cfg.PSK, cfg.Transports)
166175
if err != nil {
167176
return err
168177
}

config/constructor_types.go

+20-16
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
"github.com/libp2p/go-libp2p-core/pnet"
1515
"github.com/libp2p/go-libp2p-core/sec"
1616
"github.com/libp2p/go-libp2p-core/transport"
17-
18-
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
1917
)
2018

2119
var (
@@ -29,29 +27,35 @@ var (
2927
pubKeyType = reflect.TypeOf((*crypto.PubKey)(nil)).Elem()
3028
pstoreType = reflect.TypeOf((*peerstore.Peerstore)(nil)).Elem()
3129
connGaterType = reflect.TypeOf((*connmgr.ConnectionGater)(nil)).Elem()
30+
upgraderType = reflect.TypeOf((*transport.Upgrader)(nil)).Elem()
3231

3332
// concrete types
34-
peerIDType = reflect.TypeOf((peer.ID)(""))
35-
upgraderType = reflect.TypeOf((*tptu.Upgrader)(nil))
36-
pskType = reflect.TypeOf((pnet.PSK)(nil))
33+
peerIDType = reflect.TypeOf((peer.ID)(""))
34+
pskType = reflect.TypeOf((pnet.PSK)(nil))
3735
)
3836

3937
var argTypes = map[reflect.Type]constructor{
40-
upgraderType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return u },
41-
hostType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return h },
42-
networkType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return h.Network() },
43-
muxType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return u.Muxer },
44-
securityType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return u.Secure },
45-
pskType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return u.PSK },
46-
connGaterType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return cg },
47-
peerIDType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return h.ID() },
48-
privKeyType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} {
38+
upgraderType: func(_ host.Host, u transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} { return u },
39+
hostType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} { return h },
40+
networkType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} {
41+
return h.Network()
42+
},
43+
pskType: func(_ host.Host, _ transport.Upgrader, psk pnet.PSK, _ connmgr.ConnectionGater) interface{} {
44+
return psk
45+
},
46+
connGaterType: func(_ host.Host, _ transport.Upgrader, _ pnet.PSK, cg connmgr.ConnectionGater) interface{} { return cg },
47+
peerIDType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} {
48+
return h.ID()
49+
},
50+
privKeyType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} {
4951
return h.Peerstore().PrivKey(h.ID())
5052
},
51-
pubKeyType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} {
53+
pubKeyType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} {
5254
return h.Peerstore().PubKey(h.ID())
5355
},
54-
pstoreType: func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{} { return h.Peerstore() },
56+
pstoreType: func(h host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) interface{} {
57+
return h.Peerstore()
58+
},
5559
}
5660

5761
func newArgTypeSet(types ...reflect.Type) map[reflect.Type]constructor {

config/muxer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func MuxerConstructor(m interface{}) (MuxC, error) {
3636
return nil, err
3737
}
3838
return func(h host.Host) (mux.Multiplexer, error) {
39-
t, err := ctor(h, nil, nil)
39+
t, err := ctor(h, nil, nil, nil)
4040
if err != nil {
4141
return nil, err
4242
}

config/reflection_magic.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import (
66
"reflect"
77
"runtime"
88

9+
"github.com/libp2p/go-libp2p-core/pnet"
10+
911
"github.com/libp2p/go-libp2p-core/connmgr"
1012
"github.com/libp2p/go-libp2p-core/host"
11-
12-
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
13+
"github.com/libp2p/go-libp2p-core/transport"
1314
)
1415

1516
var errorType = reflect.TypeOf((*error)(nil)).Elem()
@@ -79,7 +80,7 @@ func callConstructor(c reflect.Value, args []reflect.Value) (interface{}, error)
7980
return val, err
8081
}
8182

82-
type constructor func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) interface{}
83+
type constructor func(h host.Host, u transport.Upgrader, psk pnet.PSK, cg connmgr.ConnectionGater) interface{}
8384

8485
func makeArgumentConstructors(fnType reflect.Type, argTypes map[reflect.Type]constructor) ([]constructor, error) {
8586
params := fnType.NumIn()
@@ -130,7 +131,7 @@ func makeConstructor(
130131
tptType reflect.Type,
131132
argTypes map[reflect.Type]constructor,
132133
opts ...interface{},
133-
) (func(host.Host, *tptu.Upgrader, connmgr.ConnectionGater) (interface{}, error), error) {
134+
) (func(host.Host, transport.Upgrader, pnet.PSK, connmgr.ConnectionGater) (interface{}, error), error) {
134135
v := reflect.ValueOf(tpt)
135136
// avoid panicing on nil/zero value.
136137
if v == (reflect.Value{}) {
@@ -154,10 +155,10 @@ func makeConstructor(
154155
return nil, err
155156
}
156157

157-
return func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) (interface{}, error) {
158+
return func(h host.Host, u transport.Upgrader, psk pnet.PSK, cg connmgr.ConnectionGater) (interface{}, error) {
158159
arguments := make([]reflect.Value, 0, len(argConstructors)+len(opts))
159160
for i, makeArg := range argConstructors {
160-
if arg := makeArg(h, u, cg); arg != nil {
161+
if arg := makeArg(h, u, psk, cg); arg != nil {
161162
arguments = append(arguments, reflect.ValueOf(arg))
162163
} else {
163164
// ValueOf an un-typed nil yields a zero reflect

config/security.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func SecurityConstructor(security interface{}) (SecC, error) {
4242
return nil, err
4343
}
4444
return func(h host.Host) (sec.SecureTransport, error) {
45-
t, err := ctor(h, nil, nil)
45+
t, err := ctor(h, nil, nil, nil)
4646
if err != nil {
4747
return nil, err
4848
}

config/transport.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@ package config
33
import (
44
"github.com/libp2p/go-libp2p-core/connmgr"
55
"github.com/libp2p/go-libp2p-core/host"
6+
"github.com/libp2p/go-libp2p-core/pnet"
67
"github.com/libp2p/go-libp2p-core/transport"
7-
8-
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
98
)
109

1110
// TptC is the type for libp2p transport constructors. You probably won't ever
1211
// implement this function interface directly. Instead, pass your transport
1312
// constructor to TransportConstructor.
14-
type TptC func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) (transport.Transport, error)
13+
type TptC func(host.Host, transport.Upgrader, pnet.PSK, connmgr.ConnectionGater) (transport.Transport, error)
1514

1615
var transportArgTypes = argTypes
1716

@@ -39,27 +38,27 @@ var transportArgTypes = argTypes
3938
func TransportConstructor(tpt interface{}, opts ...interface{}) (TptC, error) {
4039
// Already constructed?
4140
if t, ok := tpt.(transport.Transport); ok {
42-
return func(_ host.Host, _ *tptu.Upgrader, _ connmgr.ConnectionGater) (transport.Transport, error) {
41+
return func(_ host.Host, _ transport.Upgrader, _ pnet.PSK, _ connmgr.ConnectionGater) (transport.Transport, error) {
4342
return t, nil
4443
}, nil
4544
}
4645
ctor, err := makeConstructor(tpt, transportType, transportArgTypes, opts...)
4746
if err != nil {
4847
return nil, err
4948
}
50-
return func(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater) (transport.Transport, error) {
51-
t, err := ctor(h, u, cg)
49+
return func(h host.Host, u transport.Upgrader, psk pnet.PSK, cg connmgr.ConnectionGater) (transport.Transport, error) {
50+
t, err := ctor(h, u, psk, cg)
5251
if err != nil {
5352
return nil, err
5453
}
5554
return t.(transport.Transport), nil
5655
}, nil
5756
}
5857

59-
func makeTransports(h host.Host, u *tptu.Upgrader, cg connmgr.ConnectionGater, tpts []TptC) ([]transport.Transport, error) {
58+
func makeTransports(h host.Host, u transport.Upgrader, cg connmgr.ConnectionGater, psk pnet.PSK, tpts []TptC) ([]transport.Transport, error) {
6059
transports := make([]transport.Transport, len(tpts))
6160
for i, tC := range tpts {
62-
t, err := tC(h, u, cg)
61+
t, err := tC(h, u, psk, cg)
6362
if err != nil {
6463
return nil, err
6564
}

config/transport_test.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/libp2p/go-libp2p-core/peer"
77
"github.com/libp2p/go-libp2p-core/transport"
8-
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
98
"github.com/libp2p/go-tcp-transport"
109

1110
"github.com/stretchr/testify/require"
@@ -17,27 +16,27 @@ func TestTransportVariadicOptions(t *testing.T) {
1716
}
1817

1918
func TestConstructorWithoutOptsCalledWithOpts(t *testing.T) {
20-
_, err := TransportConstructor(func(_ *tptu.Upgrader) transport.Transport {
19+
_, err := TransportConstructor(func(_ transport.Upgrader) transport.Transport {
2120
return nil
2221
}, 42)
2322
require.EqualError(t, err, "constructor doesn't accept any options")
2423
}
2524

2625
func TestConstructorWithOptsTypeMismatch(t *testing.T) {
27-
_, err := TransportConstructor(func(_ *tptu.Upgrader, opts ...int) transport.Transport {
26+
_, err := TransportConstructor(func(_ transport.Upgrader, opts ...int) transport.Transport {
2827
return nil
2928
}, 42, "foo")
3029
require.EqualError(t, err, "expected option of type int, got string")
3130
}
3231

3332
func TestConstructorWithOpts(t *testing.T) {
3433
var options []int
35-
c, err := TransportConstructor(func(_ *tptu.Upgrader, opts ...int) (transport.Transport, error) {
34+
c, err := TransportConstructor(func(_ transport.Upgrader, opts ...int) (transport.Transport, error) {
3635
options = opts
3736
return tcp.NewTCPTransport(nil)
3837
}, 42, 1337)
3938
require.NoError(t, err)
40-
_, err = c(nil, nil, nil)
39+
_, err = c(nil, nil, nil, nil)
4140
require.NoError(t, err)
4241
require.Equal(t, []int{42, 1337}, options)
4342
}

go.mod

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,27 @@ require (
2222
github.com/libp2p/go-libp2p-asn-util v0.1.0
2323
github.com/libp2p/go-libp2p-autonat v0.7.0
2424
github.com/libp2p/go-libp2p-blankhost v0.3.0
25-
github.com/libp2p/go-libp2p-circuit v0.4.0
26-
github.com/libp2p/go-libp2p-core v0.13.0
25+
github.com/libp2p/go-libp2p-circuit v0.4.1-0.20220102131701-c7ca59be3356
26+
github.com/libp2p/go-libp2p-core v0.13.1-0.20220102114513-ec2f775d92a4
2727
github.com/libp2p/go-libp2p-discovery v0.6.0
2828
github.com/libp2p/go-libp2p-mplex v0.4.1
2929
github.com/libp2p/go-libp2p-nat v0.1.0
3030
github.com/libp2p/go-libp2p-netutil v0.1.0
3131
github.com/libp2p/go-libp2p-noise v0.3.0
3232
github.com/libp2p/go-libp2p-peerstore v0.6.0
3333
github.com/libp2p/go-libp2p-quic-transport v0.15.2
34-
github.com/libp2p/go-libp2p-swarm v0.9.0
34+
github.com/libp2p/go-libp2p-swarm v0.9.1-0.20220102125925-52f8e01834d2
3535
github.com/libp2p/go-libp2p-testing v0.6.0
3636
github.com/libp2p/go-libp2p-tls v0.3.1
37-
github.com/libp2p/go-libp2p-transport-upgrader v0.6.0
37+
github.com/libp2p/go-libp2p-transport-upgrader v0.6.1-0.20220102121504-3a350a84f70d
3838
github.com/libp2p/go-libp2p-yamux v0.7.0
3939
github.com/libp2p/go-msgio v0.1.0
4040
github.com/libp2p/go-netroute v0.1.6
4141
github.com/libp2p/go-stream-muxer-multistream v0.3.0
42-
github.com/libp2p/go-tcp-transport v0.4.0
43-
github.com/libp2p/go-ws-transport v0.5.0
42+
github.com/libp2p/go-tcp-transport v0.4.1-0.20220102115857-dd230a475011
43+
github.com/libp2p/go-ws-transport v0.5.1-0.20220102121300-db6cfff8e656
4444
github.com/libp2p/zeroconf/v2 v2.1.1
45-
github.com/multiformats/go-multiaddr v0.4.0
45+
github.com/multiformats/go-multiaddr v0.4.1
4646
github.com/multiformats/go-multiaddr-dns v0.3.1
4747
github.com/multiformats/go-multistream v0.2.2
4848
github.com/multiformats/go-varint v0.0.6

0 commit comments

Comments
 (0)