README.md revision 5392f7a3
1[![Build Status](https://travis-ci.org/litespeedtech/lsquic.svg?branch=master)](https://travis-ci.org/litespeedtech/lsquic)
2[![Build Status](https://api.cirrus-ci.com/github/litespeedtech/lsquic.svg)](https://cirrus-ci.com/github/litespeedtech/lsquic)
3[![Build status](https://ci.appveyor.com/api/projects/status/kei9649t9leoqicr?svg=true)](https://ci.appveyor.com/project/litespeedtech/lsquic)
4
5LiteSpeed QUIC (LSQUIC) Library README
6=============================================
7
8Description
9-----------
10
11LiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC
12functionality for servers and clients.  It is released in the hope to speed
13the adoption of QUIC.  Most of the code in this distribution is used in
14our own products: LiteSpeed Web Server, LiteSpeed ADC, and OpenLiteSpeed.
15We think it is free of major problems.  Nevertheless, do not hesitate to
16report bugs back to us.  Even better, send us fixes and improvements!
17
18Currently supported QUIC versions are Q039, Q043, Q046, and ID-22.  Support
19for newer versions will be added soon after they are released.
20
21Documentation
22-------------
23
24The documentation for this module is admittedly sparse.  The API is
25documented in include/lsquic.h.  If you have doxygen, you can run
26`doxygen dox.cfg` or `make docs`.  The example program is
27test/http_client.c: a bare-bones, but working, QUIC client.  Have a look
28in EXAMPLES.txt to see how it can be used.
29
30Requirements
31------------
32
33To build LSQUIC, you need CMake, zlib, and BoringSSL.  The example program
34uses libevent to provide the event loop.
35
36Building BoringSSL
37------------------
38
39BoringSSL is not packaged; you have to build it yourself.  The process is
40straightforward.  You will need `go` installed.
41
421. Clone BoringSSL by issuing the following command:
43
44```
45git clone https://boringssl.googlesource.com/boringssl
46cd boringssl
47```
48
49You may need to install pre-requisites like zlib and libevent.
50
512. Compile the library
52
53```
54cmake . &&  make
55```
56
57Remember where BoringSSL sources are:
58```
59BORINGSSL=$PWD
60```
61
62If you want to turn on optimizations, do
63
64```
65cmake -DCMAKE_BUILD_TYPE=Release . && make
66```
67
68Building LSQUIC Library
69-----------------------
70
71LSQUIC's `http_client`, `http_server`, and the tests link BoringSSL
72libraries statically.  Following previous section, you can build LSQUIC
73as follows:
74
751. Get the source code
76
77```
78git clone https://github.com/litespeedtech/lsquic.git
79cd lsquic
80git submodule init
81git submodule update
82```
83
842. Compile the library
85
86
87```
88# $BORINGSSL is the top-level BoringSSL directory from the previous step
89cmake -DBORINGSSL_DIR=$BORINGSSL .
90make
91```
92
933. Run tests
94
95```
96make test
97```
98
99Building with Docker
100---------
101The library and http_client example can be built with Docker.
102```
103docker build -t lsquic .
104```
105
106Then you can use the http_client example from the command line.
107```
108docker run -it --rm lsquic http_client -H www.google.com -s 74.125.22.106:443 -p /
109```
110
111Platforms
112---------
113
114The library has been tested on the following platforms:
115- Linux
116  - i386
117  - x86_64
118  - ARM (Raspberry Pi 3)
119- FreeBSD
120  - i386
121- MacOS
122  - x86_64
123- Windows (this needs updating for the server part, now broken)
124  - x86_64
125
126Have fun,
127
128LiteSpeed QUIC Team.
129
130Copyright (c) 2017 - 2019 LiteSpeed Technologies Inc
131