• Stars
    star
    1,714
  • Rank 26,102 (Top 0.6 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

QUIC, a multiplexed stream transport over UDP

QUIC, a multiplexed stream transport over UDP

QUIC is an experimental protocol aimed at reducing web latency over that of TCP. On the surface, QUIC is very similar to TCP+TLS+SPDY implemented on UDP. Because TCP is implemented in operating system kernels, and middlebox firmware, making significant changes to TCP is next to impossible. However, since QUIC is built on top of UDP, it suffers from no such limitations.

Key features of QUIC over existing TCP+TLS+SPDY include

  • Dramatically reduced connection establishment time
  • Improved congestion control
  • Multiplexing without head of line blocking
  • Forward error correction
  • Connection migration

See Chromium QUIC Page for detailed information.

libquic

This repository is sources and dependencies extracted from Chromium's QUIC Implementation with a few modifications and patches to minimize dependencies needed to build QUIC library.

Notable and only dependency is BoringSSL. The BoringSSL sources is already embedded in this repository and linked with CMake build file. You don't need any kind of dependency installs.

Language Bindings

This library is intended as an essential reference point for other language bindings and possibly for integration with other C/C++ codebase such as HTTP servers like Apache or nginx.

Currently there is only one experimental language binding:

Getting Started

How to build

Building with CMake and Ninja (Recommended):

$ mkdir build/
$ cd build/
$ cmake -GNinja ..
$ ninja

Building with CMake and Make:

$ mkdir build/
$ cd build/
$ cmake ..
$ make -j 4

make -j limits the number of simultaneously executed Recepies. Adapt this number to the capabilities of your build machine.

libquic.a library file will be generated. libssl.a, libcrypto.a will be located in build/boringssl directory.

To do release builds run $ cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. instead of $ cmake -GNinja ...

How to integrate

In order to integrate libquic to your code, your best source of documentation is official Chromium QUIC toy client and server. Golang binding will help too.

Syncing from Upstream

Great effort has been made to make syncing from upstream Chromium sources as effortless as possible. See DEPS file for all the dependencies. See manage.py script for actual syncing.

If you want to apply upstream changes,

  1. Clone & Checkout chromium upstream.
  2. Build QUIC server: cd out/Debug; ninja quic_server
  3. Update "chromium_revision" var at DEPS to your chromium source code revision.
  4. Do ./sync.py <CHROMIUM_GIT_ROOT> All necessary files will be updated to new ones without patches applied.
  5. Temporarily commit here.
  6. Do ./sync.py <CHROMIUM_GIT_ROOT>--patch All the patches will be applied. Some patches will be rejected.
  7. If there is any patch collision, manually apply the rejected patches. Open the *.rej files and carefully apply the rejected hunks manually.
  8. Try build, and you'll find that you may need to add additional modifications to make build successful. There may be added or deleted source files. Update CMakeLists.txt accordingly.
  9. If the build is successful, make a patch by: git diff src/ > patch/basepatch.patch (Make sure you don't include custom/ directory sources to the patch)
  10. Add patch file to DEPS or update existing patch files. Amend previous commit.
  11. Commit DEPS, new patch, and source changes

More Repositories

1

DQN-tensorflow

Tensorflow implementation of Human-Level Control through Deep Reinforcement Learning
Python
2,430
star
2

goquic

QUIC support for Go
C
940
star
3

pointer-network-tensorflow

TensorFlow implementation of "Pointer Networks"
Python
465
star
4

shardcake

Sharding and location transparency for Scala
Scala
358
star
5

eclair

Simple ssh tool for Amazon EC2
Ruby
121
star
6

neural-combinatorial-rl-tensorflow

in progress
Python
106
star
7

TCML-tensorflow

Tensorflow implementation of Meta-Learning with Temporal Convolutions
Python
98
star
8

checkpoint

Kubernetes policy checker
Rust
45
star
9

gospdyquic

SPDY/QUIC support for Go
38
star
10

quicbench

HTTP/QUIC load test and benchmark tool
Go
33
star
11

cine

Actor model for golang
Go
29
star
12

UnitySettings

Runtime debugging menu (like setting on Android) for Unity.
C#
28
star
13

UnityCLI

Unity TCP CLI communication for debugging
C#
24
star
14

go-caplit

Go caplit message deserializer
Go
17
star
15

king-openvpn

king-openvpn: The one VPN that connects to any network
HCL
11
star
16

ck-domain-logic-example

์Šค์นผ๋ผ ๊ฐœ๋ฐœ์ž MEET-UP! "์ˆœ์ˆ˜ํžˆ ์•„๋ฆ„๋‹ค์šด ์ฟ ํ‚ค๋Ÿฐ ํ‚น๋ค ๋„๋ฉ”์ธ ๋กœ์ง" ์„ธ์…˜ ๋ฐœํ‘œ ์ž๋ฃŒ์˜ ์˜ˆ์‹œ ์ฝ”๋“œ
Scala
10
star
17

web-packages

devsisters internal npm packages
TypeScript
7
star
18

UnityLuaREPL

C#
7
star
19

zio-agones

Lightweight Scala client for Agones SDK using ZIO
Scala
6
star
20

multi-speaker-tacotron-tensorflow

5
star
21

go-applereceipt

Apple-issued receipts parser & verifier, without any external API call
Go
4
star
22

XLSXasJSON.jl

Julia package that converts excel data to json
Julia
4
star
23

mars-addressables

https://packages.unity.com/com.unity.addressables/
C#
3
star
24

tarballize

Make tarballs of given git repository including its submodules.
Shell
3
star
25

docker-distccd

Dockerized distccd for easy distribution.
Makefile
3
star
26

gatsby-starter-typescript-workspace

A minimal GatsbyJS starter with TypeScript & pnpm workspace
CSS
3
star
27

confluence-to-notion-converter

Confluence to Notion Archive Converter
C#
3
star
28

JSONPointer.jl

implementation of JSONPointer on Julia
Julia
2
star
29

go-dyncapnp

Dynamic Cap'n'proto parsing & generating in Go
Go
2
star
30

docker-nginx-sslproxy

Dockerized nginx proxy w/ SSL suppport
Shell
1
star
31

mars-entities

https://packages.unity.com/com.unity.entities
C#
1
star
32

actions-runner-devsisters

Customized image for actions-runner-controller/actions-runner-controller
Dockerfile
1
star