• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.circleci/H01-Apr-2019-5150

.travis/H01-Apr-2019-3521

benchmark/H01-Apr-2019-11592

docs/H03-May-2022-

example/H01-Apr-2019-337276

h2quic/H01-Apr-2019-3,3652,763

integrationtests/H01-Apr-2019-3,5472,994

internal/H01-Apr-2019-19,81215,612

.editorconfigH A D01-Apr-201952 64

.gitignoreH A D01-Apr-201922 43

.golangci.ymlH A D01-Apr-2019389 2623

.travis.ymlH A D01-Apr-2019991 4032

Changelog.mdH A D01-Apr-20192 KiB4534

LICENSEH A D01-Apr-20191.1 KiB2217

README.mdH A D01-Apr-20193.4 KiB6940

appveyor.ymlH A D01-Apr-2019840 3527

buffer_pool.goH A D01-Apr-20191.7 KiB7650

buffer_pool_test.goH A D01-Apr-20191.1 KiB5040

client.goH A D01-Apr-201911.7 KiB414335

client_test.goH A D01-Apr-201918.9 KiB625563

codecov.ymlH A D01-Apr-2019496 1918

conn.goH A D01-Apr-2019880 5543

conn_test.goH A D01-Apr-20193 KiB131113

crypto_stream.goH A D01-Apr-20193.6 KiB136106

crypto_stream_manager.goH A D01-Apr-20191.5 KiB6153

crypto_stream_manager_test.goH A D01-Apr-20194.6 KiB120104

crypto_stream_test.goH A D01-Apr-20196.8 KiB225200

frame_sorter.goH A D01-Apr-20193.7 KiB160126

frame_sorter_test.goH A D01-Apr-201913.8 KiB418355

framer.goH A D01-Apr-20193 KiB11091

framer_test.goH A D01-Apr-20199.2 KiB230199

go.modH A D01-Apr-2019340 1411

go.sumH A D01-Apr-20193.3 KiB3837

interface.goH A D01-Apr-20199.7 KiB22479

mock_ack_frame_source_test.goH A D01-Apr-20191.6 KiB5132

mock_crypto_data_handler_test.goH A D01-Apr-20191.6 KiB5031

mock_crypto_stream_test.goH A D01-Apr-20193.9 KiB12283

mock_frame_source_test.goH A D01-Apr-20192.3 KiB6643

mock_multiplexer_test.goH A D01-Apr-20192 KiB6542

mock_packer_test.goH A D01-Apr-20194.8 KiB13592

mock_packet_handler_manager_test.goH A D01-Apr-20195.4 KiB14897

mock_packet_handler_test.goH A D01-Apr-20192.8 KiB8857

mock_quic_session_test.goH A D01-Apr-201910 KiB305214

mock_receive_stream_internal_test.goH A D01-Apr-20195.1 KiB147100

mock_sealing_manager_test.goH A D01-Apr-20192.3 KiB6744

mock_send_stream_internal_test.goH A D01-Apr-20196.3 KiB187128

mock_session_runner_test.goH A D01-Apr-20193.3 KiB9661

mock_stream_getter_test.goH A D01-Apr-20192.2 KiB6643

mock_stream_internal_test.goH A D01-Apr-20199.6 KiB284197

mock_stream_manager_test.goH A D01-Apr-20197.6 KiB212149

mock_stream_sender_test.goH A D01-Apr-20192.5 KiB7346

mock_unknown_packet_handler_test.goH A D01-Apr-20192.1 KiB6138

mock_unpacker_test.goH A D01-Apr-20191.4 KiB5132

mockgen.goH A D01-Apr-20192.3 KiB221

mockgen_private.shH A D01-Apr-20191.1 KiB2911

multiplexer.goH A D01-Apr-20192.2 KiB9072

multiplexer_test.goH A D01-Apr-20191 KiB3126

packet_handler_map.goH A D01-Apr-20196.8 KiB275226

packet_handler_map_test.goH A D01-Apr-201910.7 KiB314271

packet_packer.goH A D01-Apr-201914.9 KiB492399

packet_packer_test.goH A D01-Apr-201942.9 KiB910836

packet_unpacker.goH A D01-Apr-20192.9 KiB10381

packet_unpacker_test.goH A D01-Apr-20197.1 KiB185169

quic_suite_test.goH A D01-Apr-2019374 2518

receive_stream.goH A D01-Apr-20198 KiB325268

receive_stream_test.goH A D01-Apr-201920.8 KiB626573

send_stream.goH A D01-Apr-20198.6 KiB333275

send_stream_test.goH A D01-Apr-201922.5 KiB662599

server.goH A D01-Apr-201916.5 KiB559467

server_test.goH A D01-Apr-201919 KiB593532

session.goH A D01-Apr-201938 KiB1,2881,065

session_test.goH A D01-Apr-201961.1 KiB1,6841,519

stream.goH A D01-Apr-20194.8 KiB164118

stream_test.goH A D01-Apr-20192.9 KiB9778

streams_map.goH A D01-Apr-20196 KiB193165

streams_map_generic_helper.goH A D01-Apr-2019467 1810

streams_map_incoming_bidi.goH A D01-Apr-20194.7 KiB163127

streams_map_incoming_generic.goH A D01-Apr-20194.8 KiB161127

streams_map_incoming_generic_test.goH A D01-Apr-20197.3 KiB224194

streams_map_incoming_uni.goH A D01-Apr-20194.8 KiB163127

streams_map_outgoing_bidi.goH A D01-Apr-20193.6 KiB148124

streams_map_outgoing_generic.goH A D01-Apr-20193.6 KiB146124

streams_map_outgoing_generic_test.goH A D01-Apr-20196.2 KiB202174

streams_map_outgoing_uni.goH A D01-Apr-20193.6 KiB148124

streams_map_test.goH A D01-Apr-201914.6 KiB423370

window_update_queue.goH A D01-Apr-20191.8 KiB7260

window_update_queue_test.goH A D01-Apr-20193 KiB9180

README.md

1# A QUIC implementation in pure Go
2
3<img src="docs/quic.png" width=303 height=124>
4
5[![Godoc Reference](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/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](https://en.wikipedia.org/wiki/QUIC) protocol in Go. It roughly implements the [IETF QUIC draft](https://github.com/quicwg/base-drafts), although we don't fully support any of the draft versions at the moment.
12
13## Version compatibility
14
15Since quic-go is under active development, there's no guarantee that two builds of different commits are interoperable. The QUIC version used in the *master* branch is just a placeholder, and should not be considered stable.
16
17If you want to use quic-go as a library in other projects, please consider using a [tagged release](https://github.com/lucas-clemente/quic-go/releases). These releases expose [experimental QUIC versions](https://github.com/quicwg/base-drafts/wiki/QUIC-Versions), which are guaranteed to be stable.
18
19## Google QUIC
20
21quic-go used to support both the QUIC versions supported by Google Chrome and QUIC as deployed on Google's servers, as well as IETF QUIC. Due to the divergence of the two protocols, we decided to not support both versions any more.
22
23The *master* branch **only** supports IETF QUIC. For Google QUIC support, please refer to the [gquic branch](https://github.com/lucas-clemente/quic-go/tree/gquic).
24
25## Guides
26
27We currently support Go 1.12+.
28
29Installing and updating dependencies:
30
31    go get -t -u ./...
32
33Running tests:
34
35    go test ./...
36
37### HTTP mapping
38
39We're currently not implementing the HTTP mapping as described in the [QUIC over HTTP draft](https://quicwg.org/base-drafts/draft-ietf-quic-http.html). The HTTP mapping here is a leftover from Google QUIC.
40
41### QUIC without HTTP/2
42
43Take a look at [this echo example](example/echo/echo.go).
44
45## Usage
46
47### As a server
48
49See the [example server](example/main.go). Starting a QUIC server is very similar to the standard lib http in go:
50
51```go
52http.Handle("/", http.FileServer(http.Dir(wwwDir)))
53h2quic.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)
54```
55
56### As a client
57
58See the [example client](example/client/main.go). Use a `h2quic.RoundTripper` as a `Transport` in a `http.Client`.
59
60```go
61http.Client{
62  Transport: &h2quic.RoundTripper{},
63}
64```
65
66## Contributing
67
68We 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.
69