Darien Raymond 3335f77c70 implement header and auth for quic %!s(int64=7) %!d(string=hai) anos
..
docs 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
h2quic 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
internal 3335f77c70 implement header and auth for quic %!s(int64=7) %!d(string=hai) anos
qerr 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
vendor 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
Changelog.md 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
LICENSE 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
README.md 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
appveyor.yml 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
buffer_pool.go e99dd29946 update putPacketBuffer %!s(int64=7) %!d(string=hai) anos
client.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
codecov.yml 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
conn.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
crypto_stream.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
frame_sorter.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
interface.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
mint_utils.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
mockgen.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
mockgen_private.sh 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
multiplexer.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
packet_handler_map.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
packet_number_generator.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
packet_packer.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
packet_unpacker.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
receive_stream.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
send_stream.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
server.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
server_session.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
server_tls.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
session.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
stream.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
stream_framer.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_generic_helper.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_incoming_bidi.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_incoming_generic.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_incoming_uni.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_legacy.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_outgoing_bidi.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_outgoing_generic.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
streams_map_outgoing_uni.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos
window_update_queue.go 14c2d415d2 update vendor directory %!s(int64=7) %!d(string=hai) anos

README.md

A QUIC implementation in pure Go

Godoc Reference Travis Build Status CircleCI Build Status Windows Build Status Code Coverage

quic-go is an implementation of the QUIC protocol in Go.

Roadmap

quic-go is compatible with the current version(s) of Google Chrome and QUIC as deployed on Google's servers. We're actively tracking the development of the Chrome code to ensure compatibility as the protocol evolves. In that process, we're dropping support for old QUIC versions. As Google's QUIC versions are expected to converge towards the IETF QUIC draft, quic-go will eventually implement that draft.

Guides

We currently support Go 1.9+.

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

Running the example server

go run example/main.go -www /var/www/

Using the quic_client from chromium:

quic_client --host=127.0.0.1 --port=6121 --v=1 https://quic.clemente.io

Using Chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --no-proxy-server --enable-quic --origin-to-force-quic-on=quic.clemente.io:443 --host-resolver-rules='MAP quic.clemente.io:443 127.0.0.1:6121' https://quic.clemente.io

QUIC without HTTP/2

Take a look at this echo example.

Using the example client

go run example/client/main.go https://clemente.io

Usage

As a server

See the example server or try out Caddy (from version 0.9, instructions here). Starting a QUIC server is very similar to the standard lib http in go:

http.Handle("/", http.FileServer(http.Dir(wwwDir)))
h2quic.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)

As a client

See the example client. Use a h2quic.RoundTripper as a Transport in a http.Client.

http.Client{
  Transport: &h2quic.RoundTripper{},
}

Contributing

We 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. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.