Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

move go-libp2p-quic-transport here #1424

Merged
merged 192 commits into from
Apr 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
36c695a
initial commmit
marten-seemann Mar 7, 2017
6770069
implement the listener
marten-seemann Mar 15, 2017
3b09dd9
use conn wrapper functions to construct a go-libp2p-transport.Conn
marten-seemann Mar 17, 2017
260693d
add (empty) test suite and travis config
marten-seemann Mar 18, 2017
a06bda1
implement transport.Matches
marten-seemann Mar 18, 2017
9fafe5c
add tests for the listener
marten-seemann Mar 18, 2017
8ad1607
add tests for transport.Listen
marten-seemann Mar 18, 2017
4ebce26
reject non-QUIC listen addresses
marten-seemann Mar 18, 2017
147f9ba
initialize the listener with a valid TLS config
marten-seemann Mar 20, 2017
960bacb
implement a dialer
marten-seemann Mar 20, 2017
cb1f88a
remove unused peerstore from listener
marten-seemann Apr 12, 2017
0a1f5c0
add support for multi-stream connections
marten-seemann May 17, 2017
15cc2f7
open new streams synchronously
marten-seemann Jun 15, 2017
1a9d358
return resolved address in the listener
marten-seemann Jun 15, 2017
c7bf01e
implement IsClosed() for the connection
marten-seemann Jun 16, 2017
554bd36
use the new quic-go API
marten-seemann Jul 14, 2017
7c6f9c0
use the new quic-go stream deadline
marten-seemann Jul 16, 2017
fd916f7
import the correct go-stream-muxer repo
marten-seemann Jul 19, 2017
214392a
implement the new stream reset recently added to smux.Stream
marten-seemann Aug 8, 2017
2f4cb70
use the new quic-go session context
marten-seemann Aug 8, 2017
e61b4dd
remove Serve from the quicConn
marten-seemann Aug 8, 2017
969c12d
generate a private key and a self-signed certificate for the listener
marten-seemann Aug 28, 2017
36115ae
use the new exported types in the quic-go API
marten-seemann Sep 1, 2017
443d2a8
use the renamed transport interfaces
marten-seemann Sep 6, 2017
5eaaf4c
refactor for transport interface changes
marten-seemann Jan 28, 2018
1b0d978
verify the server's certificate using tls.Config.VerifyPeerCertificate
marten-seemann Feb 2, 2018
55a8a75
fix opening and accepting of streams
marten-seemann Feb 22, 2018
93810dc
privatize generating the tls.Config
marten-seemann Feb 22, 2018
11564d0
generate the certificate chain on initialisation
marten-seemann Jun 6, 2018
3cb5f3d
use the same quic.Config values for dialing and listening
marten-seemann Jun 6, 2018
3f6bb16
Merge pull request #4 from marten-seemann/feat/refactor
marten-seemann Jun 8, 2018
aeda168
remove unused acceptQueue from the listener
marten-seemann Jun 11, 2018
e08e8cc
close and discard a connection if the client's cert chain is invalid
marten-seemann Jun 11, 2018
964a7f1
disable source address validation
marten-seemann Jun 12, 2018
fb445f5
Merge pull request #7 from libp2p/disable-source-address-validation
marten-seemann Jun 12, 2018
55f0adc
use the context for dialing
marten-seemann Jun 14, 2018
61d5f4a
Merge pull request #14 from libp2p/context-dial
marten-seemann Jun 14, 2018
3439696
fix the name of test ginkgo case
marten-seemann Jun 15, 2018
3524ae2
use multiaddr.Encapsulate to create QUIC multiaddrs
marten-seemann Jun 16, 2018
b794153
Merge pull request #16 from libp2p/multiaddr-encapsulate
marten-seemann Jun 20, 2018
c0e1cce
add a function to decapsulate a quic multiaddr
marten-seemann Jun 17, 2018
308b97b
use a single packet conn for all outgoing connections
marten-seemann Jun 17, 2018
bd4854a
Merge pull request #19 from libp2p/one-packet-conn
marten-seemann Jun 25, 2018
c75c51a
use QUIC Keep Alives
marten-seemann Jul 10, 2018
9a55577
obey the multiaddr's IP version when listening
marten-seemann Jul 14, 2018
ffe5aa8
obey the multiaddr's IP version when dialing
marten-seemann Jul 14, 2018
8dcf45b
generate certificates that are valid for 180 days
marten-seemann Aug 5, 2018
31671cd
Merge pull request #29 from libp2p/cert-validity
marten-seemann Aug 8, 2018
c3a5e86
allow 1000 bidirectional streams, disable unidirectional streams
marten-seemann Aug 11, 2018
137965e
Merge pull request #30 from libp2p/stream-limits
marten-seemann Aug 15, 2018
005db42
update quic-go to v0.9.0, use the quic-go milestone version
marten-seemann Aug 16, 2018
7ff218a
Merge pull request #31 from libp2p/update-deps
Stebalien Aug 16, 2018
88f8b4c
update quic-go to 0.10.0
marten-seemann Aug 28, 2018
59d7442
Merge pull request #32 from libp2p/new-quic-go
marten-seemann Aug 29, 2018
9692260
run Go 1.11 gofmt, use Go 1.10.x and 1.11.x on Travis
marten-seemann Aug 31, 2018
b3274ae
Fix missing transport in dialed connection
cannium Nov 20, 2018
3dd3b2f
Merge pull request #38 from cannium/patch-1
marten-seemann Nov 21, 2018
9259704
update quic-go to v0.11.0
marten-seemann Apr 4, 2019
6cca441
Merge pull request #54 from libp2p/quic-go-0.11.0
Stebalien Apr 4, 2019
2af204e
when ListenUDP fails once, try again next time
marten-seemann Apr 20, 2019
38838e9
Merge pull request #59 from libp2p/fix-listen-error
marten-seemann Apr 24, 2019
5a33a88
migrate to consolidated types. (#62)
raulk May 26, 2019
744a6ad
update quic-go to v0.12.0 (supporting QUIC draft-22)
marten-seemann Aug 5, 2019
fb054fc
Merge pull request #68 from libp2p/update-to-quic-draft-22
marten-seemann Aug 5, 2019
cacd2a4
use the handshake logic from go-libp2p-tls
marten-seemann Jul 29, 2019
5d493b4
add an error check that we actually received the peer's public key
marten-seemann Aug 1, 2019
bbc6350
Merge pull request #67 from libp2p/tls-handshake
marten-seemann Aug 5, 2019
d1193da
reuse listening connections for dialing
lnykww Mar 21, 2019
46775f0
use a single handle for each reuse
marten-seemann Aug 5, 2019
ff46be4
fix saving of listening connections when listening on IP:0
marten-seemann Aug 6, 2019
19dcc59
delete reuse-connection if they aren't used for more than 10 seconds
marten-seemann Aug 6, 2019
2fe3c88
close reuse-connections before deleting them
marten-seemann Aug 11, 2019
5f34ba3
Merge pull request #73 from libp2p/reuse-garbage-collect
marten-seemann Aug 13, 2019
70edc02
fix(android): use specific netlink families for android
gfanton Aug 28, 2019
7820ddc
fix(netlink): limit netlink families to NETLINK_ROUTE on linux
gfanton Aug 30, 2019
5f833fa
Merge pull request #75 from gfanton/fix/netlink-android
Stebalien Aug 30, 2019
9fd3674
make reuse work on Windows
marten-seemann Nov 15, 2019
16c73ab
Merge pull request #83 from libp2p/reuse-windows
Stebalien Nov 15, 2019
9a31a77
chore(dep): update deps
Stebalien Nov 15, 2019
572bfce
Merge pull request #84 from libp2p/chore/update-deps
Stebalien Nov 15, 2019
81c4f0a
increase the stream and connection receive windows
marten-seemann Feb 17, 2020
9cdba6a
fix key comparisons in tests
marten-seemann Feb 19, 2020
f513f36
Merge pull request #110 from libp2p/fix-key-comparison
marten-seemann Feb 19, 2020
c27c4f7
Merge pull request #108 from libp2p/increase-receive-window
Stebalien Feb 28, 2020
f40e281
update quic-go to v0.15.0
marten-seemann Mar 1, 2020
68974da
Merge pull request #114 from libp2p/update-quic-go
Stebalien Mar 1, 2020
b8f591a
Respect mux.ErrReset (#113)
Wondertan Mar 7, 2020
eea1dd7
accept a PSK in the transport constructor (and reject it)
marten-seemann Feb 20, 2020
c21973c
Merge pull request #111 from libp2p/accept-psk
Stebalien Mar 7, 2020
29c56d8
add support for multiaddr filtering
marten-seemann Mar 15, 2020
bbd82c0
use the resolved address for RemoteMultiaddr()
marten-seemann Mar 16, 2020
28e61ca
Merge pull request #127 from libp2p/use-resolved-address
Stebalien Mar 16, 2020
43458b9
Merge pull request #125 from libp2p/filters
marten-seemann Mar 17, 2020
5f2357c
use a stateless reset key derived from the private key
marten-seemann Mar 14, 2020
805048a
use hkdf.New instead of hkdf.Expand for stateless reset key derivation
marten-seemann Mar 23, 2020
2559e4b
use minio/sha256-simd instead of standard library SHA256
marten-seemann Mar 23, 2020
96a91cc
move the info used for stateless key expansion to a constant
marten-seemann Mar 25, 2020
75a10a8
Merge pull request #122 from libp2p/set-stateless-reset-key
marten-seemann Mar 25, 2020
e8ccc0b
fix: avoid dialing/listening on dns addresses
Stebalien Apr 3, 2020
d7e9747
test that CanDial fails on /dns addresses
marten-seemann Mar 16, 2020
d7a0402
Merge pull request #131 from libp2p/fix/no-dns
Stebalien Apr 3, 2020
bdbf176
export qlogs when the QLOGDIR env variable is set
marten-seemann Mar 26, 2020
6e90057
use RFC3339Nano date format for qlog file names
marten-seemann Apr 6, 2020
4710507
simplify the mkdir for the QLOGDIR
marten-seemann Apr 6, 2020
e957337
Merge pull request #129 from libp2p/qlog
marten-seemann Apr 6, 2020
3ec3559
switch local route binding to use netroute (#134)
willscott Apr 7, 2020
31d6fba
write qlogs to a temporary file first, then rename them when done
marten-seemann Apr 16, 2020
86c292f
Merge pull request #136 from libp2p/qlog-tmp-file
Stebalien Apr 17, 2020
9b04f0f
add command line client and server
marten-seemann Apr 20, 2020
82c90ce
apply @Stebalien's suggestions from code review
marten-seemann Apr 21, 2020
edf2917
Merge pull request #139 from libp2p/cmd-utilities
marten-seemann Apr 21, 2020
4df1224
gate QUIC connections via new ConnectionGater (#152)
aarshkshah1992 May 19, 2020
9f966ee
close the connection when it is refused by InterceptSecured
marten-seemann May 21, 2020
255be8c
Merge pull request #157 from libp2p/close-when-gated
Stebalien May 22, 2020
029459e
fix a potential nil-pointer panic. (#158)
raulk May 22, 2020
094d042
Revert "fix a potential nil-pointer panic." (#159)
raulk May 22, 2020
f56ac0c
update quic-go to v0.16.1
marten-seemann Jun 4, 2020
92bb968
Merge pull request #162 from libp2p/update-quic-go
Stebalien Jun 9, 2020
ec4007a
update quic-go to v0.18.0 (#171)
marten-seemann Aug 20, 2020
b5e3105
enable metrics
marten-seemann Jul 23, 2020
fbda35c
Merge pull request #172 from libp2p/metrics
marten-seemann Sep 2, 2020
0b57bca
Implement CloseRead/CloseWrite
Stebalien Aug 28, 2020
442ab6d
Merge pull request #174 from libp2p/feat/rw-close
marten-seemann Sep 3, 2020
979147a
always close the connection in the cmd client
marten-seemann Oct 5, 2020
3b88f7b
use a dedicated error code when a connection is gated
marten-seemann Oct 24, 2020
73961f0
use GoMock to generate a mock connection gater
marten-seemann Oct 24, 2020
f3091f3
don't blackhole packets when gating via InterceptAccept
marten-seemann Oct 24, 2020
81afd82
fix reuseConn counting when creating the quic.Listener errors
marten-seemann Oct 24, 2020
773d8f0
pass a conn that can be type asserted to a net.UDPConn to quic-go
marten-seemann Oct 24, 2020
f983854
don't call InterceptAccept when dialing
marten-seemann Oct 27, 2020
9c1f625
Merge pull request #180 from libp2p/remove-intercept-accept-blackhole
marten-seemann Oct 28, 2020
728d351
update quic-go to v0.19.0
marten-seemann Nov 11, 2020
85c681b
Merge pull request #182 from libp2p/update-quic-go
marten-seemann Nov 14, 2020
ee958af
change OpenStream to accept a context
marten-seemann Dec 17, 2020
3d1dc75
Merge pull request #189 from libp2p/open-stream-context
marten-seemann Dec 19, 2020
89dffad
switch from gzip to zstd for qlog compression
marten-seemann Jan 19, 2021
8eb8796
Merge pull request #190 from libp2p/zstd
marten-seemann Jan 21, 2021
e888974
compress qlogs when the QUIC connection is closed
marten-seemann Feb 11, 2021
593727b
use defers to close files
marten-seemann Feb 12, 2021
3fcebc8
Merge pull request #193 from libp2p/deferred-qlog-compression
marten-seemann Feb 12, 2021
6f26698
reduce the zstd window size from 8 MB to 32 KB
marten-seemann Feb 22, 2021
870bb16
Merge pull request #195 from libp2p/zstd-window-size
marten-seemann Feb 24, 2021
781356a
update quic-go to v0.20.0
marten-seemann Mar 19, 2021
e1361bb
Merge pull request #198 from libp2p/update-quic-go
marten-seemann Mar 20, 2021
26f5509
expose some Prometheus metrics
marten-seemann Mar 13, 2021
84acfa1
rename metrics to adhere to naming conventions
marten-seemann Apr 2, 2021
3d8dde6
Merge pull request #200 from libp2p/prometheus
marten-seemann Apr 5, 2021
e262838
update quic-go to v0.20.1
marten-seemann Apr 3, 2021
c69ab03
Merge pull request #201 from libp2p/update-quic-go
Stebalien Apr 5, 2021
f1cfac9
increase test timeout to reduce flakiness of test on Windows
marten-seemann Apr 6, 2021
282be49
correctly export version negotiation failures to Prometheus
marten-seemann Apr 4, 2021
4ccc8a5
Merge pull request #205 from libp2p/fix-version-negotiation-metrics
marten-seemann Apr 6, 2021
359210e
Merge pull request #204 from libp2p/fix-flaky-windows-test
marten-seemann Apr 19, 2021
cc611a6
update quic-go to v0.21.0-rc2
marten-seemann May 4, 2021
6e91b4a
Merge pull request #206 from libp2p/update-quic-go
marten-seemann May 11, 2021
8e713b4
update quic-go, enable QUIC v1 (RFC 9000)
marten-seemann May 31, 2021
3ebc3ba
Merge pull request #207 from libp2p/quic-v1
marten-seemann May 31, 2021
4ff2d36
add hole punching support (#194)
vyzo Jul 5, 2021
5ce0d8c
don't compare peer IDs when hole punching
marten-seemann Jul 5, 2021
284e743
Merge pull request #210 from libp2p/coordinate-hole-punch
marten-seemann Jul 7, 2021
8c7dcf7
remove unused function parameters for the reuse struct
marten-seemann Jul 7, 2021
2cef5be
implement a Transport.Close that waits for the reuse's GC to finish
marten-seemann Jul 7, 2021
2750bef
simplify reuse gc
marten-seemann Jul 17, 2021
c5cfb13
close all UDP connections when the reuse is closed
marten-seemann Jul 23, 2021
0d2a0fa
move cleanup to gc
marten-seemann Jul 23, 2021
fefca49
Merge pull request #216 from libp2p/close-conns-on-reuse-close
marten-seemann Jul 23, 2021
687835b
fix closing of streams in example
marten-seemann Aug 5, 2021
490a394
Merge pull request #221 from libp2p/fix-example
marten-seemann Aug 5, 2021
bee04c7
read the client option from the simultaneous connect context
marten-seemann Aug 22, 2021
219c1fc
Merge pull request #230 from libp2p/sim-connect-context
marten-seemann Sep 8, 2021
3253205
fix error assertions in the tracer
marten-seemann Oct 11, 2021
5a1099b
reuse the same router until we change listeners
Stebalien Oct 28, 2021
f6db71e
Merge pull request #240 from libp2p/feat/cache-routes
marten-seemann Nov 14, 2021
79681c8
chore: update go-log to v2 (#242)
marten-seemann Dec 7, 2021
05bb49a
reduce the maximum number of incoming streams to 256 (#243)
marten-seemann Dec 10, 2021
0e7e78b
migrate the transport tests away from Ginkgo
marten-seemann Jul 25, 2021
7a9ac66
migrate the conn tests away from Ginkgo
marten-seemann Jan 3, 2022
591c57c
use the quic.OOBCapablePacketConn in tests
marten-seemann Jan 3, 2022
4b48046
migrate the listener tests away from Ginkgo
marten-seemann Jan 3, 2022
415b07d
migrate the multiaddr tests away from Ginkgo
marten-seemann Jan 3, 2022
6a0fe75
migrate the reuse tests away from Ginkgo
marten-seemann Jan 3, 2022
2a41315
migrate the tracer tests away from Ginkgo
marten-seemann Jan 3, 2022
078c78f
remove Ginkgo suite
marten-seemann Jan 3, 2022
445a40e
don't start a Go routine for every connection dialed
marten-seemann Jan 7, 2022
c9d964e
Merge pull request #252 from libp2p/optimize-connection-close
marten-seemann Jan 8, 2022
a49983a
use the Resource Manager
marten-seemann Dec 31, 2021
ca49491
use the resource manager to allow connection flow control window incr…
marten-seemann Jan 14, 2022
a54e613
Merge pull request #249 from libp2p/rcmgr
marten-seemann Jan 18, 2022
add734f
Prevent data race in allowWindowIncrease (#259)
mudler Feb 7, 2022
8d52262
update quic-go to v0.27.0 (#264)
marten-seemann Apr 6, 2022
7ff834c
move go-libp2p-quic-transport here
marten-seemann Apr 22, 2022
4810afb
switch from github.com/libp2p/go-libp2p-quic-transport to p2p/transpo…
marten-seemann Apr 22, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import (
"crypto/rand"

"github.com/libp2p/go-libp2p/p2p/net/connmgr"
quic "github.com/libp2p/go-libp2p/p2p/transport/quic"
"github.com/libp2p/go-libp2p/p2p/transport/tcp"
ws "github.com/libp2p/go-libp2p/p2p/transport/websocket"

"github.com/libp2p/go-libp2p-core/crypto"

noise "github.com/libp2p/go-libp2p-noise"
"github.com/libp2p/go-libp2p-peerstore/pstoremem"
quic "github.com/libp2p/go-libp2p-quic-transport"
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
tls "github.com/libp2p/go-libp2p-tls"
yamux "github.com/libp2p/go-libp2p-yamux"
Expand Down
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ require (
github.com/benbjohnson/clock v1.3.0
github.com/gogo/protobuf v1.3.2
github.com/golang/mock v1.6.0
github.com/google/gopacket v1.1.19
github.com/gorilla/websocket v1.5.0
github.com/hashicorp/golang-lru v0.5.4
github.com/ipfs/go-cid v0.1.0
github.com/ipfs/go-datastore v0.5.1
github.com/ipfs/go-ipfs-util v0.0.2
github.com/ipfs/go-log/v2 v2.5.1
github.com/klauspost/compress v1.15.1
github.com/libp2p/go-buffer-pool v0.0.2
github.com/libp2p/go-conn-security-multistream v0.3.0
github.com/libp2p/go-eventbus v0.2.1
Expand All @@ -22,7 +24,6 @@ require (
github.com/libp2p/go-libp2p-nat v0.1.0
github.com/libp2p/go-libp2p-noise v0.4.0
github.com/libp2p/go-libp2p-peerstore v0.6.0
github.com/libp2p/go-libp2p-quic-transport v0.17.0
github.com/libp2p/go-libp2p-resource-manager v0.2.1
github.com/libp2p/go-libp2p-testing v0.9.2
github.com/libp2p/go-libp2p-tls v0.4.1
Expand All @@ -34,8 +35,10 @@ require (
github.com/libp2p/go-reuseport-transport v0.1.0
github.com/libp2p/go-stream-muxer-multistream v0.4.0
github.com/libp2p/zeroconf/v2 v2.1.1
github.com/lucas-clemente/quic-go v0.27.0
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b
github.com/minio/sha256-simd v1.0.0
github.com/multiformats/go-multiaddr v0.5.0
github.com/multiformats/go-multiaddr-dns v0.3.1
github.com/multiformats/go-multiaddr-fmt v0.1.0
Expand All @@ -47,6 +50,7 @@ require (
github.com/stretchr/testify v1.7.0
github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
)

Expand All @@ -68,26 +72,24 @@ require (
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/gopacket v1.1.19 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/huin/goupnp v1.0.3 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
github.com/klauspost/compress v1.15.1 // indirect
github.com/klauspost/cpuid/v2 v2.0.12 // indirect
github.com/koron/go-ssdp v0.0.2 // indirect
github.com/libp2p/go-cidranger v1.1.0 // indirect
github.com/libp2p/go-flow-metrics v0.0.3 // indirect
github.com/libp2p/go-libp2p-blankhost v0.3.0 // indirect
github.com/libp2p/go-libp2p-pnet v0.2.0 // indirect
github.com/libp2p/go-libp2p-quic-transport v0.17.0 // indirect
github.com/libp2p/go-libp2p-swarm v0.10.2 // indirect
github.com/libp2p/go-mplex v0.4.0 // indirect
github.com/libp2p/go-nat v0.1.0 // indirect
github.com/libp2p/go-openssl v0.0.7 // indirect
github.com/libp2p/go-tcp-transport v0.5.1 // indirect
github.com/libp2p/go-yamux/v3 v3.1.1 // indirect
github.com/lucas-clemente/quic-go v0.27.0 // indirect
github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect
github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect
github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect
Expand All @@ -96,7 +98,6 @@ require (
github.com/miekg/dns v1.1.48 // indirect
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect
github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/multiformats/go-base32 v0.0.4 // indirect
github.com/multiformats/go-base36 v0.1.0 // indirect
Expand All @@ -117,7 +118,6 @@ require (
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.21.0 // indirect
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
golang.org/x/net v0.0.0-20220418201149-a630d4f3e7a2 // indirect
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
Expand Down
2 changes: 1 addition & 1 deletion p2p/net/swarm/dial_worker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"
"time"

quic "github.com/libp2p/go-libp2p/p2p/transport/quic"
"github.com/libp2p/go-libp2p/p2p/transport/tcp"

"github.com/libp2p/go-libp2p-core/peerstore"
Expand All @@ -16,7 +17,6 @@ import (

csms "github.com/libp2p/go-conn-security-multistream"
"github.com/libp2p/go-libp2p-peerstore/pstoremem"
quic "github.com/libp2p/go-libp2p-quic-transport"
tnet "github.com/libp2p/go-libp2p-testing/net"
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
yamux "github.com/libp2p/go-libp2p-yamux"
Expand Down
2 changes: 1 addition & 1 deletion p2p/net/swarm/testing/testing.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"time"

"github.com/libp2p/go-libp2p/p2p/net/swarm"
quic "github.com/libp2p/go-libp2p/p2p/transport/quic"
"github.com/libp2p/go-libp2p/p2p/transport/tcp"

"github.com/libp2p/go-libp2p-core/connmgr"
Expand All @@ -19,7 +20,6 @@ import (

csms "github.com/libp2p/go-conn-security-multistream"
"github.com/libp2p/go-libp2p-peerstore/pstoremem"
quic "github.com/libp2p/go-libp2p-quic-transport"
tnet "github.com/libp2p/go-libp2p-testing/net"
tptu "github.com/libp2p/go-libp2p-transport-upgrader"
yamux "github.com/libp2p/go-libp2p-yamux"
Expand Down
71 changes: 71 additions & 0 deletions p2p/transport/quic/cmd/client/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package main

import (
"context"
"crypto/rand"
"fmt"
"io/ioutil"
"log"
"os"

ic "github.com/libp2p/go-libp2p-core/crypto"
"github.com/libp2p/go-libp2p-core/peer"
libp2pquic "github.com/libp2p/go-libp2p/p2p/transport/quic"
ma "github.com/multiformats/go-multiaddr"
)

func main() {
if len(os.Args) != 3 {
fmt.Printf("Usage: %s <multiaddr> <peer id>", os.Args[0])
return
}
if err := run(os.Args[1], os.Args[2]); err != nil {
log.Fatalf(err.Error())
}
}

func run(raddr string, p string) error {
peerID, err := peer.Decode(p)
if err != nil {
return err
}
addr, err := ma.NewMultiaddr(raddr)
if err != nil {
return err
}
priv, _, err := ic.GenerateECDSAKeyPair(rand.Reader)
if err != nil {
return err
}

t, err := libp2pquic.NewTransport(priv, nil, nil, nil)
if err != nil {
return err
}

log.Printf("Dialing %s\n", addr.String())
conn, err := t.Dial(context.Background(), addr, peerID)
if err != nil {
return err
}
defer conn.Close()
str, err := conn.OpenStream(context.Background())
if err != nil {
return err
}
defer str.Close()
const msg = "Hello world!"
log.Printf("Sending: %s\n", msg)
if _, err := str.Write([]byte(msg)); err != nil {
return err
}
if err := str.CloseWrite(); err != nil {
return err
}
data, err := ioutil.ReadAll(str)
if err != nil {
return err
}
log.Printf("Received: %s\n", data)
return nil
}
79 changes: 79 additions & 0 deletions p2p/transport/quic/cmd/server/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package main

import (
"crypto/rand"
"fmt"
"io/ioutil"
"log"
"os"

ic "github.com/libp2p/go-libp2p-core/crypto"
"github.com/libp2p/go-libp2p-core/peer"
tpt "github.com/libp2p/go-libp2p-core/transport"
libp2pquic "github.com/libp2p/go-libp2p/p2p/transport/quic"
ma "github.com/multiformats/go-multiaddr"
)

func main() {
if len(os.Args) != 2 {
fmt.Printf("Usage: %s <port>", os.Args[0])
return
}
if err := run(os.Args[1]); err != nil {
log.Fatalf(err.Error())
}
}

func run(port string) error {
addr, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/udp/%s/quic", port))
if err != nil {
return err
}
priv, _, err := ic.GenerateECDSAKeyPair(rand.Reader)
if err != nil {
return err
}
peerID, err := peer.IDFromPrivateKey(priv)
if err != nil {
return err
}

t, err := libp2pquic.NewTransport(priv, nil, nil, nil)
if err != nil {
return err
}

ln, err := t.Listen(addr)
if err != nil {
return err
}
fmt.Printf("Listening. Now run: go run cmd/client/main.go %s %s\n", ln.Multiaddr(), peerID)
for {
conn, err := ln.Accept()
if err != nil {
return err
}
log.Printf("Accepted new connection from %s (%s)\n", conn.RemotePeer(), conn.RemoteMultiaddr())
go func() {
if err := handleConn(conn); err != nil {
log.Printf("handling conn failed: %s", err.Error())
}
}()
}
}

func handleConn(conn tpt.CapableConn) error {
str, err := conn.AcceptStream()
if err != nil {
return err
}
data, err := ioutil.ReadAll(str)
if err != nil {
return err
}
log.Printf("Received: %s\n", data)
if _, err := str.Write(data); err != nil {
return err
}
return str.Close()
}
100 changes: 100 additions & 0 deletions p2p/transport/quic/conn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package libp2pquic

import (
"context"

ic "github.com/libp2p/go-libp2p-core/crypto"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
tpt "github.com/libp2p/go-libp2p-core/transport"

"github.com/lucas-clemente/quic-go"
ma "github.com/multiformats/go-multiaddr"
)

type conn struct {
quicConn quic.Connection
pconn *reuseConn
transport *transport
scope network.ConnManagementScope

localPeer peer.ID
privKey ic.PrivKey
localMultiaddr ma.Multiaddr

remotePeerID peer.ID
remotePubKey ic.PubKey
remoteMultiaddr ma.Multiaddr
}

var _ tpt.CapableConn = &conn{}

// Close closes the connection.
// It must be called even if the peer closed the connection in order for
// garbage collection to properly work in this package.
func (c *conn) Close() error {
c.transport.removeConn(c.quicConn)
err := c.quicConn.CloseWithError(0, "")
c.pconn.DecreaseCount()
c.scope.Done()
return err
}

// IsClosed returns whether a connection is fully closed.
func (c *conn) IsClosed() bool {
return c.quicConn.Context().Err() != nil
}

func (c *conn) allowWindowIncrease(size uint64) bool {
return c.scope.ReserveMemory(int(size), network.ReservationPriorityMedium) == nil
}

// OpenStream creates a new stream.
func (c *conn) OpenStream(ctx context.Context) (network.MuxedStream, error) {
qstr, err := c.quicConn.OpenStreamSync(ctx)
return &stream{Stream: qstr}, err
}

// AcceptStream accepts a stream opened by the other side.
func (c *conn) AcceptStream() (network.MuxedStream, error) {
qstr, err := c.quicConn.AcceptStream(context.Background())
return &stream{Stream: qstr}, err
}

// LocalPeer returns our peer ID
func (c *conn) LocalPeer() peer.ID {
return c.localPeer
}

// LocalPrivateKey returns our private key
func (c *conn) LocalPrivateKey() ic.PrivKey {
return c.privKey
}

// RemotePeer returns the peer ID of the remote peer.
func (c *conn) RemotePeer() peer.ID {
return c.remotePeerID
}

// RemotePublicKey returns the public key of the remote peer.
func (c *conn) RemotePublicKey() ic.PubKey {
return c.remotePubKey
}

// LocalMultiaddr returns the local Multiaddr associated
func (c *conn) LocalMultiaddr() ma.Multiaddr {
return c.localMultiaddr
}

// RemoteMultiaddr returns the remote Multiaddr associated
func (c *conn) RemoteMultiaddr() ma.Multiaddr {
return c.remoteMultiaddr
}

func (c *conn) Transport() tpt.Transport {
return c.transport
}

func (c *conn) Scope() network.ConnScope {
return c.scope
}
Loading