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.
 
 
rui.zheng f31949d1ed update vendor 10 years ago
..
ackhandler update quic-go 10 years ago
congestion add vendor 10 years ago
crypto update vendor 10 years ago
flowcontrol update quic-go 10 years ago
frames update quic-go 10 years ago
h2quic update quic-go 10 years ago
handshake update quic-go 10 years ago
protocol update quic-go 10 years ago
qerr add vendor 10 years ago
utils update quic-go 10 years ago
LICENSE update quic-go 10 years ago
README.md update quic-go 10 years ago
appveyor.yml update quic-go 10 years ago
buffer_pool.go add vendor 10 years ago
client.go update quic-go 10 years ago
codecov.yml update quic-go 10 years ago
packet_number_generator.go add vendor 10 years ago
packet_packer.go update quic-go 10 years ago
packet_unpacker.go update quic-go 10 years ago
public_header.go update quic-go 10 years ago
public_reset.go update quic-go 10 years ago
server.go update quic-go 10 years ago
session.go update quic-go 10 years ago
stream.go update quic-go 10 years ago
stream_frame_sorter.go add vendor 10 years ago
stream_framer.go update quic-go 10 years ago
streams_map.go update quic-go 10 years ago
udp_conn.go update quic-go 10 years ago
unpacked_packet.go update quic-go 10 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.