• Stars
    star
    1,714
  • Rank 27,227 (Top 0.6 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created almost 10 years ago
  • Updated about 2 years 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,467
star
2

goquic

QUIC support for Go
C
940
star
3

pointer-network-tensorflow

TensorFlow implementation of "Pointer Networks"
Python
469
star
4

shardcake

Sharding and location transparency for Scala
Scala
388
star
5

eclair

Simple ssh tool for Amazon EC2
Ruby
122
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#
25
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

zio-agones

Lightweight Scala client for Agones SDK using ZIO
Scala
9
star
18

web-packages

devsisters internal npm packages
TypeScript
7
star
19

UnityLuaREPL

C#
7
star
20

go-applereceipt

Apple-issued receipts parser & verifier, without any external API call
Go
7
star
21

multi-speaker-tacotron-tensorflow

5
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

confluence-to-notion-converter

Confluence to Notion Archive Converter
C#
3
star
27

gatsby-starter-typescript-workspace

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

go-dyncapnp

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

JSONPointer.jl

implementation of JSONPointer on Julia
Julia
2
star
30

docker-nginx-sslproxy

Dockerized nginx proxy w/ SSL suppport
Shell
1
star
31

actions-runner-devsisters

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