Skip to content

Commit 3a42550

Browse files
authored
Release 4.4.0 (#595)
- [API] Add per-connection send rate throttling. - [BUGFIX] Fix data corruption in delayed mini-conn packets (#593). - [BUGFIX] Allow split buffered packet to generate one packet. (This can happen when DPLPMTUD increases a path's MTU.) (#505). - [BUGFIX] HTTP/3 client GOAWAY frame generation (#343). - [TUNING] QUIC Interop: add zerortt support. - Improve logs in the Extensible HTTP/3 Priority (HPI) module. - Comment cleanup: update QUIC draft references to RFC references. - Teach http_client to send "priority" header. - Parallelize unit tests so that they finish faster. - Include QUIC Interop Runner docker files in the distribution.
1 parent a61a7de commit 3a42550

12 files changed

Lines changed: 135 additions & 22 deletions

File tree

CHANGELOG

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
2024-12-01
2+
- 4.4.0
3+
- [API] Add per-connection send rate throttling.
4+
- [BUGFIX] Fix data corruption in delayed mini-conn packets (#593).
5+
- [BUGFIX] Allow split buffered packet to generate one packet. (This
6+
can happen when DPLPMTUD increases a path's MTU.) (#505).
7+
- [BUGFIX] HTTP/3 client GOAWAY frame generation (#343).
8+
- [TUNING] QUIC Interop: add zerortt support.
9+
- Improve logs in the Extensible HTTP/3 Priority (HPI) module.
10+
- Comment cleanup: update QUIC draft references to RFC references.
11+
- Teach http_client to send "priority" header.
12+
- Parallelize unit tests so that they finish faster.
13+
- Include QUIC Interop Runner docker files in the distribution.
14+
115
2025-11-01
216
- 4.3.2
317
- [BUGFIX] Fix the no-progress timeout logic (issue #531, PR #574).

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ to the LiteSpeed QUIC and HTTP/3 Library:
3939
- Rylie Pavlik -- CMake improvements
4040
- davidlei -- Build improvements
4141
- Timo Voelker -- Testing and bug reports
42+
- Kirill Sabitov -- Bug fixes
4243

4344
Thank you!
4445

bin/md5_client.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ static struct {
4949
off_t offset; /* Reset it after writing this many bytes */
5050
} g_reset_stream;
5151

52+
static size_t g_max_file_bytes; /* If set, limit file read to this many bytes */
53+
5254
struct file {
5355
LIST_ENTRY(file) next_file;
5456
const char *filename;
@@ -167,7 +169,10 @@ client_on_new_stream (void *stream_if_ctx, lsquic_stream_t *stream)
167169
st_h->file->fd = -1;
168170
st_h->file->reader.lsqr_read = test_reader_read;
169171
st_h->file->reader.lsqr_size = test_reader_size;
170-
st_h->file->reader.lsqr_ctx = create_lsquic_reader_ctx(st_h->file->filename);
172+
if (g_max_file_bytes > 0)
173+
st_h->file->reader.lsqr_ctx = create_lsquic_reader_ctx_max_bytes(st_h->file->filename, g_max_file_bytes);
174+
else
175+
st_h->file->reader.lsqr_ctx = create_lsquic_reader_ctx(st_h->file->filename);
171176
if (!st_h->file->reader.lsqr_ctx)
172177
exit(1);
173178
}
@@ -440,6 +445,7 @@ usage (const char *prog)
440445
"Options:\n"
441446
" -f FILE File to send to the server -- must be specified at least\n"
442447
" once.\n"
448+
" -n BYTES Limit number of bytes to read from file(s).\n"
443449
" -b Use buffering API for sending files over rather than\n"
444450
" the efficient version.\n"
445451
" -p PRIORITY Applicatble to previous file specified with -f\n"
@@ -466,9 +472,12 @@ main (int argc, char **argv)
466472
prog_init(&prog, 0, &sports, &client_file_stream_if, &client_ctx);
467473
prog.prog_api.ea_alpn = "md5";
468474

469-
while (-1 != (opt = getopt(argc, argv, PROG_OPTS "bhr:f:p:")))
475+
while (-1 != (opt = getopt(argc, argv, PROG_OPTS "bhr:f:p:n:")))
470476
{
471477
switch (opt) {
478+
case 'n':
479+
g_max_file_bytes = atoll(optarg);
480+
break;
472481
case 'p':
473482
if (file)
474483
file->priority = atoi(optarg);

bin/test_common.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2434,6 +2434,13 @@ test_reader_read (void *void_ctx, void *buf, size_t count)
24342434

24352435
struct reader_ctx *
24362436
create_lsquic_reader_ctx (const char *filename)
2437+
{
2438+
return create_lsquic_reader_ctx_max_bytes(filename, 0);
2439+
}
2440+
2441+
2442+
struct reader_ctx *
2443+
create_lsquic_reader_ctx_max_bytes (const char *filename, size_t max_bytes)
24372444
{
24382445
int fd;
24392446
struct stat st;
@@ -2457,6 +2464,8 @@ create_lsquic_reader_ctx (const char *filename)
24572464
}
24582465
struct reader_ctx *ctx = malloc(sizeof(*ctx));
24592466
ctx->file_size = st.st_size;
2467+
if (max_bytes > 0 && max_bytes < ctx->file_size)
2468+
ctx->file_size = max_bytes;
24602469
ctx->nread = 0;
24612470
ctx->fd = fd;
24622471
return ctx;

bin/test_common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ test_reader_read (void *void_ctx, void *buf, size_t count);
135135
struct reader_ctx *
136136
create_lsquic_reader_ctx (const char *filename);
137137

138+
struct reader_ctx *
139+
create_lsquic_reader_ctx_max_bytes (const char *filename, size_t max_bytes);
140+
138141
void
139142
destroy_lsquic_reader_ctx (struct reader_ctx *ctx);
140143

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
author = u'LiteSpeed Technologies'
2525

2626
# The short X.Y version
27-
version = u'4.3'
27+
version = u'4.4'
2828
# The full version, including alpha/beta/rc tags
29-
release = u'4.3.2'
29+
release = u'4.4.0'
3030

3131

3232
# -- General configuration ---------------------------------------------------

include/lsquic.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ extern "C" {
2626
#endif
2727

2828
#define LSQUIC_MAJOR_VERSION 4
29-
#define LSQUIC_MINOR_VERSION 3
30-
#define LSQUIC_PATCH_VERSION 2
29+
#define LSQUIC_MINOR_VERSION 4
30+
#define LSQUIC_PATCH_VERSION 0
3131

3232
#define LSQUIC_QUOTE(x) #x
3333
#define LSQUIC_SVAL(v) LSQUIC_QUOTE(v)

qir/Dockerfile.build

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
FROM ubuntu:20.04 AS builder
2+
ENV DEBIAN_FRONTEND=noninteractive
3+
4+
RUN apt-get update && \
5+
apt-get install -y apt-utils && \
6+
apt-get install -y build-essential git cmake software-properties-common \
7+
zlib1g-dev libevent-dev
8+
9+
RUN add-apt-repository ppa:longsleep/golang-backports && \
10+
apt-get update && \
11+
apt-get install -y golang-1.21-go && \
12+
cp /usr/lib/go-1.21/bin/go* /usr/bin/.
13+
14+
ENV GOROOT /usr/lib/go-1.21
15+
16+
RUN mkdir /src
17+
WORKDIR /src
18+
19+
RUN mkdir /src/lsquic
20+
COPY ./ /src/lsquic/
21+
22+
RUN git clone https://github.com/google/boringssl.git && \
23+
cd boringssl && \
24+
git checkout 9fc1c33e9c21439ce5f87855a6591a9324e569fd && \
25+
cmake . && \
26+
make
27+
28+
ENV EXTRA_CFLAGS -DLSQUIC_QIR=1
29+
RUN cd /src/lsquic && \
30+
cmake -DBORINGSSL_DIR=/src/boringssl . && \
31+
make -j http_client http_server
32+
33+
RUN cp lsquic/bin/http_client /usr/bin/ && cp lsquic/bin/http_server /usr/bin
34+
35+
FROM ubuntu:20.04
36+
COPY --from=builder /usr/bin/http_client /usr/bin/http_server /usr/bin/

qir/Dockerfile.final

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM martenseemann/quic-network-simulator-endpoint:latest
2+
COPY --from=build-lsquic /usr/bin/http_client /usr/bin/http_server /usr/bin/
3+
COPY qir/run_endpoint.sh .
4+
RUN chmod +x run_endpoint.sh
5+
ENTRYPOINT [ "./run_endpoint.sh" ]

qir/README.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE.
2+
This directory contains files necessary to build Docker container
3+
for use with the QUIC Interop Runner [a].
4+
5+
Build Instructions
6+
------------------
7+
8+
1. Generate source tarball. No longer needed.
9+
10+
The source tarball is what Docker will use to build the image.
11+
To generate the tarball, we use git-archive-all program as
12+
follows:
13+
14+
sh$ git-archive-all -C $LSQUIC_REPO_PATH --prefix=lsquic lsquic.tar
15+
16+
git-archive-all can be installed via pip
17+
pip/pip3 install git-archive-all
18+
19+
2. Build the builder image.
20+
21+
This image is based on Ubuntu 20 and in the end will contain
22+
compiled lsquic server and client programs, http_server and
23+
http_client.
24+
25+
The purpose of this Docker image is to be used as the source
26+
for these binaries when building the final image.
27+
28+
sh$ docker build -f qir/Dockerfile.build -t build-lsquic .
29+
30+
3. Build the final image.
31+
32+
The final image combines the lsquic binaries and run_endpoint.sh
33+
script, which is where the magic (or, to be frank, hairy hackery)
34+
happens to run lsquic server and client based on environment
35+
variables set by the QUIC Interop Runner.
36+
37+
sh$ docker build -f qir/Dockerfile.final -t try-lsquic .
38+
39+
40+
a. https://github.com/marten-seemann/quic-interop-runner

0 commit comments

Comments
 (0)