|
Name |
|
Date |
Size |
#Lines |
LOC |
| .. | | 03-May-2022 | - |
| .circleci/ | H | 16-Aug-2021 | - | 56 | 53 |
| .githooks/ | H | 16-Aug-2021 | - | 36 | 26 |
| .github/workflows/ | H | 16-Aug-2021 | - | 255 | 214 |
| benchmark/ | H | 16-Aug-2021 | - | 121 | 95 |
| docs/ | H | 03-May-2022 | - | | |
| example/ | H | 16-Aug-2021 | - | 435 | 367 |
| fuzzing/ | H | 16-Aug-2021 | - | 1,768 | 1,566 |
| http3/ | H | 16-Aug-2021 | - | 4,803 | 4,011 |
| integrationtests/ | H | 16-Aug-2021 | - | 7,106 | 6,138 |
| internal/ | H | 16-Aug-2021 | - | 26,423 | 20,956 |
| interop/ | H | 16-Aug-2021 | - | 854 | 704 |
| logging/ | H | 16-Aug-2021 | - | 1,333 | 951 |
| qlog/ | H | 16-Aug-2021 | - | 3,384 | 2,984 |
| quicvarint/ | H | 16-Aug-2021 | - | 515 | 419 |
| .gitignore | H A D | 16-Aug-2021 | 210 | 18 | 15 |
| .golangci.yml | H A D | 16-Aug-2021 | 903 | 50 | 46 |
| Changelog.md | H A D | 16-Aug-2021 | 4.4 KiB | 110 | 77 |
| LICENSE | H A D | 16-Aug-2021 | 1.1 KiB | 22 | 17 |
| README.md | H A D | 16-Aug-2021 | 2.3 KiB | 50 | 31 |
| buffer_pool.go | H A D | 16-Aug-2021 | 1.8 KiB | 81 | 53 |
| buffer_pool_test.go | H A D | 16-Aug-2021 | 1.2 KiB | 56 | 45 |
| client.go | H A D | 16-Aug-2021 | 9.2 KiB | 338 | 267 |
| client_test.go | H A D | 16-Aug-2021 | 18.2 KiB | 613 | 560 |
| closed_session.go | H A D | 16-Aug-2021 | 2.9 KiB | 113 | 84 |
| closed_session_test.go | H A D | 16-Aug-2021 | 1.4 KiB | 57 | 45 |
| codecov.yml | H A D | 16-Aug-2021 | 567 | 22 | 21 |
| config.go | H A D | 16-Aug-2021 | 4.1 KiB | 124 | 108 |
| config_test.go | H A D | 16-Aug-2021 | 5.9 KiB | 178 | 153 |
| conn.go | H A D | 16-Aug-2021 | 1.8 KiB | 66 | 51 |
| conn_generic.go | H A D | 16-Aug-2021 | 285 | 16 | 9 |
| conn_helper_darwin.go | H A D | 16-Aug-2021 | 391 | 22 | 12 |
| conn_helper_freebsd.go | H A D | 16-Aug-2021 | 245 | 20 | 12 |
| conn_helper_linux.go | H A D | 16-Aug-2021 | 385 | 20 | 12 |
| conn_id_generator.go | H A D | 16-Aug-2021 | 4.4 KiB | 141 | 119 |
| conn_id_generator_test.go | H A D | 16-Aug-2021 | 7.3 KiB | 188 | 166 |
| conn_id_manager.go | H A D | 16-Aug-2021 | 6.5 KiB | 208 | 165 |
| conn_id_manager_test.go | H A D | 16-Aug-2021 | 14 KiB | 365 | 329 |
| conn_oob.go | H A D | 16-Aug-2021 | 8.3 KiB | 288 | 232 |
| conn_oob_test.go | H A D | 16-Aug-2021 | 7.1 KiB | 243 | 200 |
| conn_test.go | H A D | 16-Aug-2021 | 888 | 34 | 27 |
| conn_windows.go | H A D | 16-Aug-2021 | 1.2 KiB | 54 | 42 |
| conn_windows_test.go | H A D | 16-Aug-2021 | 784 | 33 | 26 |
| crypto_stream.go | H A D | 16-Aug-2021 | 3 KiB | 116 | 95 |
| crypto_stream_manager.go | H A D | 16-Aug-2021 | 1.5 KiB | 62 | 53 |
| crypto_stream_manager_test.go | H A D | 16-Aug-2021 | 4.6 KiB | 120 | 104 |
| crypto_stream_test.go | H A D | 16-Aug-2021 | 5.7 KiB | 188 | 168 |
| datagram_queue.go | H A D | 16-Aug-2021 | 1.8 KiB | 88 | 69 |
| datagram_queue_test.go | H A D | 16-Aug-2021 | 2.5 KiB | 99 | 83 |
| errors.go | H A D | 16-Aug-2021 | 1.9 KiB | 59 | 48 |
| frame_sorter.go | H A D | 16-Aug-2021 | 5.8 KiB | 225 | 188 |
| frame_sorter_test.go | H A D | 16-Aug-2021 | 39.5 KiB | 1,528 | 1,290 |
| framer.go | H A D | 16-Aug-2021 | 4.9 KiB | 172 | 141 |
| framer_test.go | H A D | 16-Aug-2021 | 15.5 KiB | 386 | 348 |
| go.mod | H A D | 16-Aug-2021 | 646 | 20 | 17 |
| go.sum | H A D | 16-Aug-2021 | 27.9 KiB | 284 | 283 |
| interface.go | H A D | 16-Aug-2021 | 14.8 KiB | 323 | 105 |
| mock_ack_frame_source_test.go | H A D | 16-Aug-2021 | 1.6 KiB | 51 | 32 |
| mock_batch_conn_test.go | H A D | 16-Aug-2021 | 1.4 KiB | 51 | 32 |
| mock_crypto_data_handler_test.go | H A D | 16-Aug-2021 | 1.6 KiB | 50 | 31 |
| mock_crypto_stream_test.go | H A D | 16-Aug-2021 | 3.9 KiB | 122 | 83 |
| mock_frame_source_test.go | H A D | 16-Aug-2021 | 2.8 KiB | 81 | 54 |
| mock_mtu_discoverer_test.go | H A D | 16-Aug-2021 | 2.6 KiB | 81 | 54 |
| mock_multiplexer_test.go | H A D | 16-Aug-2021 | 2.1 KiB | 66 | 43 |
| mock_packer_test.go | H A D | 16-Aug-2021 | 6.6 KiB | 180 | 125 |
| mock_packet_handler_manager_test.go | H A D | 16-Aug-2021 | 6.6 KiB | 176 | 117 |
| mock_packet_handler_test.go | H A D | 16-Aug-2021 | 2.7 KiB | 86 | 55 |
| mock_packetconn_test.go | H A D | 16-Aug-2021 | 4.3 KiB | 138 | 95 |
| mock_quic_session_test.go | H A D | 16-Aug-2021 | 11.7 KiB | 347 | 244 |
| mock_receive_stream_internal_test.go | H A D | 16-Aug-2021 | 5.1 KiB | 147 | 100 |
| mock_sealing_manager_test.go | H A D | 16-Aug-2021 | 3.3 KiB | 96 | 65 |
| mock_send_conn_test.go | H A D | 16-Aug-2021 | 2.5 KiB | 92 | 61 |
| mock_send_stream_internal_test.go | H A D | 16-Aug-2021 | 6.3 KiB | 188 | 129 |
| mock_sender_test.go | H A D | 16-Aug-2021 | 2.7 KiB | 101 | 66 |
| mock_session_runner_test.go | H A D | 16-Aug-2021 | 4.5 KiB | 124 | 81 |
| mock_stream_getter_test.go | H A D | 16-Aug-2021 | 2.2 KiB | 66 | 43 |
| mock_stream_internal_test.go | H A D | 16-Aug-2021 | 9.5 KiB | 285 | 198 |
| mock_stream_manager_test.go | H A D | 16-Aug-2021 | 8.4 KiB | 232 | 161 |
| mock_stream_sender_test.go | H A D | 16-Aug-2021 | 2.5 KiB | 73 | 46 |
| mock_token_store_test.go | H A D | 16-Aug-2021 | 1.7 KiB | 61 | 38 |
| mock_unknown_packet_handler_test.go | H A D | 16-Aug-2021 | 1.9 KiB | 59 | 36 |
| mock_unpacker_test.go | H A D | 16-Aug-2021 | 1.5 KiB | 52 | 33 |
| mockgen.go | H A D | 16-Aug-2021 | 3.2 KiB | 28 | 1 |
| mockgen_private.sh | H A D | 16-Aug-2021 | 1.4 KiB | 52 | 36 |
| mtu_discoverer.go | H A D | 16-Aug-2021 | 2.2 KiB | 85 | 67 |
| mtu_discoverer_test.go | H A D | 16-Aug-2021 | 3.4 KiB | 117 | 102 |
| multiplexer.go | H A D | 16-Aug-2021 | 2.8 KiB | 108 | 89 |
| multiplexer_test.go | H A D | 16-Aug-2021 | 3.1 KiB | 71 | 61 |
| packet_handler_map.go | H A D | 16-Aug-2021 | 13.3 KiB | 468 | 404 |
| packet_handler_map_test.go | H A D | 16-Aug-2021 | 18.4 KiB | 496 | 429 |
| packet_packer.go | H A D | 16-Aug-2021 | 27.5 KiB | 895 | 785 |
| packet_packer_test.go | H A D | 16-Aug-2021 | 80.6 KiB | 1,557 | 1,441 |
| packet_unpacker.go | H A D | 16-Aug-2021 | 6.2 KiB | 197 | 160 |
| packet_unpacker_test.go | H A D | 16-Aug-2021 | 11.7 KiB | 293 | 272 |
| quic_suite_test.go | H A D | 16-Aug-2021 | 524 | 35 | 25 |
| receive_stream.go | H A D | 16-Aug-2021 | 8.2 KiB | 327 | 271 |
| receive_stream_test.go | H A D | 16-Aug-2021 | 21.6 KiB | 659 | 604 |
| retransmission_queue.go | H A D | 16-Aug-2021 | 3.3 KiB | 132 | 113 |
| retransmission_queue_test.go | H A D | 16-Aug-2021 | 6.5 KiB | 188 | 166 |
| send_conn.go | H A D | 16-Aug-2021 | 1.3 KiB | 75 | 58 |
| send_conn_test.go | H A D | 16-Aug-2021 | 958 | 46 | 37 |
| send_queue.go | H A D | 16-Aug-2021 | 1.8 KiB | 83 | 67 |
| send_queue_test.go | H A D | 16-Aug-2021 | 2.9 KiB | 127 | 102 |
| send_stream.go | H A D | 16-Aug-2021 | 12.9 KiB | 489 | 416 |
| send_stream_test.go | H A D | 16-Aug-2021 | 39.1 KiB | 1,160 | 1,044 |
| server.go | H A D | 16-Aug-2021 | 20.4 KiB | 672 | 564 |
| server_test.go | H A D | 16-Aug-2021 | 44.7 KiB | 1,239 | 1,124 |
| session.go | H A D | 16-Aug-2021 | 61.1 KiB | 1,996 | 1,717 |
| session_test.go | H A D | 16-Aug-2021 | 113.4 KiB | 3,025 | 2,753 |
| stream.go | H A D | 16-Aug-2021 | 4.4 KiB | 150 | 109 |
| stream_test.go | H A D | 16-Aug-2021 | 3.2 KiB | 108 | 88 |
| streams_map.go | H A D | 16-Aug-2021 | 9.5 KiB | 318 | 277 |
| streams_map_generic_helper.go | H A D | 16-Aug-2021 | 505 | 19 | 11 |
| streams_map_incoming_bidi.go | H A D | 16-Aug-2021 | 5.4 KiB | 193 | 153 |
| streams_map_incoming_generic.go | H A D | 16-Aug-2021 | 5.4 KiB | 191 | 153 |
| streams_map_incoming_generic_test.go | H A D | 16-Aug-2021 | 9.8 KiB | 308 | 264 |
| streams_map_incoming_uni.go | H A D | 16-Aug-2021 | 5.5 KiB | 193 | 153 |
| streams_map_outgoing_bidi.go | H A D | 16-Aug-2021 | 5.4 KiB | 227 | 182 |
| streams_map_outgoing_generic.go | H A D | 16-Aug-2021 | 5.5 KiB | 225 | 182 |
| streams_map_outgoing_generic_test.go | H A D | 16-Aug-2021 | 15.9 KiB | 540 | 480 |
| streams_map_outgoing_uni.go | H A D | 16-Aug-2021 | 5.5 KiB | 227 | 182 |
| streams_map_test.go | H A D | 16-Aug-2021 | 17.3 KiB | 501 | 434 |
| token_store.go | H A D | 16-Aug-2021 | 2.5 KiB | 118 | 95 |
| token_store_test.go | H A D | 16-Aug-2021 | 3.2 KiB | 109 | 93 |
| tools.go | H A D | 16-Aug-2021 | 110 | 9 | 5 |
| window_update_queue.go | H A D | 16-Aug-2021 | 1.8 KiB | 72 | 60 |
| window_update_queue_test.go | H A D | 16-Aug-2021 | 3.8 KiB | 113 | 98 |
README.md
1# A QUIC implementation in pure Go
2
3<img src="docs/quic.png" width=303 height=124>
4
5[![PkgGoDev](https://pkg.go.dev/badge/github.com/lucas-clemente/quic-go)](https://pkg.go.dev/github.com/lucas-clemente/quic-go)
6[![Travis Build Status](https://img.shields.io/travis/lucas-clemente/quic-go/master.svg?style=flat-square&label=Travis+build)](https://travis-ci.org/lucas-clemente/quic-go)
7[![CircleCI Build Status](https://img.shields.io/circleci/project/github/lucas-clemente/quic-go.svg?style=flat-square&label=CircleCI+build)](https://circleci.com/gh/lucas-clemente/quic-go)
8[![Windows Build Status](https://img.shields.io/appveyor/ci/lucas-clemente/quic-go/master.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/lucas-clemente/quic-go/branch/master)
9[![Code Coverage](https://img.shields.io/codecov/c/github/lucas-clemente/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/lucas-clemente/quic-go/)
10
11quic-go is an implementation of the [QUIC protocol, RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000) protocol in Go.
12In addition to RFC 9000, it currently implements the [IETF QUIC draft-29](https://tools.ietf.org/html/draft-ietf-quic-transport-29). Support for draft-29 will eventually be dropped, as it is phased out of the ecosystem.
13
14## Guides
15
16*We currently support Go 1.16.x and Go 1.17.x.*
17
18Running tests:
19
20 go test ./...
21
22### QUIC without HTTP/3
23
24Take a look at [this echo example](example/echo/echo.go).
25
26## Usage
27
28### As a server
29
30See the [example server](example/main.go). Starting a QUIC server is very similar to the standard lib http in go:
31
32```go
33http.Handle("/", http.FileServer(http.Dir(wwwDir)))
34http3.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)
35```
36
37### As a client
38
39See the [example client](example/client/main.go). Use a `http3.RoundTripper` as a `Transport` in a `http.Client`.
40
41```go
42http.Client{
43 Transport: &http3.RoundTripper{},
44}
45```
46
47## Contributing
48
49We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with [help wanted](https://github.com/lucas-clemente/quic-go/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). If you have any questions, please feel free to reach out by opening an issue or leaving a comment.
50