MCPcopy Create free account
hub / github.com/devsisters/libquic

github.com/devsisters/libquic @v0.0.3-6e3a05d

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.0.3-6e3a05d ↗ · + Follow
11,265 symbols 29,875 edges 1,098 files 1,621 documented · 14% updated 3y agov0.0.3-6e3a05d · 2016-03-11★ 1,83415 open issues

Browse by type

Functions 9,545 Types & classes 1,720
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

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 chnages,

  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 ./manage.py sync --without-patches <CHROMIUM_GIT_ROOT> All necessary files will be updated to new ones without patches applied.
  5. Temporarily commit here.
  6. Do ./manage.py sync <CHROMIUM_GIT_ROOT> 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

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 5,783
Method 3,762
Class 1,480
Enum 144
Struct 76
TypeAlias 12
Interface 8

Languages

C++61%
C34%
Go4%
Python1%

Modules by API surface

boringssl/ssl/ssl_lib.c228 symbols
src/net/quic/quic_connection.cc146 symbols
src/net/spdy/spdy_framer.cc116 symbols
boringssl/ssl/t1_lib.c103 symbols
boringssl/include/openssl/base.h91 symbols
src/net/quic/quic_framer.cc81 symbols
src/base/values.cc79 symbols
src/crypto/nss_util.cc78 symbols
boringssl/crypto/x509/x_all.c78 symbols
boringssl/crypto/x509/x509_vfy.c72 symbols
src/net/spdy/spdy_protocol.h71 symbols
src/net/quic/quic_config.cc69 symbols

For agents

$ claude mcp add libquic \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page