2021-02-12 14:41:35 +00:00
[![Linux and MacOS build status ](https://ci.appveyor.com/api/projects/status/x790ve5msewmva2b/branch/master?svg=true )](https://ci.appveyor.com/project/litespeedtech/lsquic-linux/branch/master)
[![Windows build status ](https://ci.appveyor.com/api/projects/status/ij4n3vy343pkgm1j/branch/master?svg=true )](https://ci.appveyor.com/project/litespeedtech/lsquic-windows/branch/master)
[![FreeBSD build status ](https://api.cirrus-ci.com/github/litespeedtech/lsquic.svg )](https://cirrus-ci.com/github/litespeedtech/lsquic)
2021-02-15 13:35:25 +00:00
[![Documentation Status ](https://readthedocs.org/projects/lsquic/badge/?version=latest )](https://lsquic.readthedocs.io/en/latest/?badge=latest)
2018-04-23 18:49:50 +00:00
2019-09-11 15:27:58 +00:00
LiteSpeed QUIC (LSQUIC) Library README
2017-09-22 21:00:03 +00:00
=============================================
Description
-----------
2019-09-11 15:27:58 +00:00
LiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC
2019-09-18 15:39:34 +00:00
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,
2020-10-21 13:05:26 +00:00
and OpenLiteSpeed.
2017-09-22 21:00:03 +00:00
2021-06-05 23:12:57 +00:00
Currently supported QUIC versions are v1, Internet-Draft versions 29, and 27;
2021-02-10 13:51:11 +00:00
and the older "Google" QUIC versions Q043, Q046, an Q050.
2017-09-22 21:00:03 +00:00
Documentation
-------------
2020-03-12 12:41:53 +00:00
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.
2017-09-22 21:00:03 +00:00
2017-09-26 15:26:05 +00:00
Requirements
------------
2017-09-22 21:00:03 +00:00
2017-09-26 15:26:05 +00:00
To build LSQUIC, you need CMake, zlib, and BoringSSL. The example program
uses libevent to provide the event loop.
2017-09-22 21:00:03 +00:00
2017-09-26 15:26:05 +00:00
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
```
2019-09-11 15:27:58 +00:00
You may need to install pre-requisites like zlib and libevent.
2017-09-26 15:26:05 +00:00
2019-09-16 13:09:08 +00:00
2. Use specific BoringSSL version
```
2021-02-10 13:51:11 +00:00
git checkout a2278d4d2cabe73f6663e3299ea7808edfa306b9
2019-09-16 13:09:08 +00:00
```
2019-10-08 19:54:01 +00:00
3. Compile the library
2017-09-26 15:26:05 +00:00
```
cmake . & & make
```
2019-02-01 07:24:29 +00:00
Remember where BoringSSL sources are:
2017-09-26 15:26:05 +00:00
```
2019-02-01 07:24:29 +00:00
BORINGSSL=$PWD
2017-09-26 15:26:05 +00:00
```
2019-02-01 07:24:29 +00:00
If you want to turn on optimizations, do
2017-09-26 15:26:05 +00:00
```
2019-02-01 07:24:29 +00:00
cmake -DCMAKE_BUILD_TYPE=Release . & & make
2017-09-26 15:26:05 +00:00
```
2020-09-28 15:56:05 +00:00
If you want to build as a library, (necessary to build lsquic itself
as as shared library) do:
```
cmake -DBUILD_SHARED_LIBS=1 . & & make
```
2019-09-11 15:27:58 +00:00
Building LSQUIC Library
-----------------------
2017-09-26 15:26:05 +00:00
2019-09-11 15:27:58 +00:00
LSQUIC's `http_client` , `http_server` , and the tests link BoringSSL
libraries statically. Following previous section, you can build LSQUIC
as follows:
2017-09-26 15:26:05 +00:00
2017-09-29 15:18:32 +00:00
1. Get the source code
```
2019-09-11 15:27:58 +00:00
git clone https://github.com/litespeedtech/lsquic.git
cd lsquic
git submodule init
git submodule update
2017-09-29 15:18:32 +00:00
```
2. Compile the library
2020-09-28 15:56:05 +00:00
Statically:
2017-09-29 15:18:32 +00:00
2017-09-26 15:26:05 +00:00
```
2019-02-01 07:24:29 +00:00
# $BORINGSSL is the top-level BoringSSL directory from the previous step
cmake -DBORINGSSL_DIR=$BORINGSSL .
2017-09-26 15:26:05 +00:00
make
```
2020-09-28 15:56:05 +00:00
As a dynamic library:
```
2020-09-25 18:09:10 +00:00
cmake -DLSQUIC_SHARED_LIB=1 -DBORINGSSL_DIR=$BORINGSSL .
2020-09-28 15:56:05 +00:00
make
```
2017-09-29 15:18:32 +00:00
3. Run tests
2017-09-26 15:26:05 +00:00
```
make test
```
2017-10-03 19:37:20 +00:00
Building with Docker
---------
2019-09-16 14:17:30 +00:00
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:
2017-10-03 19:37:20 +00:00
```
2019-09-11 15:27:58 +00:00
docker build -t lsquic .
2017-10-03 19:37:20 +00:00
```
2019-09-16 14:17:30 +00:00
Then you can use the examples from the command line. For example:
2017-10-03 19:37:20 +00:00
```
2021-06-05 23:18:13 +00:00
sudo docker run -it --rm lsquic http_client -s www.google.com -p / -o version=h3-29
2019-09-16 14:17:30 +00:00
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
2017-10-03 19:37:20 +00:00
```
2017-09-26 15:26:05 +00:00
Platforms
---------
2019-09-11 15:27:58 +00:00
The library has been tested on the following platforms:
2017-09-26 15:26:05 +00:00
- Linux
2018-05-04 20:24:56 +00:00
- i386
2017-09-26 15:26:05 +00:00
- x86_64
- ARM (Raspberry Pi 3)
- FreeBSD
- i386
- MacOS
- x86_64
2021-08-17 13:09:00 +00:00
- iOS
- ARM
2020-05-17 16:42:32 +00:00
- Android
- ARM
2020-06-03 04:13:30 +00:00
- Windows
2019-09-11 15:27:58 +00:00
- x86_64
2017-09-22 21:00:03 +00:00
2020-10-21 13:05:26 +00:00
Get Involved
------------
Do not hesitate to report bugs back to us. Even better, send us fixes
and improvements!
2017-09-22 21:00:03 +00:00
Have fun,
LiteSpeed QUIC Team.
2021-01-06 22:53:07 +00:00
Copyright (c) 2017 - 2021 LiteSpeed Technologies Inc