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