gost_software/cmd/gost/vendor/github.com/lucas-clemente/quic-go
2017-01-09 11:48:37 +08:00
..
ackhandler add vendor 2017-01-09 11:48:37 +08:00
congestion add vendor 2017-01-09 11:48:37 +08:00
crypto add vendor 2017-01-09 11:48:37 +08:00
flowcontrol add vendor 2017-01-09 11:48:37 +08:00
frames add vendor 2017-01-09 11:48:37 +08:00
h2quic add vendor 2017-01-09 11:48:37 +08:00
handshake add vendor 2017-01-09 11:48:37 +08:00
protocol add vendor 2017-01-09 11:48:37 +08:00
qerr add vendor 2017-01-09 11:48:37 +08:00
utils add vendor 2017-01-09 11:48:37 +08:00
appveyor.yml add vendor 2017-01-09 11:48:37 +08:00
buffer_pool.go add vendor 2017-01-09 11:48:37 +08:00
codecov.yml add vendor 2017-01-09 11:48:37 +08:00
LICENSE add vendor 2017-01-09 11:48:37 +08:00
packet_number_generator.go add vendor 2017-01-09 11:48:37 +08:00
packet_packer.go add vendor 2017-01-09 11:48:37 +08:00
packet_unpacker.go add vendor 2017-01-09 11:48:37 +08:00
public_header.go add vendor 2017-01-09 11:48:37 +08:00
public_reset.go add vendor 2017-01-09 11:48:37 +08:00
README.md add vendor 2017-01-09 11:48:37 +08:00
server.go add vendor 2017-01-09 11:48:37 +08:00
session.go add vendor 2017-01-09 11:48:37 +08:00
stream_frame_sorter.go add vendor 2017-01-09 11:48:37 +08:00
stream_framer.go add vendor 2017-01-09 11:48:37 +08:00
stream.go add vendor 2017-01-09 11:48:37 +08:00
streams_map.go add vendor 2017-01-09 11:48:37 +08:00
udp_conn.go add vendor 2017-01-09 11:48:37 +08:00

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.