README.md revision 5392f7a3
15392f7a3SLiteSpeed Tech[![Build Status](https://travis-ci.org/litespeedtech/lsquic.svg?branch=master)](https://travis-ci.org/litespeedtech/lsquic) 25392f7a3SLiteSpeed Tech[![Build Status](https://api.cirrus-ci.com/github/litespeedtech/lsquic.svg)](https://cirrus-ci.com/github/litespeedtech/lsquic) 35392f7a3SLiteSpeed Tech[![Build status](https://ci.appveyor.com/api/projects/status/kei9649t9leoqicr?svg=true)](https://ci.appveyor.com/project/litespeedtech/lsquic) 41fc8f998SDmitri Tikhonov 55392f7a3SLiteSpeed TechLiteSpeed QUIC (LSQUIC) Library README 650aadb33SDmitri Tikhonov============================================= 750aadb33SDmitri Tikhonov 850aadb33SDmitri TikhonovDescription 950aadb33SDmitri Tikhonov----------- 1050aadb33SDmitri Tikhonov 115392f7a3SLiteSpeed TechLiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC 125392f7a3SLiteSpeed Techfunctionality for servers and clients. It is released in the hope to speed 1350aadb33SDmitri Tikhonovthe adoption of QUIC. Most of the code in this distribution is used in 145392f7a3SLiteSpeed Techour own products: LiteSpeed Web Server, LiteSpeed ADC, and OpenLiteSpeed. 155392f7a3SLiteSpeed TechWe think it is free of major problems. Nevertheless, do not hesitate to 165392f7a3SLiteSpeed Techreport bugs back to us. Even better, send us fixes and improvements! 1750aadb33SDmitri Tikhonov 185392f7a3SLiteSpeed TechCurrently supported QUIC versions are Q039, Q043, Q046, and ID-22. Support 195392f7a3SLiteSpeed Techfor newer versions will be added soon after they are released. 2050aadb33SDmitri Tikhonov 2150aadb33SDmitri TikhonovDocumentation 2250aadb33SDmitri Tikhonov------------- 2350aadb33SDmitri Tikhonov 2450aadb33SDmitri TikhonovThe documentation for this module is admittedly sparse. The API is 2550aadb33SDmitri Tikhonovdocumented in include/lsquic.h. If you have doxygen, you can run 26e0197994SDmitri Tikhonov`doxygen dox.cfg` or `make docs`. The example program is 2750aadb33SDmitri Tikhonovtest/http_client.c: a bare-bones, but working, QUIC client. Have a look 2850aadb33SDmitri Tikhonovin EXAMPLES.txt to see how it can be used. 2950aadb33SDmitri Tikhonov 30e0197994SDmitri TikhonovRequirements 31e0197994SDmitri Tikhonov------------ 3250aadb33SDmitri Tikhonov 33e0197994SDmitri TikhonovTo build LSQUIC, you need CMake, zlib, and BoringSSL. The example program 34e0197994SDmitri Tikhonovuses libevent to provide the event loop. 3550aadb33SDmitri Tikhonov 36e0197994SDmitri TikhonovBuilding BoringSSL 37e0197994SDmitri Tikhonov------------------ 38e0197994SDmitri Tikhonov 39e0197994SDmitri TikhonovBoringSSL is not packaged; you have to build it yourself. The process is 40e0197994SDmitri Tikhonovstraightforward. You will need `go` installed. 41e0197994SDmitri Tikhonov 42e0197994SDmitri Tikhonov1. Clone BoringSSL by issuing the following command: 43e0197994SDmitri Tikhonov 44e0197994SDmitri Tikhonov``` 45e0197994SDmitri Tikhonovgit clone https://boringssl.googlesource.com/boringssl 46e0197994SDmitri Tikhonovcd boringssl 47e0197994SDmitri Tikhonov``` 48e0197994SDmitri Tikhonov 495392f7a3SLiteSpeed TechYou may need to install pre-requisites like zlib and libevent. 50e0197994SDmitri Tikhonov 515392f7a3SLiteSpeed Tech2. Compile the library 52e0197994SDmitri Tikhonov 53e0197994SDmitri Tikhonov``` 54e0197994SDmitri Tikhonovcmake . && make 55e0197994SDmitri Tikhonov``` 56e0197994SDmitri Tikhonov 57199c01abSLiteSpeed TechRemember where BoringSSL sources are: 58e0197994SDmitri Tikhonov``` 59199c01abSLiteSpeed TechBORINGSSL=$PWD 60e0197994SDmitri Tikhonov``` 61e0197994SDmitri Tikhonov 62199c01abSLiteSpeed TechIf you want to turn on optimizations, do 63e0197994SDmitri Tikhonov 64e0197994SDmitri Tikhonov``` 65199c01abSLiteSpeed Techcmake -DCMAKE_BUILD_TYPE=Release . && make 66e0197994SDmitri Tikhonov``` 67e0197994SDmitri Tikhonov 685392f7a3SLiteSpeed TechBuilding LSQUIC Library 695392f7a3SLiteSpeed Tech----------------------- 70e0197994SDmitri Tikhonov 715392f7a3SLiteSpeed TechLSQUIC's `http_client`, `http_server`, and the tests link BoringSSL 725392f7a3SLiteSpeed Techlibraries statically. Following previous section, you can build LSQUIC 735392f7a3SLiteSpeed Techas follows: 74e0197994SDmitri Tikhonov 7567b0dc15SDmitri Tikhonov1. Get the source code 7667b0dc15SDmitri Tikhonov 7767b0dc15SDmitri Tikhonov``` 785392f7a3SLiteSpeed Techgit clone https://github.com/litespeedtech/lsquic.git 795392f7a3SLiteSpeed Techcd lsquic 805392f7a3SLiteSpeed Techgit submodule init 815392f7a3SLiteSpeed Techgit submodule update 8267b0dc15SDmitri Tikhonov``` 8367b0dc15SDmitri Tikhonov 8467b0dc15SDmitri Tikhonov2. Compile the library 8567b0dc15SDmitri Tikhonov 8667b0dc15SDmitri Tikhonov 87e0197994SDmitri Tikhonov``` 88199c01abSLiteSpeed Tech# $BORINGSSL is the top-level BoringSSL directory from the previous step 89199c01abSLiteSpeed Techcmake -DBORINGSSL_DIR=$BORINGSSL . 90e0197994SDmitri Tikhonovmake 91e0197994SDmitri Tikhonov``` 92e0197994SDmitri Tikhonov 9367b0dc15SDmitri Tikhonov3. Run tests 94e0197994SDmitri Tikhonov 95e0197994SDmitri Tikhonov``` 96e0197994SDmitri Tikhonovmake test 97e0197994SDmitri Tikhonov``` 98e0197994SDmitri Tikhonov 99306ecefeSBrian ProdoehlBuilding with Docker 100306ecefeSBrian Prodoehl--------- 101306ecefeSBrian ProdoehlThe library and http_client example can be built with Docker. 102306ecefeSBrian Prodoehl``` 1035392f7a3SLiteSpeed Techdocker build -t lsquic . 104306ecefeSBrian Prodoehl``` 105306ecefeSBrian Prodoehl 106306ecefeSBrian ProdoehlThen you can use the http_client example from the command line. 107306ecefeSBrian Prodoehl``` 1085392f7a3SLiteSpeed Techdocker run -it --rm lsquic http_client -H www.google.com -s 74.125.22.106:443 -p / 109306ecefeSBrian Prodoehl``` 110306ecefeSBrian Prodoehl 111e0197994SDmitri TikhonovPlatforms 112e0197994SDmitri Tikhonov--------- 113e0197994SDmitri Tikhonov 1145392f7a3SLiteSpeed TechThe library has been tested on the following platforms: 115e0197994SDmitri Tikhonov- Linux 116aff2a1d8SDmitri Tikhonov - i386 117e0197994SDmitri Tikhonov - x86_64 118e0197994SDmitri Tikhonov - ARM (Raspberry Pi 3) 119e0197994SDmitri Tikhonov- FreeBSD 120e0197994SDmitri Tikhonov - i386 121e0197994SDmitri Tikhonov- MacOS 122e0197994SDmitri Tikhonov - x86_64 1235392f7a3SLiteSpeed Tech- Windows (this needs updating for the server part, now broken) 1245392f7a3SLiteSpeed Tech - x86_64 12550aadb33SDmitri Tikhonov 12650aadb33SDmitri TikhonovHave fun, 12750aadb33SDmitri Tikhonov 12850aadb33SDmitri TikhonovLiteSpeed QUIC Team. 12950aadb33SDmitri Tikhonov 1305392f7a3SLiteSpeed TechCopyright (c) 2017 - 2019 LiteSpeed Technologies Inc 131