You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Adam Stankiewicz 1ed6f0baf3 Move vendor directory at top level 9 years ago
..
ackhandler Move vendor directory at top level 9 years ago
congestion Move vendor directory at top level 9 years ago
crypto Move vendor directory at top level 9 years ago
flowcontrol Move vendor directory at top level 9 years ago
frames Move vendor directory at top level 9 years ago
h2quic Move vendor directory at top level 9 years ago
handshake Move vendor directory at top level 9 years ago
protocol Move vendor directory at top level 9 years ago
qerr Move vendor directory at top level 9 years ago
utils Move vendor directory at top level 9 years ago
LICENSE Move vendor directory at top level 9 years ago
README.md Move vendor directory at top level 9 years ago
appveyor.yml Move vendor directory at top level 9 years ago
buffer_pool.go Move vendor directory at top level 9 years ago
client.go Move vendor directory at top level 9 years ago
codecov.yml Move vendor directory at top level 9 years ago
packet_number_generator.go Move vendor directory at top level 9 years ago
packet_packer.go Move vendor directory at top level 9 years ago
packet_unpacker.go Move vendor directory at top level 9 years ago
public_header.go Move vendor directory at top level 9 years ago
public_reset.go Move vendor directory at top level 9 years ago
server.go Move vendor directory at top level 9 years ago
session.go Move vendor directory at top level 9 years ago
stream.go Move vendor directory at top level 9 years ago
stream_frame_sorter.go Move vendor directory at top level 9 years ago
stream_framer.go Move vendor directory at top level 9 years ago
streams_map.go Move vendor directory at top level 9 years ago
udp_conn.go Move vendor directory at top level 9 years ago
unpacked_packet.go Move vendor directory at top level 9 years ago

README.md

A QUIC server implementation in pure Go

Godoc Reference Linux Build Status Windows Build Status Code Coverage

quic-go is an implementation of the QUIC protocol in Go. While we're not far from being feature complete, there's still work to do regarding performance and security. At the moment, we do not recommend use in production systems. We appreciate any feedback :)

Roadmap

Done:

  • Basic protocol with support for QUIC version 34-36
  • QUIC client
  • HTTP/2 support
  • Crypto (RSA / ECDSA certificates, Curve25519 for key exchange, AES-GCM or Chacha20-Poly1305 as stream cipher)
  • Loss detection and retransmission (currently fast retransmission & RTO)
  • Flow Control
  • Congestion control using cubic

Major TODOs:

  • Security, especially DoS protections
  • Performance
  • Better packet loss detection
  • Connection migration

Guides

Installing deps:

go get -t

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

Using the example client

go run example/client/main.go https://quic.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 QuicRoundTripper as a Transport in a http.Client.

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

Building on Windows

Due to the low Windows timer resolution (see StackOverflow question) available with Go 1.6.x, some optimizations might not work when compiled with this version of the compiler. Please use Go 1.7 on Windows.