Skip to content
A QUIC implementation in pure go
Go Other
  1. Go 99.6%
  2. Other 0.4%
Branch: master
Clone or download
marten-seemann Merge pull request #2307 from lucas-clemente/packet-handler-destroy
rename packetHandlerMap.Close() to Destroy()
Latest commit fe026a3 Jan 24, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci add a client and server implementation for the interop test runner Oct 23, 2019
.travis update Fuzzit binary Sep 12, 2019
benchmark remove the testlog package Nov 30, 2019
docs add gopher-logo May 3, 2016
example use log.Fatal() instead of panic() in example client and server Jan 8, 2020
fuzzing implement the Retry integrity tag Jan 17, 2020
http3 set remote address on http request Jan 14, 2020
integrationtests Merge pull request #2226 from lucas-clemente/retry-integrity Jan 17, 2020
internal Merge pull request #2305 from lucas-clemente/update-retry-key Jan 24, 2020
interop add support for the multiconnect interop test case Jan 16, 2020
quictrace add the stylecheck linter Sep 17, 2019
.editorconfig add editorconfig Apr 15, 2016
.gitignore add .gitignore entries for fuzzing Aug 24, 2019
.golangci.yml implement a ClientSessionCache that can save application data Jan 1, 2020
.travis.yml update GolangCI-Lint to v1.18.0 Sep 17, 2019
Changelog.md add a Changelog entry for 0-RTT support Jan 1, 2020
LICENSE add Google to license file Dec 14, 2016
README.md deprecate gQUIC support Oct 23, 2019
appveyor.yml increase the TIMESCALE factor on AppVeyor Jan 3, 2020
buffer_pool.go fix packet buffer usage when handling coalesced packets Mar 5, 2019
buffer_pool_test.go fix packet buffer usage when handling coalesced packets Mar 5, 2019
client.go rename packetHandlerMap.Close() to Destroy() Jan 22, 2020
client_test.go rename packetHandlerMap.Close() to Destroy() Jan 22, 2020
closed_session.go replace closed sessions in the packet handler map Nov 2, 2019
closed_session_test.go use a mock connection in the closedSession tests Jan 17, 2020
codecov.yml implement a basic store for new connection IDs Nov 5, 2019
conn.go add a LocalAddr to the Session Mar 9, 2017
conn_id_generator.go count the connection ID used during the handshake towards the limit Dec 3, 2019
conn_id_generator_test.go count the connection ID used during the handshake towards the limit Dec 3, 2019
conn_id_manager.go
conn_id_manager_test.go enforce the active_connection_id_limit Dec 3, 2019
conn_test.go identify connections by their local addr when adding to the multiplexer Sep 3, 2019
crypto_stream.go Merge pull request #2235 from lucas-clemente/crypto-buffer-exceeded Nov 24, 2019
crypto_stream_manager.go process the NewSessionTicket TLS message Apr 1, 2019
crypto_stream_manager_test.go process the NewSessionTicket TLS message Apr 1, 2019
crypto_stream_test.go Merge pull request #2235 from lucas-clemente/crypto-buffer-exceeded Nov 24, 2019
frame_sorter.go add the stylecheck linter Sep 17, 2019
frame_sorter_test.go add the stylecheck linter Sep 17, 2019
framer.go return ackhandler.Frames from sendStream.popStreamFrame Aug 31, 2019
framer_test.go return ackhandler.Frames from sendStream.popStreamFrame Aug 31, 2019
go.mod check that transport params didn't change when accepting Dec 30, 2019
go.sum check that transport params didn't change when accepting Dec 30, 2019
interface.go use the minimum of the two peers' max_idle_timeouts Dec 11, 2019
mock_ack_frame_source_test.go run go generate ./... Mar 5, 2019
mock_connection_test.go use a mock connection in the session tests Jan 17, 2020
mock_crypto_data_handler_test.go run go generate ./... Mar 5, 2019
mock_crypto_stream_test.go run go generate ./... Mar 5, 2019
mock_frame_source_test.go assemble ackhandler.Frames, not wire.Frames, when packing a packet Aug 31, 2019
mock_multiplexer_test.go implement sending of stateless resets Mar 8, 2019
mock_packer_test.go implement a function to pack probe packets Nov 12, 2019
mock_packet_handler_manager_test.go rename packetHandlerMap.Close() to Destroy() Jan 22, 2020
mock_packet_handler_test.go run go generate ./... Mar 5, 2019
mock_quic_session_test.go remove unneeded closeRemote() method on the quicSession interface Jan 23, 2020
mock_receive_stream_internal_test.go run go generate ./... Mar 5, 2019
mock_sealing_manager_test.go implement unpacking of 0-RTT packets Dec 30, 2019
mock_send_stream_internal_test.go return ackhandler.Frames from sendStream.popStreamFrame Aug 31, 2019
mock_session_runner_test.go move initialization of the client's transport parameters to the session Nov 5, 2019
mock_stream_getter_test.go run go generate ./... Mar 5, 2019
mock_stream_internal_test.go return ackhandler.Frames from sendStream.popStreamFrame Aug 31, 2019
mock_stream_manager_test.go add a context to Session.Open{Uni}StreamSync Jun 22, 2019
mock_stream_sender_test.go run go generate ./... Mar 5, 2019
mock_token_store_test.go add the TokenStore to the quic.Config, store received tokens Aug 13, 2019
mock_unknown_packet_handler_test.go fix race condition when closing the server after a Read failed May 10, 2019
mock_unpacker_test.go pass the time a packet was received to the short header opener Aug 11, 2019
mockgen.go use a mock connection in the session tests Jan 17, 2020
mockgen_private.sh move the mockgen cleanup commands to the mockgen script Aug 11, 2018
multiplexer.go add network to multiplexer index Oct 1, 2019
multiplexer_test.go identify connections by their local addr when adding to the multiplexer Sep 3, 2019
packet_handler_map.go rename packetHandlerMap.Close() to Destroy() Jan 22, 2020
packet_handler_map_test.go rename packetHandlerMap.Close() to Destroy() Jan 22, 2020
packet_packer.go
packet_packer_test.go implement packing of 0-RTT packets Jan 1, 2020
packet_unpacker.go implement unpacking of 0-RTT packets Dec 30, 2019
packet_unpacker_test.go implement unpacking of 0-RTT packets Dec 30, 2019
quic_suite_test.go replace closed sessions in the packet handler map Nov 2, 2019
receive_stream.go simplify onStreamCompleted in the receiveStream Nov 9, 2019
receive_stream_test.go fix handling of RESET_STREAM frames after receiving the final offset Nov 9, 2019
retransmission_queue.go queue lost STREAM frames in the stream's retransmission queue Aug 31, 2019
retransmission_queue_test.go queue lost STREAM frames in the stream's retransmission queue Aug 31, 2019
send_queue.go implement a send queue to send packet asynchronously Aug 24, 2019
send_queue_test.go use a mock connection in the send queue tests Jan 17, 2020
send_stream.go cancel the stream context as early as possible Oct 30, 2019
send_stream_test.go add the stylecheck linter Sep 17, 2019
server.go Merge pull request #2307 from lucas-clemente/packet-handler-destroy Jan 24, 2020
server_test.go Merge pull request #2226 from lucas-clemente/retry-integrity Jan 17, 2020
session.go update the name of the disable_active_migration transport parameter Jan 21, 2020
session_test.go Merge pull request #2293 from lucas-clemente/mock-connection Jan 17, 2020
stream.go return ackhandler.Frames from sendStream.popStreamFrame Aug 31, 2019
stream_test.go drop support for gQUIC Oct 30, 2018
streams_map.go Merge pull request #2209 from lucas-clemente/stream-count-errors Nov 9, 2019
streams_map_generic_helper.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_incoming_bidi.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_incoming_generic.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_incoming_generic_test.go make the stream deletion error message more specific Nov 8, 2019
streams_map_incoming_uni.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_outgoing_bidi.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_outgoing_generic.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_outgoing_generic_test.go make the stream deletion error message more specific Nov 8, 2019
streams_map_outgoing_uni.go remove nolint commands that show up in GoDoc Nov 16, 2019
streams_map_test.go Merge pull request #2209 from lucas-clemente/stream-count-errors Nov 9, 2019
token_store.go define a quic.TokenStore interface and provide a LRU implementation Aug 13, 2019
token_store_test.go define a quic.TokenStore interface and provide a LRU implementation Aug 13, 2019
window_update_queue.go never increase the flow control limit for the crypto stream Sep 19, 2018
window_update_queue_test.go never increase the flow control limit for the crypto stream Sep 19, 2018

README.md

A QUIC implementation in pure Go

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

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.

Guides

We currently support Go 1.13+, with Go modules support enabled.

Installing and updating dependencies:

go get -u ./...

Running tests:

go test ./...

QUIC without HTTP/3

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)))
http3.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)

As a client

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

http.Client{
  Transport: &http3.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.

You can’t perform that action at this time.