2018-04-23 19:12:41 +00:00
|
|
|
[![Build Status](https://travis-ci.org/litespeedtech/lsquic-client.svg?branch=master)](https://travis-ci.org/litespeedtech/lsquic-client)
|
2018-04-23 18:49:50 +00:00
|
|
|
|
2017-09-22 21:00:03 +00:00
|
|
|
LiteSpeed QUIC (LSQUIC) Client Library README
|
|
|
|
=============================================
|
|
|
|
|
|
|
|
Description
|
|
|
|
-----------
|
|
|
|
|
|
|
|
LiteSpeed QUIC (LSQUIC) Client Library is an open-source implementation
|
|
|
|
of QUIC functionality for clients. It is released in the hope to speed
|
|
|
|
the adoption of QUIC. Most of the code in this distribution is used in
|
|
|
|
our own products: LiteSpeed Web Server and ADC. We think it is free of
|
|
|
|
major problems. Nevertheless, do not hesitate to report bugs back to us.
|
|
|
|
Even better, send us fixes and improvements!
|
|
|
|
|
2018-05-09 18:01:46 +00:00
|
|
|
Currently supported QUIC versions are Q035, Q039, Q041, and Q043.
|
|
|
|
Support for newer versions will be added soon after they are released.
|
|
|
|
The version(s) specified by IETF QUIC WG will be added once the IETF
|
|
|
|
version of the protocol settles down a little.
|
2017-09-22 21:00:03 +00:00
|
|
|
|
|
|
|
Documentation
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The documentation for this module is admittedly sparse. The API is
|
|
|
|
documented in include/lsquic.h. If you have doxygen, you can run
|
2017-09-26 15:26:05 +00:00
|
|
|
`doxygen dox.cfg` or `make docs`. The example program is
|
2017-09-22 21:00:03 +00:00
|
|
|
test/http_client.c: a bare-bones, but working, QUIC client. Have a look
|
|
|
|
in EXAMPLES.txt to see how it can be used.
|
|
|
|
|
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
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Check out stable branch:
|
|
|
|
|
|
|
|
```
|
2017-09-29 15:18:32 +00:00
|
|
|
git checkout chromium-stable
|
2017-09-26 15:26:05 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
3. Compile the library
|
|
|
|
|
|
|
|
```
|
|
|
|
cmake . && make
|
|
|
|
```
|
|
|
|
|
|
|
|
If you want to turn on optimizations, do
|
|
|
|
|
|
|
|
```
|
|
|
|
cmake -DCMAKE_BUILD_TYPE=Release . && make
|
|
|
|
```
|
|
|
|
|
|
|
|
4. Install the library
|
|
|
|
|
|
|
|
This is the manual step. You will need to copy library files manually.
|
|
|
|
LSQUIC client library needs two: `ssl/libssl.a` and `crypto/libcrypto.a`.
|
|
|
|
To install these in `/usr/local/lib`, you should do the following:
|
|
|
|
|
|
|
|
```
|
|
|
|
BORINGSSL_SOURCE=$PWD
|
|
|
|
cd /usr/local/lib
|
2017-09-29 15:18:32 +00:00
|
|
|
sudo cp $BORINGSSL_SOURCE/ssl/libssl.a .
|
|
|
|
sudo cp $BORINGSSL_SOURCE/crypto/libcrypto.a .
|
2017-09-26 15:26:05 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
If you do not want to install the library (or do not have root), you
|
|
|
|
can do this instead:
|
|
|
|
|
|
|
|
```
|
|
|
|
BORINGSSL_SOURCE=$PWD
|
|
|
|
mkdir -p $HOME/tmp/boringssl-libs
|
|
|
|
cd $HOME/tmp/boringssl-libs
|
|
|
|
ln -s $BORINGSSL_SOURCE/ssl/libssl.a
|
|
|
|
ln -s $BORINGSSL_SOURCE/crypto/libcrypto.a
|
|
|
|
```
|
|
|
|
|
|
|
|
Building LSQUIC Client Library
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
LSQUIC's `http_client` and the tests link BoringSSL libraries statically.
|
|
|
|
Following previous section, you can build LSQUIC as follows:
|
|
|
|
|
2017-09-29 15:18:32 +00:00
|
|
|
1. Get the source code
|
|
|
|
|
|
|
|
```
|
|
|
|
git clone https://github.com/litespeedtech/lsquic-client.git
|
|
|
|
cd lsquic-client
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Compile the library
|
|
|
|
|
|
|
|
|
2017-09-26 15:26:05 +00:00
|
|
|
```
|
|
|
|
cmake -DBORINGSSL_INCLUDE=$BORINGSSL_SOURCE/include \
|
|
|
|
-DBORINGSSL_LIB=$HOME/tmp/boringssl-libs .
|
|
|
|
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
|
|
|
|
---------
|
|
|
|
The library and http_client example can be built with Docker.
|
|
|
|
```
|
|
|
|
docker build -t lsquic-client .
|
|
|
|
```
|
|
|
|
|
|
|
|
Then you can use the http_client example from the command line.
|
|
|
|
```
|
|
|
|
docker run -it --rm lsquic-client http_client -H www.google.com -s 74.125.22.106:443 -p /
|
|
|
|
```
|
|
|
|
|
2017-09-26 15:26:05 +00:00
|
|
|
Platforms
|
|
|
|
---------
|
|
|
|
|
|
|
|
The client library has been tested on the following platforms:
|
|
|
|
- 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
|
2018-04-02 19:16:01 +00:00
|
|
|
- Windows
|
|
|
|
- x86_64
|
2017-09-26 15:26:05 +00:00
|
|
|
- MacOS
|
|
|
|
- x86_64
|
2017-09-22 21:00:03 +00:00
|
|
|
|
|
|
|
Have fun,
|
|
|
|
|
|
|
|
LiteSpeed QUIC Team.
|
|
|
|
|
2018-04-20 19:19:44 +00:00
|
|
|
Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc
|