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

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 --quic-version=32 --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

Usage

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)

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.