All Projects → litespeedtech → Lsquic

litespeedtech / Lsquic

Licence: other
LiteSpeed QUIC and HTTP/3 Library

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Lsquic

Ngtcp2
ngtcp2 project is an effort to implement IETF QUIC protocol
Stars: ✭ 589 (-18.98%)
Mutual labels:  protocol, udp, quic
Kcp
⚡ KCP - A Fast and Reliable ARQ Protocol
Stars: ✭ 10,473 (+1340.58%)
Mutual labels:  udp, protocol, quic
xquic
XQUIC Library released by Alibaba is a cross-platform implementation of QUIC and HTTP/3 protocol.
Stars: ✭ 943 (+29.71%)
Mutual labels:  protocol, quic, tls13
Quic.net
A .NET C# Implementation of QUIC protocol - Google's experimental transport layer.
Stars: ✭ 173 (-76.2%)
Mutual labels:  protocol, udp, quic
doq-proxy
DNS-over-QUIC to UDP Proxy
Stars: ✭ 57 (-92.16%)
Mutual labels:  udp, quic
moss
Reliable and Fast UDP Connections
Stars: ✭ 37 (-94.91%)
Mutual labels:  udp, quic
Dhcpwn
All your IPs are belong to us.
Stars: ✭ 642 (-11.69%)
Mutual labels:  protocol, udp
gost
GO Simple Tunnel - a simple tunnel written in golang
Stars: ✭ 8,395 (+1054.75%)
Mutual labels:  udp, quic
node-drivers
Industrial protocol drivers in node.js
Stars: ✭ 20 (-97.25%)
Mutual labels:  udp, protocol
rmnp
Realtime Multiplayer Networking Protocol
Stars: ✭ 41 (-94.36%)
Mutual labels:  udp, protocol
STUP-Protocol
Secure/Speedup TCP-like UDP protocol
Stars: ✭ 12 (-98.35%)
Mutual labels:  udp, protocol
Quic Go
A QUIC implementation in pure go
Stars: ✭ 6,085 (+737%)
Mutual labels:  protocol, quic
net-protocol
golang模拟内核协议栈 实现链路层、网络层、传输层、应用层 用户态协议栈 ,基于虚拟网卡TUN/TAP
Stars: ✭ 129 (-82.26%)
Mutual labels:  udp, protocol
mocket
Reliable UDP server client for flaky networks
Stars: ✭ 21 (-97.11%)
Mutual labels:  udp, quic
quic-py
QUIC protocol implementation in python
Stars: ✭ 38 (-94.77%)
Mutual labels:  udp, quic
Enet Csharp
Reliable UDP networking library
Stars: ✭ 464 (-36.18%)
Mutual labels:  protocol, udp
Reliable
A packet acknowledgement system for UDP
Stars: ✭ 446 (-38.65%)
Mutual labels:  protocol, udp
Quiche
🥧 Savoury implementation of the QUIC transport protocol and HTTP/3
Stars: ✭ 5,481 (+653.92%)
Mutual labels:  protocol, quic
Socket-Programming-With-C
✉️ Learn Network Protocol and Network Programming
Stars: ✭ 147 (-79.78%)
Mutual labels:  udp, protocol
laminar
A simple semi-reliable UDP protocol for multiplayer games
Stars: ✭ 717 (-1.38%)
Mutual labels:  udp, protocol

Linux and MacOS build status Windows build status FreeBSD build status Documentation Status

LiteSpeed QUIC (LSQUIC) Library README

Description

LiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC and HTTP/3 functionality for servers and clients. Most of the code in this distribution is used in our own products: LiteSpeed Web Server, LiteSpeed ADC, and OpenLiteSpeed.

Currently supported QUIC versions are v1 (disabled by default until the QUIC RFC is released); Internet-Draft versions 34, 29, and 27; and the older "Google" QUIC versions Q043, Q046, an Q050.

Documentation

Documentation is available at https://lsquic.readthedocs.io/en/latest/.

In addition, see example programs for API usage and EXAMPLES.txt for some compilation and run-time options.

Requirements

To build LSQUIC, you need CMake, zlib, and BoringSSL. The example program uses libevent to provide the event loop.

Building BoringSSL

BoringSSL is not packaged; you have to build it yourself. The process is straightforward. You will need go installed.

  1. Clone BoringSSL by issuing the following command:
git clone https://boringssl.googlesource.com/boringssl
cd boringssl

You may need to install pre-requisites like zlib and libevent.

  1. Use specific BoringSSL version
git checkout a2278d4d2cabe73f6663e3299ea7808edfa306b9
  1. Compile the library
cmake . &&  make

Remember where BoringSSL sources are:

BORINGSSL=$PWD

If you want to turn on optimizations, do

cmake -DCMAKE_BUILD_TYPE=Release . && make

If you want to build as a library, (necessary to build lsquic itself as as shared library) do:

cmake -DBUILD_SHARED_LIBS=1 . && make

Building LSQUIC Library

LSQUIC's http_client, http_server, and the tests link BoringSSL libraries statically. Following previous section, you can build LSQUIC as follows:

  1. Get the source code
git clone https://github.com/litespeedtech/lsquic.git
cd lsquic
git submodule init
git submodule update
  1. Compile the library

Statically:

# $BORINGSSL is the top-level BoringSSL directory from the previous step
cmake -DBORINGSSL_DIR=$BORINGSSL .
make

As a dynamic library:

cmake -DLSQUIC_SHARED_LIB=1 -DBORINGSSL_DIR=$BORINGSSL .
make
  1. Run tests
make test

Building with Docker

The library and the example client and server can be built with Docker.

Initialize Git submodules:

cd lsquic
git submodule init
git submodule update

Build the Docker image:

docker build -t lsquic .

Then you can use the examples from the command line. For example:

sudo docker run -it --rm lsquic http_client -s www.google.com  -p / -o version=Q046
sudo docker run -p 12345:12345/udp -v /path/to/certs:/mnt/certs -it --rm lsquic http_server -c www.example.com,/mnt/certs/chain,/mnt/certs/key

Platforms

The library has been tested on the following platforms:

  • Linux
    • i386
    • x86_64
    • ARM (Raspberry Pi 3)
  • FreeBSD
    • i386
  • MacOS
    • x86_64
  • Android
    • ARM
  • Windows
    • x86_64

Get Involved

Do not hesitate to report bugs back to us. Even better, send us fixes and improvements!

Have fun,

LiteSpeed QUIC Team.

Copyright (c) 2017 - 2021 LiteSpeed Technologies Inc

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].