jason 075d766964 first 3 anos atrás
..
.circleci 075d766964 first 3 anos atrás
.travis 075d766964 first 3 anos atrás
benchmark 075d766964 first 3 anos atrás
docs 075d766964 first 3 anos atrás
example 075d766964 first 3 anos atrás
h2quic 075d766964 first 3 anos atrás
integrationtests 075d766964 first 3 anos atrás
internal 075d766964 first 3 anos atrás
.editorconfig 075d766964 first 3 anos atrás
.gitignore 075d766964 first 3 anos atrás
.golangci.yml 075d766964 first 3 anos atrás
.travis.yml 075d766964 first 3 anos atrás
Changelog.md 075d766964 first 3 anos atrás
LICENSE 075d766964 first 3 anos atrás
README.md 075d766964 first 3 anos atrás
appveyor.yml 075d766964 first 3 anos atrás
buffer_pool.go 075d766964 first 3 anos atrás
buffer_pool_test.go 075d766964 first 3 anos atrás
client.go 075d766964 first 3 anos atrás
client_test.go 075d766964 first 3 anos atrás
codecov.yml 075d766964 first 3 anos atrás
conn.go 075d766964 first 3 anos atrás
conn_test.go 075d766964 first 3 anos atrás
crypto_stream.go 075d766964 first 3 anos atrás
crypto_stream_manager.go 075d766964 first 3 anos atrás
crypto_stream_manager_test.go 075d766964 first 3 anos atrás
crypto_stream_test.go 075d766964 first 3 anos atrás
frame_sorter.go 075d766964 first 3 anos atrás
frame_sorter_test.go 075d766964 first 3 anos atrás
framer.go 075d766964 first 3 anos atrás
framer_test.go 075d766964 first 3 anos atrás
go.mod 075d766964 first 3 anos atrás
go.sum 075d766964 first 3 anos atrás
interface.go 075d766964 first 3 anos atrás
mock_ack_frame_source_test.go 075d766964 first 3 anos atrás
mock_crypto_data_handler_test.go 075d766964 first 3 anos atrás
mock_crypto_stream_test.go 075d766964 first 3 anos atrás
mock_frame_source_test.go 075d766964 first 3 anos atrás
mock_multiplexer_test.go 075d766964 first 3 anos atrás
mock_packer_test.go 075d766964 first 3 anos atrás
mock_packet_handler_manager_test.go 075d766964 first 3 anos atrás
mock_packet_handler_test.go 075d766964 first 3 anos atrás
mock_quic_session_test.go 075d766964 first 3 anos atrás
mock_receive_stream_internal_test.go 075d766964 first 3 anos atrás
mock_sealing_manager_test.go 075d766964 first 3 anos atrás
mock_send_stream_internal_test.go 075d766964 first 3 anos atrás
mock_session_runner_test.go 075d766964 first 3 anos atrás
mock_stream_getter_test.go 075d766964 first 3 anos atrás
mock_stream_internal_test.go 075d766964 first 3 anos atrás
mock_stream_manager_test.go 075d766964 first 3 anos atrás
mock_stream_sender_test.go 075d766964 first 3 anos atrás
mock_unknown_packet_handler_test.go 075d766964 first 3 anos atrás
mock_unpacker_test.go 075d766964 first 3 anos atrás
mockgen.go 075d766964 first 3 anos atrás
mockgen_private.sh 075d766964 first 3 anos atrás
multiplexer.go 075d766964 first 3 anos atrás
multiplexer_test.go 075d766964 first 3 anos atrás
packet_handler_map.go 075d766964 first 3 anos atrás
packet_handler_map_test.go 075d766964 first 3 anos atrás
packet_packer.go 075d766964 first 3 anos atrás
packet_packer_test.go 075d766964 first 3 anos atrás
packet_unpacker.go 075d766964 first 3 anos atrás
packet_unpacker_test.go 075d766964 first 3 anos atrás
quic_suite_test.go 075d766964 first 3 anos atrás
receive_stream.go 075d766964 first 3 anos atrás
receive_stream_test.go 075d766964 first 3 anos atrás
send_stream.go 075d766964 first 3 anos atrás
send_stream_test.go 075d766964 first 3 anos atrás
server.go 075d766964 first 3 anos atrás
server_test.go 075d766964 first 3 anos atrás
session.go 075d766964 first 3 anos atrás
session_test.go 075d766964 first 3 anos atrás
stream.go 075d766964 first 3 anos atrás
stream_test.go 075d766964 first 3 anos atrás
streams_map.go 075d766964 first 3 anos atrás
streams_map_generic_helper.go 075d766964 first 3 anos atrás
streams_map_incoming_bidi.go 075d766964 first 3 anos atrás
streams_map_incoming_generic.go 075d766964 first 3 anos atrás
streams_map_incoming_generic_test.go 075d766964 first 3 anos atrás
streams_map_incoming_uni.go 075d766964 first 3 anos atrás
streams_map_outgoing_bidi.go 075d766964 first 3 anos atrás
streams_map_outgoing_generic.go 075d766964 first 3 anos atrás
streams_map_outgoing_generic_test.go 075d766964 first 3 anos atrás
streams_map_outgoing_uni.go 075d766964 first 3 anos atrás
streams_map_test.go 075d766964 first 3 anos atrás
window_update_queue.go 075d766964 first 3 anos atrás
window_update_queue_test.go 075d766964 first 3 anos atrás

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. It roughly implements the IETF QUIC draft, although we don't fully support any of the draft versions at the moment.

Version compatibility

Since 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.

If you want to use quic-go as a library in other projects, please consider using a tagged release. These releases expose experimental QUIC versions, which are guaranteed to be stable.

Google QUIC

quic-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.

The master branch only supports IETF QUIC. For Google QUIC support, please refer to the gquic branch.

Guides

We currently support Go 1.12+.

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

HTTP mapping

We're currently not implementing the HTTP mapping as described in the QUIC over HTTP draft. The HTTP mapping here is a leftover from Google QUIC.

QUIC without HTTP/2

Take a look at this echo example.

Usage

As a server

See the example server. 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.