Skip to content

Commit cabe860

Browse files
authored
[!] fix http3 deadloop and segmentation fault, fix stream compose error (#338)
[!] fix http3 send data dead loop after fin sent; [!] fix http3 server-inited bidi-stream crash; [~] optimize mp schedule algorithms; [!] fix stream compose error; [!] fix compile errors on macOS;
1 parent c51068a commit cabe860

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1207
-300
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ jobs:
6161
SSL_LIB_PATH_STR="${PWD}/third_party/boringssl/build/ssl/libssl.a;${PWD}/third_party/boringssl/build/crypto/libcrypto.a"
6262
mkdir -p build
6363
cd build
64-
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_DISABLE_RENO=0 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
64+
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_ENABLE_RENO=1 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
6565
make -j
6666
6767
- name: Test

.github/workflows/codeql-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ jobs:
6060
SSL_LIB_PATH_STR="${PWD}/third_party/boringssl/build/ssl/libssl.a;${PWD}/third_party/boringssl/build/crypto/libcrypto.a"
6161
mkdir -p build
6262
cd build
63-
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_DISABLE_RENO=0 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
63+
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_ENABLE_RENO=1 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
6464
make -j
6565
6666
- name: Perform CodeQL Analysis

CMakeLists.txt

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ set (xquic_VERSION_MAJOR 0)
77
set (xquic_VERSION_MINOR 1)
88
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
99

10-
# build type
10+
option (XQC_ENABLE_BBR2 "enable bbr2" ON)
11+
option (XQC_ENABLE_COPA "enable copa" ON)
12+
option (XQC_ENABLE_RENO "enable reno" ON)
13+
option (XQC_ENABLE_UNLIMITED "enable unlimited cc" ON)
14+
option (XQC_ENABLE_MP_INTEROP "enable MPQUIC interop" ON)
15+
1116
if(NOT CMAKE_BUILD_TYPE)
1217
set(CMAKE_BUILD_TYPE Release)
1318
endif()
@@ -74,6 +79,9 @@ if(XQC_COMPAT_DUPLICATE)
7479
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_COMPAT_DUPLICATE")
7580
endif()
7681

82+
if(XQC_COMPAT_GENERATE_SR_PKT)
83+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_COMPAT_GENERATE_SR_PKT")
84+
endif()
7785

7886
# print only error log
7987
if(XQC_ONLY_ERROR_LOG)
@@ -116,8 +124,8 @@ endif()
116124

117125
# configure file
118126
configure_file (
119-
xqc_configure.h.in
120-
xqc_configure.h
127+
"${CMAKE_CURRENT_SOURCE_DIR}/xqc_configure.h.in"
128+
"${CMAKE_CURRENT_SOURCE_DIR}/include/xquic/xqc_configure.h"
121129
)
122130

123131
include_directories(
@@ -127,8 +135,6 @@ include_directories(
127135
"${CMAKE_CURRENT_BINARY_DIR}/include"
128136
)
129137

130-
131-
132138
# http3/qpack source
133139
set(
134140
HTTP3_SOURCES
@@ -185,9 +191,16 @@ set(
185191
"src/transport/scheduler/xqc_scheduler_common.c"
186192
"src/transport/scheduler/xqc_scheduler_backup.c"
187193
"src/transport/scheduler/xqc_scheduler_rap.c"
188-
"src/transport/scheduler/xqc_scheduler_interop.c"
189194
)
190195

196+
if(XQC_ENABLE_MP_INTEROP)
197+
set(
198+
TRANSPORT_SOURCES
199+
${TRANSPORT_SOURCES}
200+
"src/transport/scheduler/xqc_scheduler_interop.c"
201+
)
202+
endif()
203+
191204
# TLS source
192205
set (
193206
TLS_SOURCE
@@ -240,15 +253,11 @@ set(
240253
CONGESTION_CONTROL_SOURCES
241254
"src/congestion_control/xqc_cubic.c"
242255
"src/congestion_control/xqc_bbr.c"
243-
"src/congestion_control/xqc_unlimited_cc.c"
244-
"src/congestion_control/xqc_copa.c"
245256
"src/congestion_control/xqc_window_filter.c"
246257
"src/congestion_control/xqc_sample.c"
247258
)
248259

249-
if(XQC_DISABLE_RENO)
250-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_DISABLE_RENO ")
251-
else()
260+
if(XQC_ENABLE_RENO)
252261
set(
253262
CONGESTION_CONTROL_SOURCES
254263
${CONGESTION_CONTROL_SOURCES}
@@ -257,15 +266,30 @@ else()
257266
endif()
258267

259268
if(XQC_ENABLE_BBR2)
260-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_ENABLE_BBR2 ")
261269
set(
262270
CONGESTION_CONTROL_SOURCES
263-
264271
${CONGESTION_CONTROL_SOURCES}
265272
"src/congestion_control/xqc_bbr2.c"
266273
)
267274
endif()
268275

276+
if(XQC_ENABLE_COPA)
277+
set(
278+
CONGESTION_CONTROL_SOURCES
279+
${CONGESTION_CONTROL_SOURCES}
280+
"src/congestion_control/xqc_copa.c"
281+
)
282+
endif()
283+
284+
if(XQC_ENABLE_UNLIMITED)
285+
set(
286+
CONGESTION_CONTROL_SOURCES
287+
${CONGESTION_CONTROL_SOURCES}
288+
"src/congestion_control/xqc_unlimited_cc.c"
289+
)
290+
endif()
291+
292+
269293
# xquic source
270294
set (
271295
XQC_SOURCE
@@ -392,13 +416,13 @@ if (XQC_ENABLE_TESTING)
392416
endif()
393417

394418
if(PLATFORM STREQUAL "mac32")
395-
target_link_libraries(test_server xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
396-
target_link_libraries(test_client xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
419+
target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
420+
target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
397421
target_link_libraries(demo_server xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
398422
target_link_libraries(demo_client xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib)
399423
elseif(PLATFORM STREQUAL "mac")
400-
target_link_libraries(test_server xquic -lm -L/usr/local/lib -levent)
401-
target_link_libraries(test_client xquic -lm -L/usr/local/lib -levent)
424+
target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm -L/usr/local/lib -levent)
425+
target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm -L/usr/local/lib -levent)
402426
target_link_libraries(demo_server xquic -lm -L/usr/local/lib -levent)
403427
target_link_libraries(demo_client xquic -lm -L/usr/local/lib -levent)
404428
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
@@ -407,8 +431,8 @@ if (XQC_ENABLE_TESTING)
407431
target_link_libraries(demo_server xquic ${EVENT_LIB_PATH} -lm)
408432
target_link_libraries(demo_client xquic ${EVENT_LIB_PATH} -lm)
409433
else()
410-
target_link_libraries(test_server xquic -levent -lm)
411-
target_link_libraries(test_client xquic -levent -lm)
434+
target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -levent -lm)
435+
target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -levent -lm)
412436
target_link_libraries(demo_server xquic -levent -lm)
413437
target_link_libraries(demo_client xquic -levent -lm)
414438
endif()

CONTRIBUTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,5 +219,7 @@ In no particular order, thanks to these excellent individuals who contributed co
219219
* @yunwei37
220220
* @keengo99
221221
* @ruanshanshan
222+
* @alagoutte
223+
* @MPK1
222224

223225
This list will be continuously updated. Contributions are welcome!

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ cd ../..
8989
# build XQUIC with BoringSSL
9090
git submodule update --init --recursive
9191
mkdir -p build; cd build
92-
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_DISABLE_RENO=0 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
92+
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_ENABLE_RENO=1 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
9393
make -j
9494
```
9595

@@ -114,7 +114,7 @@ cd -
114114
# build XQUIC with BabaSSL
115115
git submodule update --init --recursive
116116
mkdir -p build; cd build
117-
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_DISABLE_RENO=0 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
117+
cmake -DGCOV=on -DCMAKE_BUILD_TYPE=Debug -DXQC_ENABLE_TESTING=1 -DXQC_SUPPORT_SENDMMSG_BUILD=1 -DXQC_ENABLE_EVENT_LOG=1 -DXQC_ENABLE_BBR2=1 -DXQC_ENABLE_RENO=1 -DSSL_TYPE=${SSL_TYPE_STR} -DSSL_PATH=${SSL_PATH_STR} -DSSL_INC_PATH=${SSL_INC_PATH_STR} -DSSL_LIB_PATH=${SSL_LIB_PATH_STR} ..
118118
make -j
119119
```
120120

cmake/CMakeLists.txt

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ if (XQC_DISABLE_LOG)
6363
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_DISABLE_LOG")
6464
endif()
6565

66+
if(XQC_COMPAT_GENERATE_SR_PKT)
67+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_COMPAT_GENERATE_SR_PKT")
68+
endif()
69+
6670
if (XQC_ONLY_ERROR_LOG)
6771
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_ONLY_ERROR_LOG")
6872
endif()
@@ -71,11 +75,6 @@ if (XQC_ENABLE_EVENT_LOG)
7175
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_ENABLE_EVENT_LOG ")
7276
endif()
7377

74-
if(XQC_COMPAT_GENERATE_SR_PKT)
75-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_COMPAT_GENERATE_SR_PKT")
76-
endif()
77-
78-
7978
if(ANDROID)
8079
set(DYMAMIC_LINK_OPTION
8180
${DYMAMIC_LINK_OPTION}
@@ -126,7 +125,11 @@ else()
126125
endif()
127126

128127

129-
configure_file (xqc_configure.h.in include/xquic/xqc_configure.h @ONLY)
128+
configure_file (
129+
"${CMAKE_CURRENT_SOURCE_DIR}/xqc_configure.h.in"
130+
"${CMAKE_CURRENT_SOURCE_DIR}/include/xquic/xqc_configure.h"
131+
@ONLY
132+
)
130133

131134
include_directories(
132135
include/
@@ -191,9 +194,16 @@ set(
191194
"src/transport/scheduler/xqc_scheduler_common.c"
192195
"src/transport/scheduler/xqc_scheduler_backup.c"
193196
"src/transport/scheduler/xqc_scheduler_rap.c"
194-
"src/transport/scheduler/xqc_scheduler_interop.c"
195197
)
196198

199+
if(XQC_ENABLE_MP_INTEROP)
200+
set(
201+
TRANSPORT_SOURCES
202+
${TRANSPORT_SOURCES}
203+
"src/transport/scheduler/xqc_scheduler_interop.c"
204+
)
205+
endif()
206+
197207
# TLS source
198208
set (
199209
TLS_SOURCE
@@ -246,31 +256,55 @@ set(
246256
CONGESTION_CONTROL_SOURCES
247257
"src/congestion_control/xqc_cubic.c"
248258
"src/congestion_control/xqc_bbr.c"
249-
"src/congestion_control/xqc_unlimited_cc.c"
250-
"src/congestion_control/xqc_copa.c"
251259
"src/congestion_control/xqc_window_filter.c"
252260
"src/congestion_control/xqc_sample.c"
253261
)
254262

255-
if (XQC_DISABLE_RENO)
256-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_DISABLE_RENO")
257-
else()
263+
if(XQC_ENABLE_RENO)
258264
set(
259265
CONGESTION_CONTROL_SOURCES
260266
${CONGESTION_CONTROL_SOURCES}
261267
"src/congestion_control/xqc_new_reno.c"
262268
)
263269
endif()
264270

265-
if (XQC_ENABLE_BBR2)
266-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXQC_ENABLE_BBR2")
271+
if(XQC_ENABLE_BBR2)
267272
set(
268273
CONGESTION_CONTROL_SOURCES
269274
${CONGESTION_CONTROL_SOURCES}
270275
"src/congestion_control/xqc_bbr2.c"
271276
)
272277
endif()
273278

279+
if(XQC_ENABLE_COPA)
280+
set(
281+
CONGESTION_CONTROL_SOURCES
282+
${CONGESTION_CONTROL_SOURCES}
283+
"src/congestion_control/xqc_copa.c"
284+
)
285+
endif()
286+
287+
if(XQC_ENABLE_UNLIMITED)
288+
set(
289+
CONGESTION_CONTROL_SOURCES
290+
${CONGESTION_CONTROL_SOURCES}
291+
"src/congestion_control/xqc_unlimited_cc.c"
292+
)
293+
endif()
294+
295+
296+
if(XQC_ENABLE_TH3)
297+
set(XQC_ENABLE_TUNNEL 1)
298+
set(
299+
TH3_SOURCES
300+
"tunnel/tunnel_h3/th3_ctx.c"
301+
"tunnel/tunnel_h3/th3_vconn.c"
302+
)
303+
endif()
304+
305+
)
306+
endif()
307+
274308
if (XQC_NO_SHARED)
275309
set(XQC_BINARY_TYPE STATIC)
276310
endif()
@@ -312,3 +346,4 @@ if (XQC_BUILD_SAMPLE)
312346
target_link_libraries(test_client xquic event)
313347
target_link_libraries(test_server xquic event)
314348
endif()
349+

demo/common.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
#define CIPHER_SUIT_LEN 256
1313
#define TLS_GROUPS_LEN 64
1414

15-
#define PATH_LEN 512
16-
#define RESOURCE_LEN 256
15+
#define PATH_LEN 1024
16+
#define RESOURCE_LEN 1024
1717
#define AUTHORITY_LEN 128
18-
#define URL_LEN 512
18+
#define URL_LEN 1024
1919

2020
/* the congestion control types */
2121
typedef enum cc_type_s {

0 commit comments

Comments
 (0)