Make libevent optional; move binaries into bin/

This commit is contained in:
Dmitri Tikhonov 2021-02-11 10:55:49 -05:00
parent 26e8f082c9
commit b54d1e6309
3 changed files with 109 additions and 94 deletions

View File

@ -234,100 +234,45 @@ ELSE()
MESSAGE(STATUS "zlib not found")
ENDIF()
IF (LSQUIC_BIN OR LSQUIC_TESTS)
FIND_PATH(EVENT_INCLUDE_DIR NAMES event2/event.h)
IF (EVENT_INCLUDE_DIR)
INCLUDE_DIRECTORIES(${EVENT_INCLUDE_DIR})
ELSE()
MESSAGE(FATAL_ERROR "event2/event.h was not found")
ENDIF()
IF (CMAKE_SYSTEM_NAME STREQUAL Windows)
FIND_LIBRARY(EVENT_LIB event)
ELSE()
FIND_LIBRARY(EVENT_LIB libevent${LIB_SUFFIX})
IF(NOT EVENT_LIB)
FIND_LIBRARY(EVENT_LIB libevent.so)
SET(LIBS lsquic ${BORINGSSL_LIB_ssl} ${BORINGSSL_LIB_crypto} ${ZLIB_LIB} ${LIBS})
IF (LSQUIC_BIN)
FIND_PATH(EVENT_INCLUDE_DIR NAMES event2/event.h)
IF (EVENT_INCLUDE_DIR)
INCLUDE_DIRECTORIES(${EVENT_INCLUDE_DIR})
ELSE()
MESSAGE(WARNING "event2/event.h was not found: binaries won't be built")
SET(LSQUIC_BIN OFF)
ENDIF()
ENDIF()
IF(EVENT_LIB)
MESSAGE(STATUS "Found event: ${EVENT_LIB}")
ELSE()
MESSAGE(STATUS "libevent not found")
ENDIF()
SET(LIBS lsquic ${EVENT_LIB} ${BORINGSSL_LIB_ssl} ${BORINGSSL_LIB_crypto} ${ZLIB_LIB} ${LIBS})
IF(MSVC)
FIND_LIBRARY(PCRE_LIB pcre)
IF(PCRE_LIB)
MESSAGE(STATUS "Found pcre: ${PCRE_LIB}")
LIST(APPEND LIBS ${PCRE_LIB})
ELSE()
MESSAGE(STATUS "pcre not found: http_server won't work")
ENDIF()
FIND_LIBRARY(PCREPOSIX_LIB pcreposix)
IF(PCREPOSIX_LIB)
MESSAGE(STATUS "Found pcreposix: ${PCREPOSIX_LIB}")
LIST(APPEND LIBS ${PCREPOSIX_LIB})
ELSE()
MESSAGE(STATUS "pcreposix not found: http_server won't work")
ENDIF()
LIST(APPEND LIBS ws2_32)
LIST(APPEND LIBS iphlpapi)
ENDIF()
ENDIF() # LSQUIC_BIN OR LSQUIC_TESTS
IF(LSQUIC_BIN)
IF(MSVC)
SET(GETOPT_C wincompat/getopt.c)
IF (LSQUIC_BIN)
IF (CMAKE_SYSTEM_NAME STREQUAL Windows)
FIND_LIBRARY(EVENT_LIB event)
ELSE()
FIND_LIBRARY(EVENT_LIB libevent${LIB_SUFFIX})
IF(NOT EVENT_LIB)
FIND_LIBRARY(EVENT_LIB libevent.so)
ENDIF()
ENDIF()
IF(EVENT_LIB)
MESSAGE(STATUS "Found event: ${EVENT_LIB}")
ELSE()
MESSAGE(WARNING "libevent not found: binaries won't be built")
SET(LSQUIC_BIN OFF)
ENDIF()
ENDIF()
add_executable(http_server bin/http_server.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
IF(NOT MSVC) # TODO: port MD5 server and client to Windows
add_executable(md5_server bin/md5_server.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
add_executable(md5_client bin/md5_client.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
ENDIF()
add_executable(echo_server bin/echo_server.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
add_executable(echo_client bin/echo_client.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
add_executable(duck_server bin/duck_server.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
add_executable(duck_client bin/duck_client.c bin/prog.c bin/test_common.c bin/test_cert.c ${GETOPT_C})
IF (NOT MSVC)
add_executable(http_client
bin/http_client.c
bin/prog.c
bin/test_common.c
bin/test_cert.c
)
LIST(APPEND LIBS pthread m)
#MSVC
LIST(APPEND LIBS pthread m)
ELSE()
add_executable(http_client
bin/http_client.c
bin/prog.c
bin/test_common.c
bin/test_cert.c
wincompat/getopt.c
wincompat/getopt1.c
)
LIST(APPEND LIBS ws2_32)
LIST(APPEND LIBS ws2_32)
ENDIF()
TARGET_LINK_LIBRARIES(http_client ${LIBS})
TARGET_LINK_LIBRARIES(http_server ${LIBS})
IF(NOT MSVC)
TARGET_LINK_LIBRARIES(md5_server ${LIBS})
TARGET_LINK_LIBRARIES(md5_client ${LIBS})
IF (LSQUIC_BIN)
ADD_SUBDIRECTORY(bin)
ENDIF()
TARGET_LINK_LIBRARIES(echo_server ${LIBS})
TARGET_LINK_LIBRARIES(echo_client ${LIBS})
TARGET_LINK_LIBRARIES(duck_server ${LIBS})
TARGET_LINK_LIBRARIES(duck_client ${LIBS})
add_subdirectory(bin)
ENDIF() # LSQUIC_BIN
add_subdirectory(src)

View File

@ -45,21 +45,21 @@ Usage Examples
Fetch Google's home page:
./http_client -s www.google.com -p /
./bin/http_client -s www.google.com -p /
The default port number is 443, but it can be specified after colon
using the -s flag. The value of the `host' header as well as the SNI
value defaults to the host part of the -s option. -H option can be
used to override it. For example:
./http_client -H www.youtube.com -s www.google.com:443 -p / -M HEAD
./bin/http_client -H www.youtube.com -s www.google.com:443 -p / -M HEAD
The host part can be an IP address. Both IPv4 and IPv6 are supported.
See ./http_client -h for a (long) list of different flags.
See ./bin/http_client -h for a (long) list of different flags.
POST a file to calculate its CRC32 checksum:
./http_client -H www.litespeedtech.com -s 443 \
./bin/http_client -H www.litespeedtech.com -s 443 \
-p /cgi-bin/crc32.cgi -P file-256M -M POST
HTTP/1.1 200 OK
@ -83,7 +83,7 @@ On the command line, I do
To submit several requests concurrently, one can use -n and -r options:
./http_client -H www.litespeedtech.com -s 443 \
./bin/http_client -H www.litespeedtech.com -s 443 \
-p /cgi-bin/crc32.cgi -P file-256M -M POST -n 3 -r 10
This will open three parallel connections which will make ten POST
@ -92,9 +92,9 @@ requests together.
To perform load testing, it is good to mix sending and receiving data:
for i in {1..100}; do
./http_client $COMMON_OPTS -p /cgi-bin/crc32.cgi -P file-256M \
./bin/http_client $COMMON_OPTS -p /cgi-bin/crc32.cgi -P file-256M \
-M POST >out-post.$i &
./http_client $COMMON_OPTS -p /docs/file-256M >out-get.$i &
./bin/http_client $COMMON_OPTS -p /docs/file-256M >out-get.$i &
sleep 1
done
@ -121,9 +121,9 @@ Running Instructions
of packet that the client will accept.
Example Usage
./http_client -p /file-1M -H www.litespeedtech.com -s 192.168.0.85:5443
./bin/http_client -p /file-1M -H www.litespeedtech.com -s 192.168.0.85:5443
-o version=FF000014
./http_server -c www.litespeedtech.com,certschain,privkey
./bin/http_server -c www.litespeedtech.com,certschain,privkey
-s 0.0.0.0:5443 -W -o base_plpmtu=65535
Additional Notes
@ -145,9 +145,9 @@ And so on.
For example, to test version negotiation:
./http_server -c www.litespeedtech.com,certschain,privkey \
./bin/http_server -c www.litespeedtech.com,certschain,privkey \
-o version=Q035 -L debug 2>server.out &
./http_client -H www.litespeedtech.com -p Makefile -L debug 2>client.out
./bin/http_client -H www.litespeedtech.com -p Makefile -L debug 2>client.out
Above, the client will start with the default, which is the highest supported
QUIC version, which the server should negotiate down. You should see it from

View File

@ -1,4 +1,74 @@
# Copyright (c) 2017 - 2021 LiteSpeed Technologies Inc. See LICENSE.
LIST(APPEND LIBS ${EVENT_LIB})
IF(MSVC)
FIND_LIBRARY(PCRE_LIB pcre)
IF(PCRE_LIB)
MESSAGE(STATUS "Found pcre: ${PCRE_LIB}")
LIST(APPEND LIBS ${PCRE_LIB})
ELSE()
MESSAGE(STATUS "pcre not found: http_server won't work")
ENDIF()
FIND_LIBRARY(PCREPOSIX_LIB pcreposix)
IF(PCREPOSIX_LIB)
MESSAGE(STATUS "Found pcreposix: ${PCREPOSIX_LIB}")
LIST(APPEND LIBS ${PCREPOSIX_LIB})
ELSE()
MESSAGE(STATUS "pcreposix not found: http_server won't work")
ENDIF()
LIST(APPEND LIBS ws2_32)
LIST(APPEND LIBS iphlpapi)
ENDIF()
IF(MSVC)
SET(GETOPT_C ../wincompat/getopt.c)
ENDIF()
add_executable(http_server http_server.c prog.c test_common.c test_cert.c ${GETOPT_C})
IF(NOT MSVC) # TODO: port MD5 server and client to Windows
add_executable(md5_server md5_server.c prog.c test_common.c test_cert.c ${GETOPT_C})
add_executable(md5_client md5_client.c prog.c test_common.c test_cert.c ${GETOPT_C})
ENDIF()
add_executable(echo_server echo_server.c prog.c test_common.c test_cert.c ${GETOPT_C})
add_executable(echo_client echo_client.c prog.c test_common.c test_cert.c ${GETOPT_C})
add_executable(duck_server duck_server.c prog.c test_common.c test_cert.c ${GETOPT_C})
add_executable(duck_client duck_client.c prog.c test_common.c test_cert.c ${GETOPT_C})
IF (NOT MSVC)
add_executable(http_client
http_client.c
prog.c
test_common.c
test_cert.c
)
#MSVC
ELSE()
add_executable(http_client
http_client.c
prog.c
test_common.c
test_cert.c
../wincompat/getopt.c
../wincompat/getopt1.c
)
ENDIF()
TARGET_LINK_LIBRARIES(http_client ${LIBS})
TARGET_LINK_LIBRARIES(http_server ${LIBS})
IF(NOT MSVC)
TARGET_LINK_LIBRARIES(md5_server ${LIBS})
TARGET_LINK_LIBRARIES(md5_client ${LIBS})
ENDIF()
TARGET_LINK_LIBRARIES(echo_server ${LIBS})
TARGET_LINK_LIBRARIES(echo_client ${LIBS})
TARGET_LINK_LIBRARIES(duck_server ${LIBS})
TARGET_LINK_LIBRARIES(duck_client ${LIBS})
INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(sendmmsg HAVE_SENDMMSG)
CHECK_FUNCTION_EXISTS(recvmmsg HAVE_RECVMMSG)