Skip to content

Commit 5478832

Browse files
authored
Release 4.8.0 (#651)
- [API] Deprecate all gQUIC versions. - [FIX] http1x: check size of Cookie: header. - [FIX] Add checks to gQUIC client session resume code. - [FIX] 32-bit parser bounds checks. - [FIX] Use ls-qpack v2.6.3 to pick up a bunch of fixes. - [DOCS] FAQ: example programs do work with google.com etc.
1 parent c2208b5 commit 5478832

32 files changed

Lines changed: 684 additions & 91 deletions

CHANGELOG

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
2026-06-15
2+
- 4.8.0
3+
- [API] Deprecate all gQUIC versions.
4+
- [FIX] http1x: check size of Cookie: header.
5+
- [FIX] Add checks to gQUIC client session resume code.
6+
- [FIX] 32-bit parser bounds checks.
7+
- [FIX] Use ls-qpack v2.6.3 to pick up a bunch of fixes.
8+
- [DOCS] FAQ: example programs do work with google.com etc.
9+
110
2026-06-05
211
- 4.7.2
312
- [FIX] Only ignore Priority: header after PRIORITY_UPDATE and in

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ to the LiteSpeed QUIC and HTTP/3 Library:
4242
- Kirill Sabitov -- Bug fixes
4343
- Harold Newman -- Bug fixes
4444
- Richard Ramos -- Windows fixes
45+
- youngseaz -- 32-bit transport param parser bug report
4546

4647
Thank you!
4748

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ and HTTP/3 functionality for servers and clients. Most of the code in this
1414
distribution is used in our own products: LiteSpeed Web Server, LiteSpeed ADC,
1515
and OpenLiteSpeed.
1616

17-
Currently supported QUIC versions are v1, v2, Internet-Draft versions 29, and 27;
18-
and the older "Google" QUIC versions Q043, Q046, an Q050.
17+
QUIC versions v1, v2, and Internet-Draft version 29 are enabled by default.
18+
Deprecated versions ID-27 and the older "Google" QUIC versions Q043, Q046,
19+
and Q050 are still supported, but are not enabled by default.
1920

2021
Standard Compliance
2122
-------------------

docs/apiref.rst

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,23 @@ has the form MAJOR.MINOR.PATCH, where
2828
QUIC Versions
2929
-------------
3030

31-
LSQUIC supports two types of QUIC protocol: Google QUIC and IETF QUIC. The
32-
former will at some point become obsolete, while the latter is still being
33-
developed by the IETF. Both types are included in a single enum:
31+
LSQUIC supports two types of QUIC protocol: Google QUIC and IETF QUIC.
32+
Google QUIC versions are deprecated and are not enabled by default. Both
33+
types are included in a single enum:
3434

3535
.. type:: enum lsquic_version
3636

3737
.. member:: LSQVER_043
3838

39-
Google QUIC version Q043
39+
Google QUIC version Q043; this version is deprecated.
4040

4141
.. member:: LSQVER_046
4242

43-
Google QUIC version Q046
43+
Google QUIC version Q046; this version is deprecated.
4444

4545
.. member:: LSQVER_050
4646

47-
Google QUIC version Q050
47+
Google QUIC version Q050; this version is deprecated.
4848

4949
.. member:: LSQVER_ID27
5050

@@ -54,14 +54,13 @@ developed by the IETF. Both types are included in a single enum:
5454

5555
IETF QUIC version ID 29
5656

57-
.. member:: LSQVER_ID34
57+
.. member:: LSQVER_I001
5858

59-
IETF QUIC version ID 34
59+
IETF QUIC version 1.
6060

61-
.. member:: LSQVER_I001
61+
.. member:: LSQVER_I002
6262

63-
IETF QUIC version 1. (This version is disabled by default until
64-
the QUIC RFC is released).
63+
IETF QUIC version 2.
6564

6665
.. member:: N_LSQVER
6766

@@ -84,7 +83,8 @@ Experimental versions.
8483

8584
.. macro:: LSQUIC_DEPRECATED_VERSIONS
8685

87-
Deprecated versions.
86+
Deprecated versions. Deprecated versions are supported, but they are not
87+
enabled by default.
8888

8989
.. macro:: LSQUIC_GQUIC_HEADER_VERSIONS
9090

@@ -491,7 +491,7 @@ settings structure:
491491
this number of times in a row without making progress (that is,
492492
reading, writing, or changing stream state), loop break will occur.
493493

494-
The defaut value is :macro:`LSQUIC_DF_PROGRESS_CHECK`.
494+
The default value is :macro:`LSQUIC_DF_PROGRESS_CHECK`.
495495

496496
.. member:: int es_rw_once
497497

@@ -631,7 +631,7 @@ settings structure:
631631
send PING frames in the absence of other activity.
632632

633633
By default, the server does not send PINGs and the period is set to zero.
634-
The client's defaut value is :macro:`LSQUIC_DF_PING_PERIOD`.
634+
The client's default value is :macro:`LSQUIC_DF_PING_PERIOD`.
635635

636636
IETF QUIC only.
637637

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.7'
27+
version = u'4.8'
2828
# The full version, including alpha/beta/rc tags
29-
release = u'4.7.2'
29+
release = u'4.8.0'
3030

3131

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

docs/faq.rst

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,9 @@ To aid development, there is a :macro:`LSQUIC_FORCED_TCID0_VERSIONS` that
2020
specifies the list of versions with 0-sized connections. (If you, for
2121
example, want to turn them off.)
2222

23-
Once gQUIC becomes deprecated in the future, there will remain no technical
24-
reason why a single engine instance could not be used both for client and
25-
server connections. It will be just work. For example, the single
23+
gQUIC versions are deprecated and disabled by default. There remains no
24+
technical reason why a single engine instance could not be used both for
25+
client and server connections. It is just work. For example, the single
2626
engine settings :type:`lsquic_engine_settings` will have to be separated
2727
into client and server settings, as the two usually do need to have
2828
separate settings.
29-
30-
Example Programs
31-
================
32-
33-
*http_client does not work with www.google.com, www.facebook.com, etc.*
34-
35-
Check the version. By defaut, ``http_client`` will use the latest supported
36-
version (at the time of this writing, "h3-31"), while the server may be using
37-
an older version, such as "h3-29". Adding ``-o version=h3-29`` to the
38-
command line may well solve your issue.
39-
40-
There is an `outstanding bug`_ where lsquic client does not perform version
41-
negotiation correctly for HTTP/3. We do not expect this to be fixed, because
42-
a) this version negotiation mechanism is likely to become defunct when QUIC v1
43-
is released and b) version negotiation is not necessary for an HTTP/3 client,
44-
because the other side's version is communicated to it via the ``Alt-Svc`` HTTP
45-
header.
46-
47-
.. _`outstanding bug`: https://github.com/litespeedtech/lsquic/issues/180

docs/index.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ Most of the code in this distribution has been used in our own products
1616
-- `LiteSpeed Web Server`_, `LiteSpeed Web ADC`_, and OpenLiteSpeed_ --
1717
since 2017.
1818

19-
Currently supported QUIC versions are v1, Internet-Draft versions 29, and 27;
20-
and the older "Google" QUIC versions Q043, Q046, an Q050.
19+
QUIC versions v1, v2, and Internet-Draft version 29 are enabled by default.
20+
Deprecated versions ID-27 and the older "Google" QUIC versions Q043, Q046,
21+
and Q050 are still supported, but are not enabled by default.
2122

2223
LSQUIC is licensed under the `MIT License`_; see LICENSE in the source
2324
distribution for details.

docs/tutorial.rst

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -832,22 +832,23 @@ QUIC versions in LSQUIC are gathered in an enum, :type:`lsquic_version`, and hav
832832

833833
enum lsquic_version {
834834
LSQVER_043, LSQVER_046, LSQVER_050, /* Google QUIC */
835-
LSQVER_ID27, LSQVER_ID28, LSQVER_ID29, /* IETF QUIC */
835+
LSQVER_ID27, LSQVER_ID29, /* IETF QUIC drafts */
836+
LSQVER_I001, LSQVER_I002, /* IETF QUIC RFC versions */
836837
/* ...some special entries skipped */
837838
N_LSQVER /* <====================== Special value */
838839
};
839840

840841
The special value "N_LSQVER" is used to let the engine pick the QUIC version.
841-
It picks the latest non-experimental version, so in this case it picks ID-29.
842-
(Experimental from the point of view of the library.)
842+
It picks the latest version that is neither deprecated nor experimental.
843+
(Deprecated and experimental from the point of view of the library.)
843844

844845
Because version enum values are small -- and that is by design -- a list of
845846
versions can be passed around as bitmasks.
846847

847848
::
848849

849850
/* This allows list of versions to be specified as bitmask: */
850-
es_versions = (1 << LSQVER_ID28) | (1 << LSQVER_ID29);
851+
es_versions = (1 << LSQVER_I001) | (1 << LSQVER_I002);
851852

852853
This is done, for example, when
853854
specifying list of versions to enable in engine settings using :member:`lsquic_engine_api.ea_versions`.
@@ -932,7 +933,7 @@ is parsed to see which setting to alter.
932933

933934
while (/* getopt */)
934935
{
935-
case 'o': /* For example: -o version=h3-27 -o cc_algo=2 */
936+
case 'o': /* For example: -o version=h3 -o cc_algo=2 */
936937
if (!settings_initialized) {
937938
lsquic_engine_init_settings(&settings,
938939
cert_file || key_file ? LSENG_SERVER : 0);

include/lsquic.h

Lines changed: 9 additions & 7 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 7
30-
#define LSQUIC_PATCH_VERSION 2
29+
#define LSQUIC_MINOR_VERSION 8
30+
#define LSQUIC_PATCH_VERSION 0
3131

3232
#define LSQUIC_QUOTE(x) #x
3333
#define LSQUIC_SVAL(v) LSQUIC_QUOTE(v)
@@ -107,8 +107,9 @@ enum lsquic_version
107107
};
108108

109109
/**
110-
* We currently support versions 43, 46, 50, Draft-27, Draft-29,
111-
* and IETF QUIC v1.
110+
* We currently support Google QUIC versions Q043, Q046, and Q050,
111+
* IETF QUIC Draft-27 and Draft-29, and IETF QUIC v1 and v2.
112+
* Deprecated and experimental versions are not enabled by default.
112113
* @see lsquic_version
113114
*/
114115
#define LSQUIC_SUPPORTED_VERSIONS ((1 << N_LSQVER) - 1)
@@ -121,7 +122,8 @@ enum lsquic_version
121122
#define LSQUIC_EXPERIMENTAL_VERSIONS ( \
122123
(1 << LSQVER_RESVED))
123124

124-
#define LSQUIC_DEPRECATED_VERSIONS ((1 << LSQVER_ID27))
125+
#define LSQUIC_DEPRECATED_VERSIONS ((1 << LSQVER_043) | (1 << LSQVER_046) | \
126+
(1 << LSQVER_050) | (1 << LSQVER_ID27))
125127

126128
#define LSQUIC_GQUIC_HEADER_VERSIONS (1 << LSQVER_043)
127129

@@ -670,7 +672,7 @@ struct lsquic_engine_settings {
670672
* this number of times in a row without making progress (that is,
671673
* reading, writing, or changing stream state), loop break will occur.
672674
*
673-
* The defaut value is @ref LSQUIC_DF_PROGRESS_CHECK.
675+
* The default value is @ref LSQUIC_DF_PROGRESS_CHECK.
674676
*/
675677
unsigned es_progress_check;
676678

@@ -864,7 +866,7 @@ struct lsquic_engine_settings {
864866
* send PING frames in the absence of other activity.
865867
*
866868
* By default, the server does not send PINGs and the period is set to zero.
867-
* The client's defaut value is @ref LSQUIC_DF_PING_PERIOD.
869+
* The client's default value is @ref LSQUIC_DF_PING_PERIOD.
868870
*/
869871
unsigned es_ping_period;
870872

0 commit comments

Comments
 (0)