diff --git a/Linux/Change-Log.txt b/Linux/Change-Log.txt index 22ed2af6b..639d7e835 100644 --- a/Linux/Change-Log.txt +++ b/Linux/Change-Log.txt @@ -2,6 +2,20 @@ v6.0.1 Update: ========================================================================================== +> Major Upadate +----------------- +1. Supports scheduled garbage memory recovery and passive garbage memory recovery (by default, scheduled recovery is used with a recovery interval of 15 seconds). + +> Third-party library Upadate +----------------- +1. openssl upgrade to version 3.0.14. +2. llhttp upgrade to version 9.2.1. +3. mimalloc upgrade to version 2.1.7. + +========================================================================================== +v6.0.1 Update: +========================================================================================== + > Major Upadate ----------------- 1. Optimize epoll multiplexing event processing to avoid the "shock group" problem. diff --git a/Linux/dependent/android-ndk/arm64-v8a/include/openssl/opensslv.h b/Linux/dependent/android-ndk/arm64-v8a/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/android-ndk/arm64-v8a/include/openssl/opensslv.h +++ b/Linux/dependent/android-ndk/arm64-v8a/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/android-ndk/arm64-v8a/include/openssl/sslerr.h b/Linux/dependent/android-ndk/arm64-v8a/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/android-ndk/arm64-v8a/include/openssl/sslerr.h +++ b/Linux/dependent/android-ndk/arm64-v8a/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/android-ndk/arm64-v8a/lib/libcrypto.a b/Linux/dependent/android-ndk/arm64-v8a/lib/libcrypto.a index 32ac2b10b..a2b3ceac8 100644 Binary files a/Linux/dependent/android-ndk/arm64-v8a/lib/libcrypto.a and b/Linux/dependent/android-ndk/arm64-v8a/lib/libcrypto.a differ diff --git a/Linux/dependent/android-ndk/arm64-v8a/lib/libmimalloc.a b/Linux/dependent/android-ndk/arm64-v8a/lib/libmimalloc.a index 110453f38..798f1e59f 100644 Binary files a/Linux/dependent/android-ndk/arm64-v8a/lib/libmimalloc.a and b/Linux/dependent/android-ndk/arm64-v8a/lib/libmimalloc.a differ diff --git a/Linux/dependent/android-ndk/arm64-v8a/lib/libssl.a b/Linux/dependent/android-ndk/arm64-v8a/lib/libssl.a index 4b00c0e20..129820bd9 100644 Binary files a/Linux/dependent/android-ndk/arm64-v8a/lib/libssl.a and b/Linux/dependent/android-ndk/arm64-v8a/lib/libssl.a differ diff --git a/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/opensslv.h b/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/opensslv.h +++ b/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/sslerr.h b/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/sslerr.h +++ b/Linux/dependent/android-ndk/armeabi-v7a/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/android-ndk/armeabi-v7a/lib/libcrypto.a b/Linux/dependent/android-ndk/armeabi-v7a/lib/libcrypto.a index 088614acb..cafd65a04 100644 Binary files a/Linux/dependent/android-ndk/armeabi-v7a/lib/libcrypto.a and b/Linux/dependent/android-ndk/armeabi-v7a/lib/libcrypto.a differ diff --git a/Linux/dependent/android-ndk/armeabi-v7a/lib/libmimalloc.a b/Linux/dependent/android-ndk/armeabi-v7a/lib/libmimalloc.a index e93704814..84eee171b 100644 Binary files a/Linux/dependent/android-ndk/armeabi-v7a/lib/libmimalloc.a and b/Linux/dependent/android-ndk/armeabi-v7a/lib/libmimalloc.a differ diff --git a/Linux/dependent/android-ndk/armeabi-v7a/lib/libssl.a b/Linux/dependent/android-ndk/armeabi-v7a/lib/libssl.a index c30d58242..35f712008 100644 Binary files a/Linux/dependent/android-ndk/armeabi-v7a/lib/libssl.a and b/Linux/dependent/android-ndk/armeabi-v7a/lib/libssl.a differ diff --git a/Linux/dependent/android-ndk/x86/include/openssl/opensslv.h b/Linux/dependent/android-ndk/x86/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/android-ndk/x86/include/openssl/opensslv.h +++ b/Linux/dependent/android-ndk/x86/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/android-ndk/x86/include/openssl/sslerr.h b/Linux/dependent/android-ndk/x86/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/android-ndk/x86/include/openssl/sslerr.h +++ b/Linux/dependent/android-ndk/x86/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/android-ndk/x86/lib/libcrypto.a b/Linux/dependent/android-ndk/x86/lib/libcrypto.a index 194b9778d..17bebf027 100644 Binary files a/Linux/dependent/android-ndk/x86/lib/libcrypto.a and b/Linux/dependent/android-ndk/x86/lib/libcrypto.a differ diff --git a/Linux/dependent/android-ndk/x86/lib/libmimalloc.a b/Linux/dependent/android-ndk/x86/lib/libmimalloc.a index 388076d4b..d7b9363f7 100644 Binary files a/Linux/dependent/android-ndk/x86/lib/libmimalloc.a and b/Linux/dependent/android-ndk/x86/lib/libmimalloc.a differ diff --git a/Linux/dependent/android-ndk/x86/lib/libssl.a b/Linux/dependent/android-ndk/x86/lib/libssl.a index 7a9bf86ae..8bcae34ae 100644 Binary files a/Linux/dependent/android-ndk/x86/lib/libssl.a and b/Linux/dependent/android-ndk/x86/lib/libssl.a differ diff --git a/Linux/dependent/android-ndk/x86_64/include/openssl/opensslv.h b/Linux/dependent/android-ndk/x86_64/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/android-ndk/x86_64/include/openssl/opensslv.h +++ b/Linux/dependent/android-ndk/x86_64/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/android-ndk/x86_64/include/openssl/sslerr.h b/Linux/dependent/android-ndk/x86_64/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/android-ndk/x86_64/include/openssl/sslerr.h +++ b/Linux/dependent/android-ndk/x86_64/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/android-ndk/x86_64/lib/libcrypto.a b/Linux/dependent/android-ndk/x86_64/lib/libcrypto.a index e07041801..5f3a3bb45 100644 Binary files a/Linux/dependent/android-ndk/x86_64/lib/libcrypto.a and b/Linux/dependent/android-ndk/x86_64/lib/libcrypto.a differ diff --git a/Linux/dependent/android-ndk/x86_64/lib/libmimalloc.a b/Linux/dependent/android-ndk/x86_64/lib/libmimalloc.a index aedee59bb..de0148884 100644 Binary files a/Linux/dependent/android-ndk/x86_64/lib/libmimalloc.a and b/Linux/dependent/android-ndk/x86_64/lib/libmimalloc.a differ diff --git a/Linux/dependent/android-ndk/x86_64/lib/libssl.a b/Linux/dependent/android-ndk/x86_64/lib/libssl.a index c385d038c..d0c4c3f08 100644 Binary files a/Linux/dependent/android-ndk/x86_64/lib/libssl.a and b/Linux/dependent/android-ndk/x86_64/lib/libssl.a differ diff --git a/Linux/dependent/arm/include/openssl/opensslv.h b/Linux/dependent/arm/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/arm/include/openssl/opensslv.h +++ b/Linux/dependent/arm/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/arm/include/openssl/sslerr.h b/Linux/dependent/arm/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/arm/include/openssl/sslerr.h +++ b/Linux/dependent/arm/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/arm/lib/libcrypto.a b/Linux/dependent/arm/lib/libcrypto.a index e7e13f0c7..ef12e33ae 100644 Binary files a/Linux/dependent/arm/lib/libcrypto.a and b/Linux/dependent/arm/lib/libcrypto.a differ diff --git a/Linux/dependent/arm/lib/libmimalloc.a b/Linux/dependent/arm/lib/libmimalloc.a index ce2007e63..098fb9fe2 100644 Binary files a/Linux/dependent/arm/lib/libmimalloc.a and b/Linux/dependent/arm/lib/libmimalloc.a differ diff --git a/Linux/dependent/arm/lib/libssl.a b/Linux/dependent/arm/lib/libssl.a index 3af58de51..1dad5c993 100644 Binary files a/Linux/dependent/arm/lib/libssl.a and b/Linux/dependent/arm/lib/libssl.a differ diff --git a/Linux/dependent/arm64/include/openssl/opensslv.h b/Linux/dependent/arm64/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/arm64/include/openssl/opensslv.h +++ b/Linux/dependent/arm64/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/arm64/include/openssl/sslerr.h b/Linux/dependent/arm64/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/arm64/include/openssl/sslerr.h +++ b/Linux/dependent/arm64/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/arm64/lib/libcrypto.a b/Linux/dependent/arm64/lib/libcrypto.a index 00e172b17..e4a1d067f 100644 Binary files a/Linux/dependent/arm64/lib/libcrypto.a and b/Linux/dependent/arm64/lib/libcrypto.a differ diff --git a/Linux/dependent/arm64/lib/libmimalloc.a b/Linux/dependent/arm64/lib/libmimalloc.a index bd0bd0fe8..1f2d7af48 100644 Binary files a/Linux/dependent/arm64/lib/libmimalloc.a and b/Linux/dependent/arm64/lib/libmimalloc.a differ diff --git a/Linux/dependent/arm64/lib/libssl.a b/Linux/dependent/arm64/lib/libssl.a index 7d92ce172..9480e083f 100644 Binary files a/Linux/dependent/arm64/lib/libssl.a and b/Linux/dependent/arm64/lib/libssl.a differ diff --git a/Linux/dependent/x64/include/openssl/opensslv.h b/Linux/dependent/x64/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/x64/include/openssl/opensslv.h +++ b/Linux/dependent/x64/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/x64/include/openssl/sslerr.h b/Linux/dependent/x64/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/x64/include/openssl/sslerr.h +++ b/Linux/dependent/x64/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/x64/lib/libcrypto.a b/Linux/dependent/x64/lib/libcrypto.a index 1d10a0193..2c5ff986b 100644 Binary files a/Linux/dependent/x64/lib/libcrypto.a and b/Linux/dependent/x64/lib/libcrypto.a differ diff --git a/Linux/dependent/x64/lib/libmimalloc.a b/Linux/dependent/x64/lib/libmimalloc.a index dca2054d9..8a0bf8e52 100644 Binary files a/Linux/dependent/x64/lib/libmimalloc.a and b/Linux/dependent/x64/lib/libmimalloc.a differ diff --git a/Linux/dependent/x64/lib/libssl.a b/Linux/dependent/x64/lib/libssl.a index f70d54ecc..03688233a 100644 Binary files a/Linux/dependent/x64/lib/libssl.a and b/Linux/dependent/x64/lib/libssl.a differ diff --git a/Linux/dependent/x86/include/openssl/opensslv.h b/Linux/dependent/x86/include/openssl/opensslv.h index 012d77ee8..537144b32 100644 --- a/Linux/dependent/x86/include/openssl/opensslv.h +++ b/Linux/dependent/x86/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Linux/dependent/x86/include/openssl/sslerr.h b/Linux/dependent/x86/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Linux/dependent/x86/include/openssl/sslerr.h +++ b/Linux/dependent/x86/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Linux/dependent/x86/lib/libcrypto.a b/Linux/dependent/x86/lib/libcrypto.a index 3d0a66921..acc871313 100644 Binary files a/Linux/dependent/x86/lib/libcrypto.a and b/Linux/dependent/x86/lib/libcrypto.a differ diff --git a/Linux/dependent/x86/lib/libmimalloc.a b/Linux/dependent/x86/lib/libmimalloc.a index b09c7be73..d4d47ce4a 100644 Binary files a/Linux/dependent/x86/lib/libmimalloc.a and b/Linux/dependent/x86/lib/libmimalloc.a differ diff --git a/Linux/dependent/x86/lib/libssl.a b/Linux/dependent/x86/lib/libssl.a index 5c894a05d..be83e5820 100644 Binary files a/Linux/dependent/x86/lib/libssl.a and b/Linux/dependent/x86/lib/libssl.a differ diff --git a/Linux/include/hpsocket/HPTypeDef.h b/Linux/include/hpsocket/HPTypeDef.h index fa0e06806..4da0ed355 100644 --- a/Linux/include/hpsocket/HPTypeDef.h +++ b/Linux/include/hpsocket/HPTypeDef.h @@ -204,6 +204,7 @@ typedef enum EnSocketError SE_NETWORK = 12, // 网络错误 SE_DATA_PROC = 13, // 数据处理错误 SE_DATA_SEND = 14, // 数据发送失败 + SE_GC_START = 15, // 垃圾回收启动失败 /***** SSL Socket 扩展操作结果代码 *****/ SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪 diff --git a/Linux/project/android-ndk/jni/Android.mk b/Linux/project/android-ndk/jni/Android.mk index ac2449437..e6f087798 100644 --- a/Linux/project/android-ndk/jni/Android.mk +++ b/Linux/project/android-ndk/jni/Android.mk @@ -51,7 +51,6 @@ ifdef _MIMALLOC_DISABLED endif MY_SRC_FILES := ../../../src/common/BufferPool.cpp \ - ../../../src/common/crypto/Crypto.cpp \ ../../../src/common/Event.cpp \ ../../../src/common/FileHelper.cpp \ ../../../src/common/FuncHelper.cpp \ diff --git a/Linux/src/ArqHelper.h b/Linux/src/ArqHelper.h index c69893d19..ff3eaf9e6 100644 --- a/Linux/src/ArqHelper.h +++ b/Linux/src/ArqHelper.h @@ -692,8 +692,9 @@ template class CArqSessionPoolT : private CIOHandler { if(pSession->Reset()) { +#ifndef USE_EXTERNAL_GC ReleaseGCSession(); - +#endif if(!m_lsFreeSession.TryPut(pSession)) m_lsGCSession.PushBack(pSession); } @@ -716,7 +717,6 @@ template class CArqSessionPoolT : private CIOHandler ENSURE(m_lsGCSession.IsEmpty()); } -private: void ReleaseGCSession(BOOL bForce = FALSE) { ::ReleaseGCObj(m_lsGCSession, m_dwSessionLockTime, bForce); diff --git a/Linux/src/HttpAgent.cpp b/Linux/src/HttpAgent.cpp index b3b93c38b..a3daf3362 100644 --- a/Linux/src/HttpAgent.cpp +++ b/Linux/src/HttpAgent.cpp @@ -197,6 +197,15 @@ template EnHandleResult CHttpAgentT void CHttpAgentT::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_objPool.ReleaseGCHttpObj(bForce); +#endif +} + template BOOL CHttpAgentT::IsUpgrade(CONNID dwConnID) { THttpObj* pHttpObj = FindHttpObj(dwConnID); diff --git a/Linux/src/HttpAgent.h b/Linux/src/HttpAgent.h index 29149e05b..ab79bca75 100644 --- a/Linux/src/HttpAgent.h +++ b/Linux/src/HttpAgent.h @@ -134,6 +134,8 @@ template class CHttpAgentT : public IComplexHttpRe virtual EnHandleResult DoFireClose(TAgentSocketObj* pSocketObj, EnSocketOperation enOperation, int iErrorCode); virtual EnHandleResult DoFireShutdown(); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + EnHandleResult DoFireSuperReceive(TAgentSocketObj* pSocketObj, const BYTE* pData, int iLength) {return __super::DoFireReceive(pSocketObj, pData, iLength);} diff --git a/Linux/src/HttpHelper.h b/Linux/src/HttpHelper.h index 20f25d3f2..c4d375f68 100644 --- a/Linux/src/HttpHelper.h +++ b/Linux/src/HttpHelper.h @@ -87,7 +87,7 @@ typedef llhttp_settings_t http_parser_settings; #define MIN_HTTP_RELEASE_CHECK_INTERVAL ((DWORD)1000) #define MIN_HTTP_RELEASE_DELAY 100 #define MAX_HTTP_RELEASE_DELAY (60 * 1000) -#define DEFAULT_HTTP_RELEASE_DELAY (3 * 1000) +#define DEFAULT_HTTP_RELEASE_DELAY (5 * 1000) #define DEFAULT_HTTP_VERSION HV_1_1 #define DEFAULT_HTTP_SYNC_CONNECT_TIMEOUT 5000 @@ -1302,8 +1302,9 @@ template class CHttpObjPoolT { pHttpObj->SetFree(); +#ifndef USE_EXTERNAL_GC ReleaseGCHttpObj(); - +#endif if(!m_lsFreeHttpObj.TryPut(pHttpObj)) m_lsGCHttpObj.PushBack(pHttpObj); } @@ -1321,7 +1322,6 @@ template class CHttpObjPoolT VERIFY(m_lsGCHttpObj.IsEmpty()); } -private: void ReleaseGCHttpObj(BOOL bForce = FALSE) { ::ReleaseGCObj(m_lsGCHttpObj, m_dwHttpObjLockTime, bForce); diff --git a/Linux/src/HttpServer.cpp b/Linux/src/HttpServer.cpp index c3678caf1..1f5cc4cda 100644 --- a/Linux/src/HttpServer.cpp +++ b/Linux/src/HttpServer.cpp @@ -293,6 +293,15 @@ template EnHandleResult CHttpServerT void CHttpServerT::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_objPool.ReleaseGCHttpObj(bForce); +#endif +} + template void CHttpServerT::WaitForCleanerThreadEnd() { if(m_thCleaner.IsRunning()) diff --git a/Linux/src/HttpServer.h b/Linux/src/HttpServer.h index 51b6f7197..6decd3258 100644 --- a/Linux/src/HttpServer.h +++ b/Linux/src/HttpServer.h @@ -128,6 +128,8 @@ template class CHttpServerT : public IComplexHttpR virtual EnHandleResult DoFireClose(TSocketObj* pSocketObj, EnSocketOperation enOperation, int iErrorCode); virtual EnHandleResult DoFireShutdown(); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + EnHandleResult DoFireSuperReceive(TSocketObj* pSocketObj, const BYTE* pData, int iLength) {return __super::DoFireReceive(pSocketObj, pData, iLength);} diff --git a/Linux/src/InternalDef.h b/Linux/src/InternalDef.h index f529ba4d5..7fc3327c9 100644 --- a/Linux/src/InternalDef.h +++ b/Linux/src/InternalDef.h @@ -107,6 +107,9 @@ /* Ĭѹ/ѹݻ */ #define DEFAULT_COMPRESS_BUFFER_SIZE (16 * 1024) +/* ռ룩 */ +#define GC_CHECK_INTERVAL (15 * 1000) + #define HOST_SEPARATOR_CHAR '^' #define PORT_SEPARATOR_CHAR ':' #define IPV6_ADDR_BEGIN_CHAR '[' diff --git a/Linux/src/SSLAgent.cpp b/Linux/src/SSLAgent.cpp index 4ada9749a..4b3dd7d1f 100644 --- a/Linux/src/SSLAgent.cpp +++ b/Linux/src/SSLAgent.cpp @@ -66,6 +66,15 @@ void CSSLAgent::OnWorkerThreadEnd(THR_ID dwThreadID) __super::OnWorkerThreadEnd(dwThreadID); } +void CSSLAgent::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_sslPool.ReleaseGCSession(bForce); +#endif +} + BOOL CSSLAgent::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount) { ASSERT(pBuffers && iCount > 0); diff --git a/Linux/src/SSLAgent.h b/Linux/src/SSLAgent.h index c19675d19..901c9ba63 100644 --- a/Linux/src/SSLAgent.h +++ b/Linux/src/SSLAgent.h @@ -70,6 +70,8 @@ class CSSLAgent : public CTcpAgent virtual void OnWorkerThreadEnd(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + protected: virtual BOOL StartSSLHandShake(TAgentSocketObj* pSocketObj); diff --git a/Linux/src/SSLHelper.cpp b/Linux/src/SSLHelper.cpp index 71e67c53f..27be3a63d 100644 --- a/Linux/src/SSLHelper.cpp +++ b/Linux/src/SSLHelper.cpp @@ -1168,8 +1168,9 @@ void CSSLSessionPool::PutFreeSession(CSSLSession* pSession) { if(pSession->Reset()) { +#ifndef USE_EXTERNAL_GC ReleaseGCSession(); - +#endif if(!m_lsFreeSession.TryPut(pSession)) m_lsGCSession.PushBack(pSession); } diff --git a/Linux/src/SSLHelper.h b/Linux/src/SSLHelper.h index edcc7728a..b0e83fa56 100644 --- a/Linux/src/SSLHelper.h +++ b/Linux/src/SSLHelper.h @@ -336,7 +336,6 @@ class CSSLSessionPool void Prepare (); void Clear (); -private: void ReleaseGCSession (BOOL bForce = FALSE); public: diff --git a/Linux/src/SSLServer.cpp b/Linux/src/SSLServer.cpp index 210aa6528..66dbafc0f 100644 --- a/Linux/src/SSLServer.cpp +++ b/Linux/src/SSLServer.cpp @@ -66,6 +66,15 @@ void CSSLServer::OnWorkerThreadEnd(THR_ID dwThreadID) __super::OnWorkerThreadEnd(dwThreadID); } +void CSSLServer::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_sslPool.ReleaseGCSession(bForce); +#endif +} + BOOL CSSLServer::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount) { ASSERT(pBuffers && iCount > 0); diff --git a/Linux/src/SSLServer.h b/Linux/src/SSLServer.h index fb4a86b26..70cb89b5d 100644 --- a/Linux/src/SSLServer.h +++ b/Linux/src/SSLServer.h @@ -78,6 +78,8 @@ class CSSLServer : public CTcpServer virtual void OnWorkerThreadEnd(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + protected: virtual BOOL StartSSLHandShake(TSocketObj* pSocketObj); diff --git a/Linux/src/SocketHelper.cpp b/Linux/src/SocketHelper.cpp index 9245630c6..05b16f43e 100644 --- a/Linux/src/SocketHelper.cpp +++ b/Linux/src/SocketHelper.cpp @@ -77,6 +77,7 @@ LPCTSTR GetSocketErrorDesc(EnSocketError enCode) case SE_NETWORK: return _T("Network Error"); case SE_DATA_PROC: return _T("Process Data Error"); case SE_DATA_SEND: return _T("Send Data Fail"); + case SE_GC_START: return _T("Start GC Fail"); case SE_SSL_ENV_NOT_READY: return _T("SSL environment not ready"); diff --git a/Linux/src/TcpAgent.cpp b/Linux/src/TcpAgent.cpp index ef037bb26..e5bc700ba 100644 --- a/Linux/src/TcpAgent.cpp +++ b/Linux/src/TcpAgent.cpp @@ -155,7 +155,29 @@ BOOL CTcpAgent::ParseBindAddress(LPCTSTR lpszBindAddress) BOOL CTcpAgent::CreateWorkerThreads() { - return m_ioDispatcher.Start(this, DEFAULT_WORKER_MAX_EVENT_COUNT, m_dwWorkerThreadCount); + DWORD dwWorkerThreadCount = m_dwWorkerThreadCount +#ifdef USE_EXTERNAL_GC + + 1 +#endif + ; + + if(!m_ioDispatcher.Start(this, DEFAULT_WORKER_MAX_EVENT_COUNT, dwWorkerThreadCount)) + { + SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } + +#ifdef USE_EXTERNAL_GC + m_fdGCTimer = m_ioDispatcher.AddTimer(m_dwWorkerThreadCount, GC_CHECK_INTERVAL, this); + + if(IS_INVALID_FD(m_fdGCTimer)) + { + SetLastError(SE_GC_START, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } +#endif + + return TRUE; } BOOL CTcpAgent::Stop() @@ -213,6 +235,14 @@ void CTcpAgent::ReleaseFreeSocket() { m_lsFreeSocket.Clear(); +#ifdef USE_EXTERNAL_GC + if(IS_VALID_FD(m_fdGCTimer)) + { + close(m_fdGCTimer); + m_fdGCTimer = INVALID_FD; + } +#endif + ReleaseGCSocketObj(TRUE); VERIFY(m_lsGCSocket.IsEmpty()); } @@ -428,7 +458,9 @@ void CTcpAgent::AddFreeSocketObj(TAgentSocketObj* pSocketObj, EnSocketCloseFlag m_bfActiveSockets.Remove(pSocketObj->connID); TAgentSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -860,6 +892,14 @@ BOOL CTcpAgent::PauseReceive(CONNID dwConnID, BOOL bPause) BOOL CTcpAgent::OnBeforeProcessIo(const TDispContext* pContext, PVOID pv, UINT events) { + if(pv == this) + { + ReleaseGCSocketObj(FALSE); + ::ReadTimer(m_fdGCTimer); + + return FALSE; + } + TAgentSocketObj* pSocketObj = (TAgentSocketObj*)(pv); if(!TAgentSocketObj::IsValid(pSocketObj)) diff --git a/Linux/src/TcpAgent.h b/Linux/src/TcpAgent.h index 33680de7d..5acbffcb9 100644 --- a/Linux/src/TcpAgent.h +++ b/Linux/src/TcpAgent.h @@ -173,6 +173,8 @@ class CTcpAgent : public ITcpAgent, private CIOHandler virtual void OnWorkerThreadStart(THR_ID tid) {} virtual void OnWorkerThreadEnd(THR_ID tid) {} + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + BOOL DoSendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount); BOOL DoSendPackets(TAgentSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount); TAgentSocketObj* FindSocketObj(CONNID dwConnID); @@ -207,7 +209,6 @@ class CTcpAgent : public ITcpAgent, private CIOHandler void AddFreeSocketObj (TAgentSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0); void DeleteSocketObj (TAgentSocketObj* pSocketObj); BOOL InvalidSocketObj (TAgentSocketObj* pSocketObj); - void ReleaseGCSocketObj (BOOL bForce = FALSE); void AddClientSocketObj (CONNID dwConnID, TAgentSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr, LPCTSTR lpszRemoteHostName, PVOID pExtra); void CloseClientSocketObj(TAgentSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, int iShutdownFlag = SHUT_WR); @@ -232,6 +233,7 @@ class CTcpAgent : public ITcpAgent, private CIOHandler : m_pListener (pListener) , m_enLastError (SE_OK) , m_enState (SS_STOPPED) + , m_fdGCTimer (INVALID_FD) , m_bAsyncConnect (TRUE) , m_enReusePolicy (RAP_ADDR_ONLY) , m_enSendPolicy (SP_PACK) @@ -293,6 +295,8 @@ class CTcpAgent : public ITcpAgent, private CIOHandler CSpinGuard m_csState; + FD m_fdGCTimer; + TAgentSocketObjPtrPool m_bfActiveSockets; TAgentSocketObjPtrList m_lsFreeSocket; diff --git a/Linux/src/TcpPackAgent.h b/Linux/src/TcpPackAgent.h index a81a9ae09..ad36e919a 100644 --- a/Linux/src/TcpPackAgent.h +++ b/Linux/src/TcpPackAgent.h @@ -155,6 +155,15 @@ template class CTcpPackAgentT : public IPackSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + public: virtual void SetMaxPackSize (DWORD dwMaxPackSize) {ENSURE_HAS_STOPPED(); m_dwMaxPackSize = dwMaxPackSize;} virtual void SetPackHeaderFlag (USHORT usPackHeaderFlag) {ENSURE_HAS_STOPPED(); m_usHeaderFlag = usPackHeaderFlag;} diff --git a/Linux/src/TcpPackServer.h b/Linux/src/TcpPackServer.h index 2357d6676..b7dd78670 100644 --- a/Linux/src/TcpPackServer.h +++ b/Linux/src/TcpPackServer.h @@ -155,6 +155,15 @@ template class CTcpPackServerT : public IPackSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + public: virtual void SetMaxPackSize (DWORD dwMaxPackSize) {ENSURE_HAS_STOPPED(); m_dwMaxPackSize = dwMaxPackSize;} virtual void SetPackHeaderFlag (USHORT usPackHeaderFlag) {ENSURE_HAS_STOPPED(); m_usHeaderFlag = usPackHeaderFlag;} diff --git a/Linux/src/TcpPullAgent.h b/Linux/src/TcpPullAgent.h index 3d53a37f2..068a004d9 100644 --- a/Linux/src/TcpPullAgent.h +++ b/Linux/src/TcpPullAgent.h @@ -125,6 +125,15 @@ template class CTcpPullAgentT : public IPullSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + private: void ReleaseConnectionExtra(TAgentSocketObj* pSocketObj) { diff --git a/Linux/src/TcpPullServer.h b/Linux/src/TcpPullServer.h index b8b90114d..19213b994 100644 --- a/Linux/src/TcpPullServer.h +++ b/Linux/src/TcpPullServer.h @@ -125,6 +125,15 @@ template class CTcpPullServerT : public IPullSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + private: void ReleaseConnectionExtra(TSocketObj* pSocketObj) { diff --git a/Linux/src/TcpServer.cpp b/Linux/src/TcpServer.cpp index b61c6aff5..b051cc0b4 100644 --- a/Linux/src/TcpServer.cpp +++ b/Linux/src/TcpServer.cpp @@ -179,7 +179,19 @@ BOOL CTcpServer::CreateListenSocket(LPCTSTR lpszBindAddress, USHORT usPort) BOOL CTcpServer::CreateWorkerThreads() { - return m_ioDispatcher.Start(this, m_dwAcceptSocketCount, m_dwWorkerThreadCount); + DWORD dwWorkerThreadCount = m_dwWorkerThreadCount +#ifdef USE_EXTERNAL_GC + + 1 +#endif + ; + + if(!m_ioDispatcher.Start(this, m_dwAcceptSocketCount, dwWorkerThreadCount)) + { + SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } + + return TRUE; } BOOL CTcpServer::StartAccept() @@ -189,8 +201,21 @@ BOOL CTcpServer::StartAccept() SOCKET& soListen = m_soListens[i]; if(!m_ioDispatcher.AddFD(i, soListen, EPOLLIN | EPOLLET, TO_PVOID(&soListen))) + { + SetLastError(SE_SOCKE_ATTACH_TO_CP, __FUNCTION__, ::WSAGetLastError()); return FALSE; + } + } + +#ifdef USE_EXTERNAL_GC + m_fdGCTimer = m_ioDispatcher.AddTimer(m_dwWorkerThreadCount, GC_CHECK_INTERVAL, this); + + if(IS_INVALID_FD(m_fdGCTimer)) + { + SetLastError(SE_GC_START, __FUNCTION__, ::WSAGetLastError()); + return FALSE; } +#endif return TRUE; } @@ -267,6 +292,14 @@ void CTcpServer::ReleaseFreeSocket() { m_lsFreeSocket.Clear(); +#ifdef USE_EXTERNAL_GC + if(IS_VALID_FD(m_fdGCTimer)) + { + close(m_fdGCTimer); + m_fdGCTimer = INVALID_FD; + } +#endif + ReleaseGCSocketObj(TRUE); VERIFY(m_lsGCSocket.IsEmpty()); } @@ -326,7 +359,9 @@ void CTcpServer::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFl m_bfActiveSockets.Remove(pSocketObj->connID); TSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -723,6 +758,13 @@ BOOL CTcpServer::OnBeforeProcessIo(const TDispContext* pContext, PVOID pv, UINT HandleAccept(pContext, events); return FALSE; } + else if(pv == this) + { + ReleaseGCSocketObj(FALSE); + ::ReadTimer(m_fdGCTimer); + + return FALSE; + } TSocketObj* pSocketObj = (TSocketObj*)(pv); diff --git a/Linux/src/TcpServer.h b/Linux/src/TcpServer.h index 1018c1b06..a13f44f58 100644 --- a/Linux/src/TcpServer.h +++ b/Linux/src/TcpServer.h @@ -177,6 +177,8 @@ class CTcpServer : public ITcpServer, private CIOHandler virtual void OnWorkerThreadStart(THR_ID tid) {} virtual void OnWorkerThreadEnd(THR_ID tid) {} + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + BOOL DoSendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount); BOOL DoSendPackets(TSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount); TSocketObj* FindSocketObj(CONNID dwConnID); @@ -212,7 +214,6 @@ class CTcpServer : public ITcpServer, private CIOHandler void AddFreeSocketObj (TSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0); void DeleteSocketObj (TSocketObj* pSocketObj); BOOL InvalidSocketObj (TSocketObj* pSocketObj); - void ReleaseGCSocketObj (BOOL bForce = FALSE); void AddClientSocketObj (CONNID dwConnID, TSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr); void CloseClientSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, int iShutdownFlag = SHUT_WR); @@ -233,6 +234,7 @@ class CTcpServer : public ITcpServer, private CIOHandler : m_pListener (pListener) , m_enLastError (SE_OK) , m_enState (SS_STOPPED) + , m_fdGCTimer (INVALID_FD) , m_enReusePolicy (RAP_ADDR_AND_PORT) , m_enSendPolicy (SP_PACK) , m_enOnSendSyncPolicy (OSSP_RECEIVE) @@ -293,6 +295,8 @@ class CTcpServer : public ITcpServer, private CIOHandler CSpinGuard m_csState; + FD m_fdGCTimer; + TSocketObjPtrPool m_bfActiveSockets; TSocketObjPtrList m_lsFreeSocket; diff --git a/Linux/src/UdpArqServer.cpp b/Linux/src/UdpArqServer.cpp index 0da419c6d..6eac8d460 100644 --- a/Linux/src/UdpArqServer.cpp +++ b/Linux/src/UdpArqServer.cpp @@ -73,6 +73,15 @@ void CUdpArqServer::OnWorkerThreadStart(THR_ID dwThreadID) ::WaitFor(3); } +void CUdpArqServer::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_ssPool.ReleaseGCSession(bForce); +#endif +} + BOOL CUdpArqServer::Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset) { ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_arqAttr.dwMaxMessageSize); diff --git a/Linux/src/UdpArqServer.h b/Linux/src/UdpArqServer.h index 53c9b9b4f..257260634 100644 --- a/Linux/src/UdpArqServer.h +++ b/Linux/src/UdpArqServer.h @@ -55,6 +55,8 @@ class CUdpArqServer : public IArqSocket, public CUdpServer virtual void Reset(); virtual void OnWorkerThreadStart(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + public: virtual void SetNoDelay (BOOL bNoDelay) {ENSURE_HAS_STOPPED(); m_arqAttr.bNoDelay = bNoDelay;} virtual void SetTurnoffCongestCtrl (BOOL bTurnOff) {ENSURE_HAS_STOPPED(); m_arqAttr.bTurnoffNc = bTurnOff;} diff --git a/Linux/src/UdpServer.cpp b/Linux/src/UdpServer.cpp index 1f804bef9..af7510ee3 100644 --- a/Linux/src/UdpServer.cpp +++ b/Linux/src/UdpServer.cpp @@ -177,7 +177,29 @@ BOOL CUdpServer::CreateListenSocket(LPCTSTR lpszBindAddress, USHORT usPort) BOOL CUdpServer::CreateWorkerThreads() { - return m_ioDispatcher.Start(this, m_dwPostReceiveCount, m_dwWorkerThreadCount); + DWORD dwWorkerThreadCount = m_dwWorkerThreadCount +#ifdef USE_EXTERNAL_GC + + 1 +#endif + ; + + if(!m_ioDispatcher.Start(this, m_dwPostReceiveCount, dwWorkerThreadCount)) + { + SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } + +#ifdef USE_EXTERNAL_GC + m_fdGCTimer = m_ioDispatcher.AddTimer(m_dwWorkerThreadCount, GC_CHECK_INTERVAL, this); + + if(IS_INVALID_FD(m_fdGCTimer)) + { + SetLastError(SE_GC_START, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } +#endif + + return TRUE; } BOOL CUdpServer::StartAccept() @@ -187,9 +209,22 @@ BOOL CUdpServer::StartAccept() SOCKET& soListen = m_soListens[i]; if(!m_ioDispatcher.AddFD(i, soListen, EPOLLIN | EPOLLOUT | EPOLLET, TO_PVOID(&soListen))) + { + SetLastError(SE_SOCKE_ATTACH_TO_CP, __FUNCTION__, ::WSAGetLastError()); return FALSE; + } } +#ifdef USE_EXTERNAL_GC + m_fdGCTimer = m_ioDispatcher.AddTimer(m_dwWorkerThreadCount, GC_CHECK_INTERVAL, this); + + if(IS_INVALID_FD(m_fdGCTimer)) + { + SetLastError(SE_GC_START, __FUNCTION__, ::WSAGetLastError()); + return FALSE; + } +#endif + return TRUE; } @@ -294,6 +329,14 @@ void CUdpServer::ReleaseFreeSocket() { m_lsFreeSocket.Clear(); +#ifdef USE_EXTERNAL_GC + if(IS_VALID_FD(m_fdGCTimer)) + { + close(m_fdGCTimer); + m_fdGCTimer = INVALID_FD; + } +#endif + ReleaseGCSocketObj(TRUE); VERIFY(m_lsGCSocket.IsEmpty()); } @@ -366,7 +409,9 @@ void CUdpServer::AddFreeSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag e m_ioDispatcher.DelTimer(pSocketObj->index, pSocketObj->fdTimer); TUdpSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -760,6 +805,13 @@ BOOL CUdpServer::OnBeforeProcessIo(const TDispContext* pContext, PVOID pv, UINT { if(pv == &m_soListens[pContext->GetIndex()]) return TRUE; + else if(pv == this) + { + ReleaseGCSocketObj(FALSE); + ::ReadTimer(m_fdGCTimer); + + return FALSE; + } if(!(events & _EPOLL_ALL_ERROR_EVENTS)) DetectConnection(pv); diff --git a/Linux/src/UdpServer.h b/Linux/src/UdpServer.h index 8b2814877..b42caa9a3 100644 --- a/Linux/src/UdpServer.h +++ b/Linux/src/UdpServer.h @@ -154,8 +154,10 @@ class CUdpServer : public IUdpServer, private CIOHandler virtual void PrepareStart(); virtual void Reset(); - virtual void OnWorkerThreadStart(THR_ID tid) {} - virtual void OnWorkerThreadEnd(THR_ID tid) {} + virtual void OnWorkerThreadStart(THR_ID tid) {} + virtual void OnWorkerThreadEnd(THR_ID tid) {} + + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); TUdpSocketObj* FindSocketObj(CONNID dwConnID); int SendInternal(TUdpSocketObj* pSocketObj, TItemPtr& itPtr); @@ -196,7 +198,6 @@ class CUdpServer : public IUdpServer, private CIOHandler void AddFreeSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, BOOL bNotify = TRUE); void DeleteSocketObj(TUdpSocketObj* pSocketObj); BOOL InvalidSocketObj(TUdpSocketObj* pSocketObj); - void ReleaseGCSocketObj(BOOL bForce = FALSE); void AddClientSocketObj(int idx, CONNID dwConnID, TUdpSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr); void CloseClientSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, BOOL bNotify = TRUE); @@ -223,6 +224,7 @@ class CUdpServer : public IUdpServer, private CIOHandler : m_pListener (pListener) , m_enLastError (SE_OK) , m_enState (SS_STOPPED) + , m_fdGCTimer (INVALID_FD) , m_enSendPolicy (SP_PACK) , m_enOnSendSyncPolicy (OSSP_RECEIVE) , m_enReusePolicy (RAP_ADDR_AND_PORT) @@ -281,6 +283,8 @@ class CUdpServer : public IUdpServer, private CIOHandler CSpinGuard m_csState; + FD m_fdGCTimer; + TUdpSocketObjPtrPool m_bfActiveSockets; CSimpleRWLock m_csClientSocket; diff --git a/Linux/src/common/BufferPool.cpp b/Linux/src/common/BufferPool.cpp index 37c64b9ac..447b69868 100644 --- a/Linux/src/common/BufferPool.cpp +++ b/Linux/src/common/BufferPool.cpp @@ -208,8 +208,9 @@ void CBufferPool::PutFreeBuffer(TBuffer* pBuffer) { m_itPool.PutFreeItem(pBuffer->items); +#ifndef USE_EXTERNAL_GC ReleaseGCBuffer(); - +#endif if(!m_lsFreeBuffer.TryPut(pBuffer)) m_lsGCBuffer.PushBack(pBuffer); } diff --git a/Linux/src/common/BufferPool.h b/Linux/src/common/BufferPool.h index 5ed55ed15..9e2d48f9d 100644 --- a/Linux/src/common/BufferPool.h +++ b/Linux/src/common/BufferPool.h @@ -800,7 +800,6 @@ class CBufferPool void Prepare (); void Clear (); -private: void ReleaseGCBuffer (BOOL bForce = FALSE); public: diff --git a/Linux/src/common/FuncHelper.h b/Linux/src/common/FuncHelper.h index 5670af32d..6201aceaf 100644 --- a/Linux/src/common/FuncHelper.h +++ b/Linux/src/common/FuncHelper.h @@ -171,6 +171,9 @@ inline void PrintError(LPCSTR subject) {perror(subject);} #define TO_PVOID(v) ((PVOID)(UINT_PTR)(v)) #define FROM_PVOID(T, pv) ((T)(UINT_PTR)(pv)) +#define IS_NULL(v) ((v) == nullptr) +#define IS_NOT_NULL(v) (!IS_NULL(v)) + #define stricmp strcasecmp #define strnicmp strncasecmp #define wcsicmp wcscasecmp diff --git a/Linux/src/common/SysHelper.h b/Linux/src/common/SysHelper.h index aa361b7f6..3e2e2f362 100644 --- a/Linux/src/common/SysHelper.h +++ b/Linux/src/common/SysHelper.h @@ -49,6 +49,9 @@ using namespace std; /* 默认内存块缓存池回收阀值 */ #define DEFAULT_BUFFER_CACHE_POOL_HOLD 1024 +/* 使用外部垃圾回收 */ +#define USE_EXTERNAL_GC 1 + #define SysGetSystemConfig sysconf #define SysGetSystemInfo sysinfo diff --git a/Linux/src/common/http/llhttp.h b/Linux/src/common/http/llhttp.h index 46a7213c1..37b7934d2 100644 --- a/Linux/src/common/http/llhttp.h +++ b/Linux/src/common/http/llhttp.h @@ -3,8 +3,8 @@ #define INCLUDE_LLHTTP_H_ #define LLHTTP_VERSION_MAJOR 9 -#define LLHTTP_VERSION_MINOR 1 -#define LLHTTP_VERSION_PATCH 3 +#define LLHTTP_VERSION_MINOR 2 +#define LLHTTP_VERSION_PATCH 1 #ifndef INCLUDE_LLHTTP_ITSELF_H_ #define INCLUDE_LLHTTP_ITSELF_H_ @@ -181,7 +181,8 @@ enum llhttp_method { HTTP_SET_PARAMETER = 42, HTTP_REDIRECT = 43, HTTP_RECORD = 44, - HTTP_FLUSH = 45 + HTTP_FLUSH = 45, + HTTP_QUERY = 46 }; typedef enum llhttp_method llhttp_method_t; @@ -362,6 +363,7 @@ typedef enum llhttp_status llhttp_status_t; XX(31, LINK, LINK) \ XX(32, UNLINK, UNLINK) \ XX(33, SOURCE, SOURCE) \ + XX(46, QUERY, QUERY) \ #define RTSP_METHOD_MAP(XX) \ @@ -428,6 +430,7 @@ typedef enum llhttp_status llhttp_status_t; XX(43, REDIRECT, REDIRECT) \ XX(44, RECORD, RECORD) \ XX(45, FLUSH, FLUSH) \ + XX(46, QUERY, QUERY) \ #define HTTP_STATUS_MAP(XX) \ @@ -547,6 +550,8 @@ extern "C" { #if defined(__wasm__) #define LLHTTP_EXPORT __attribute__((visibility("default"))) +#elif defined(_WIN32) +#define LLHTTP_EXPORT __declspec(dllexport) #else #define LLHTTP_EXPORT #endif diff --git a/Linux/src/common/http/llhttp_internal.c b/Linux/src/common/http/llhttp_internal.c index d789ac6fe..999ec504e 100644 --- a/Linux/src/common/http/llhttp_internal.c +++ b/Linux/src/common/http/llhttp_internal.c @@ -170,54 +170,57 @@ static const unsigned char llparse_blob42[] = { 'G', 'E' }; static const unsigned char llparse_blob43[] = { - 'I', 'N', 'D' + 'U', 'E', 'R', 'Y' }; static const unsigned char llparse_blob44[] = { - 'O', 'R', 'D' + 'I', 'N', 'D' }; static const unsigned char llparse_blob45[] = { - 'I', 'R', 'E', 'C', 'T' + 'O', 'R', 'D' }; static const unsigned char llparse_blob46[] = { - 'O', 'R', 'T' + 'I', 'R', 'E', 'C', 'T' }; static const unsigned char llparse_blob47[] = { - 'R', 'C', 'H' + 'O', 'R', 'T' }; static const unsigned char llparse_blob48[] = { - 'P', 'A', 'R', 'A', 'M', 'E', 'T', 'E', 'R' + 'R', 'C', 'H' }; static const unsigned char llparse_blob49[] = { - 'U', 'R', 'C', 'E' + 'P', 'A', 'R', 'A', 'M', 'E', 'T', 'E', 'R' }; static const unsigned char llparse_blob50[] = { - 'B', 'S', 'C', 'R', 'I', 'B', 'E' + 'U', 'R', 'C', 'E' }; static const unsigned char llparse_blob51[] = { - 'A', 'R', 'D', 'O', 'W', 'N' + 'B', 'S', 'C', 'R', 'I', 'B', 'E' }; static const unsigned char llparse_blob52[] = { - 'A', 'C', 'E' + 'A', 'R', 'D', 'O', 'W', 'N' }; static const unsigned char llparse_blob53[] = { - 'I', 'N', 'D' + 'A', 'C', 'E' }; static const unsigned char llparse_blob54[] = { - 'N', 'K' + 'I', 'N', 'D' }; static const unsigned char llparse_blob55[] = { - 'C', 'K' + 'N', 'K' }; static const unsigned char llparse_blob56[] = { - 'U', 'B', 'S', 'C', 'R', 'I', 'B', 'E' + 'C', 'K' }; static const unsigned char llparse_blob57[] = { - 'H', 'T', 'T', 'P', '/' + 'U', 'B', 'S', 'C', 'R', 'I', 'B', 'E' }; static const unsigned char llparse_blob58[] = { - 'A', 'D' + 'H', 'T', 'T', 'P', '/' }; static const unsigned char llparse_blob59[] = { + 'A', 'D' +}; +static const unsigned char llparse_blob60[] = { 'T', 'P', '/' }; @@ -384,7 +387,7 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_almost_done, s_n_llhttp__internal__n_invoke_test_lenient_flags_17, s_n_llhttp__internal__n_header_value_lenient, - s_n_llhttp__internal__n_error_52, + s_n_llhttp__internal__n_error_54, s_n_llhttp__internal__n_header_value_otherwise, s_n_llhttp__internal__n_header_value_connection_token, s_n_llhttp__internal__n_header_value_connection_ws, @@ -392,12 +395,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_connection_2, s_n_llhttp__internal__n_header_value_connection_3, s_n_llhttp__internal__n_header_value_connection, - s_n_llhttp__internal__n_error_54, - s_n_llhttp__internal__n_error_55, + s_n_llhttp__internal__n_error_56, + s_n_llhttp__internal__n_error_57, s_n_llhttp__internal__n_header_value_content_length_ws, s_n_llhttp__internal__n_header_value_content_length, - s_n_llhttp__internal__n_error_57, - s_n_llhttp__internal__n_error_56, + s_n_llhttp__internal__n_error_59, + s_n_llhttp__internal__n_error_58, s_n_llhttp__internal__n_header_value_te_token_ows, s_n_llhttp__internal__n_header_value, s_n_llhttp__internal__n_header_value_te_token, @@ -430,12 +433,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_req_http_complete, s_n_llhttp__internal__n_invoke_load_method_1, s_n_llhttp__internal__n_invoke_llhttp__on_version_complete, - s_n_llhttp__internal__n_error_64, - s_n_llhttp__internal__n_error_71, + s_n_llhttp__internal__n_error_66, + s_n_llhttp__internal__n_error_73, s_n_llhttp__internal__n_req_http_minor, - s_n_llhttp__internal__n_error_72, + s_n_llhttp__internal__n_error_74, s_n_llhttp__internal__n_req_http_dot, - s_n_llhttp__internal__n_error_73, + s_n_llhttp__internal__n_error_75, s_n_llhttp__internal__n_req_http_major, s_n_llhttp__internal__n_span_start_llhttp__on_version, s_n_llhttp__internal__n_req_http_start_1, @@ -511,34 +514,35 @@ enum llparse_state_e { s_n_llhttp__internal__n_after_start_req_45, s_n_llhttp__internal__n_after_start_req_44, s_n_llhttp__internal__n_after_start_req_33, - s_n_llhttp__internal__n_after_start_req_48, + s_n_llhttp__internal__n_after_start_req_46, s_n_llhttp__internal__n_after_start_req_49, s_n_llhttp__internal__n_after_start_req_50, s_n_llhttp__internal__n_after_start_req_51, + s_n_llhttp__internal__n_after_start_req_52, + s_n_llhttp__internal__n_after_start_req_48, s_n_llhttp__internal__n_after_start_req_47, - s_n_llhttp__internal__n_after_start_req_46, - s_n_llhttp__internal__n_after_start_req_54, - s_n_llhttp__internal__n_after_start_req_56, - s_n_llhttp__internal__n_after_start_req_57, s_n_llhttp__internal__n_after_start_req_55, - s_n_llhttp__internal__n_after_start_req_53, + s_n_llhttp__internal__n_after_start_req_57, s_n_llhttp__internal__n_after_start_req_58, + s_n_llhttp__internal__n_after_start_req_56, + s_n_llhttp__internal__n_after_start_req_54, s_n_llhttp__internal__n_after_start_req_59, - s_n_llhttp__internal__n_after_start_req_52, - s_n_llhttp__internal__n_after_start_req_61, - s_n_llhttp__internal__n_after_start_req_62, s_n_llhttp__internal__n_after_start_req_60, - s_n_llhttp__internal__n_after_start_req_65, - s_n_llhttp__internal__n_after_start_req_67, - s_n_llhttp__internal__n_after_start_req_68, + s_n_llhttp__internal__n_after_start_req_53, + s_n_llhttp__internal__n_after_start_req_62, + s_n_llhttp__internal__n_after_start_req_63, + s_n_llhttp__internal__n_after_start_req_61, s_n_llhttp__internal__n_after_start_req_66, + s_n_llhttp__internal__n_after_start_req_68, s_n_llhttp__internal__n_after_start_req_69, + s_n_llhttp__internal__n_after_start_req_67, + s_n_llhttp__internal__n_after_start_req_70, + s_n_llhttp__internal__n_after_start_req_65, s_n_llhttp__internal__n_after_start_req_64, - s_n_llhttp__internal__n_after_start_req_63, s_n_llhttp__internal__n_after_start_req, s_n_llhttp__internal__n_span_start_llhttp__on_method_1, s_n_llhttp__internal__n_res_line_almost_done, - s_n_llhttp__internal__n_invoke_test_lenient_flags_29, + s_n_llhttp__internal__n_invoke_test_lenient_flags_30, s_n_llhttp__internal__n_res_status, s_n_llhttp__internal__n_span_start_llhttp__on_status, s_n_llhttp__internal__n_res_status_code_otherwise, @@ -547,12 +551,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_res_status_code_digit_1, s_n_llhttp__internal__n_res_after_version, s_n_llhttp__internal__n_invoke_llhttp__on_version_complete_1, - s_n_llhttp__internal__n_error_87, - s_n_llhttp__internal__n_error_101, + s_n_llhttp__internal__n_error_89, + s_n_llhttp__internal__n_error_103, s_n_llhttp__internal__n_res_http_minor, - s_n_llhttp__internal__n_error_102, + s_n_llhttp__internal__n_error_104, s_n_llhttp__internal__n_res_http_dot, - s_n_llhttp__internal__n_error_103, + s_n_llhttp__internal__n_error_105, s_n_llhttp__internal__n_res_http_major, s_n_llhttp__internal__n_span_start_llhttp__on_version_1, s_n_llhttp__internal__n_start_res, @@ -891,7 +895,7 @@ int llhttp__internal__c_test_flags_4( return (state->flags & 512) == 512; } -int llhttp__internal__c_test_lenient_flags_21( +int llhttp__internal__c_test_lenient_flags_22( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -1022,7 +1026,7 @@ int llhttp__internal__c_test_flags_3( return (state->flags & 8) == 8; } -int llhttp__internal__c_test_lenient_flags_19( +int llhttp__internal__c_test_lenient_flags_20( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -1086,7 +1090,7 @@ int llhttp__internal__c_store_http_minor( return 0; } -int llhttp__internal__c_test_lenient_flags_23( +int llhttp__internal__c_test_lenient_flags_24( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -2141,7 +2145,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_18; default: - goto s_n_llhttp__internal__n_error_47; + goto s_n_llhttp__internal__n_error_48; } /* UNREACHABLE */; abort(); @@ -2202,10 +2206,10 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 9: { - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; } case ' ': { - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; } default: { goto s_n_llhttp__internal__n_invoke_load_header_state_5; @@ -2225,7 +2229,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_lws; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_53; } } /* UNREACHABLE */; @@ -2237,7 +2241,7 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_almost_done; default: - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_51; } /* UNREACHABLE */; abort(); @@ -2262,8 +2266,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_52: - s_n_llhttp__internal__n_error_52: { + case s_n_llhttp__internal__n_error_54: + s_n_llhttp__internal__n_error_54: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -2285,7 +2289,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_19; } } /* UNREACHABLE */; @@ -2462,8 +2466,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_54: - s_n_llhttp__internal__n_error_54: { + case s_n_llhttp__internal__n_error_56: + s_n_llhttp__internal__n_error_56: { state->error = 0xb; state->reason = "Content-Length overflow"; state->error_pos = (const char*) p; @@ -2472,8 +2476,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_55: - s_n_llhttp__internal__n_error_55: { + case s_n_llhttp__internal__n_error_57: + s_n_llhttp__internal__n_error_57: { state->error = 0xb; state->reason = "Invalid character in Content-Length"; state->error_pos = (const char*) p; @@ -2568,8 +2572,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_57: - s_n_llhttp__internal__n_error_57: { + case s_n_llhttp__internal__n_error_59: + s_n_llhttp__internal__n_error_59: { state->error = 0xf; state->reason = "Invalid `Transfer-Encoding` header value"; state->error_pos = (const char*) p; @@ -2578,8 +2582,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_56: - s_n_llhttp__internal__n_error_56: { + case s_n_llhttp__internal__n_error_58: + s_n_llhttp__internal__n_error_58: { state->error = 0xf; state->reason = "Invalid `Transfer-Encoding` header value"; state->error_pos = (const char*) p; @@ -2818,7 +2822,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_19; default: - goto s_n_llhttp__internal__n_error_44; + goto s_n_llhttp__internal__n_error_45; } /* UNREACHABLE */; abort(); @@ -2833,7 +2837,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; } default: { - goto s_n_llhttp__internal__n_error_60; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -3153,6 +3157,9 @@ static llparse_state_t llhttp__internal__run( p++; goto s_n_llhttp__internal__n_headers_almost_done; } + case ':': { + goto s_n_llhttp__internal__n_error_44; + } default: { goto s_n_llhttp__internal__n_span_start_llhttp__on_header_field; } @@ -3231,7 +3238,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_to_http_09; } default: { - goto s_n_llhttp__internal__n_error_61; + goto s_n_llhttp__internal__n_error_63; } } /* UNREACHABLE */; @@ -3256,7 +3263,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_skip_lf_to_http09_1; } default: { - goto s_n_llhttp__internal__n_error_61; + goto s_n_llhttp__internal__n_error_63; } } /* UNREACHABLE */; @@ -3274,13 +3281,13 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_error_69; + goto s_n_llhttp__internal__n_error_71; } case kMatchPause: { return s_n_llhttp__internal__n_req_pri_upgrade; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_70; + goto s_n_llhttp__internal__n_error_72; } } /* UNREACHABLE */; @@ -3297,7 +3304,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_headers_start; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_25; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_26; } } /* UNREACHABLE */; @@ -3311,14 +3318,14 @@ static llparse_state_t llhttp__internal__run( switch (*p) { case 10: { p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_24; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_25; } case 13: { p++; goto s_n_llhttp__internal__n_req_http_complete_crlf; } default: { - goto s_n_llhttp__internal__n_error_68; + goto s_n_llhttp__internal__n_error_70; } } /* UNREACHABLE */; @@ -3343,13 +3350,13 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_21; default: - goto s_n_llhttp__internal__n_error_65; + goto s_n_llhttp__internal__n_error_67; } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_64: - s_n_llhttp__internal__n_error_64: { + case s_n_llhttp__internal__n_error_66: + s_n_llhttp__internal__n_error_66: { state->error = 0x9; state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; @@ -3358,8 +3365,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_71: - s_n_llhttp__internal__n_error_71: { + case s_n_llhttp__internal__n_error_73: + s_n_llhttp__internal__n_error_73: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -3431,8 +3438,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_72: - s_n_llhttp__internal__n_error_72: { + case s_n_llhttp__internal__n_error_74: + s_n_llhttp__internal__n_error_74: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -3458,8 +3465,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_73: - s_n_llhttp__internal__n_error_73: { + case s_n_llhttp__internal__n_error_75: + s_n_llhttp__internal__n_error_75: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -3560,7 +3567,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3584,7 +3591,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3608,7 +3615,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3637,7 +3644,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_start_3; } default: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3728,7 +3735,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_fragment; } default: { - goto s_n_llhttp__internal__n_error_77; + goto s_n_llhttp__internal__n_error_79; } } /* UNREACHABLE */; @@ -3789,7 +3796,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_stub_query_3; } default: { - goto s_n_llhttp__internal__n_error_78; + goto s_n_llhttp__internal__n_error_80; } } /* UNREACHABLE */; @@ -3827,7 +3834,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_query; } default: { - goto s_n_llhttp__internal__n_error_79; + goto s_n_llhttp__internal__n_error_81; } } /* UNREACHABLE */; @@ -3952,10 +3959,10 @@ static llparse_state_t llhttp__internal__run( } case 8: { p++; - goto s_n_llhttp__internal__n_error_80; + goto s_n_llhttp__internal__n_error_82; } default: { - goto s_n_llhttp__internal__n_error_81; + goto s_n_llhttp__internal__n_error_83; } } /* UNREACHABLE */; @@ -4014,7 +4021,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server_with_at; } default: { - goto s_n_llhttp__internal__n_error_82; + goto s_n_llhttp__internal__n_error_84; } } /* UNREACHABLE */; @@ -4031,7 +4038,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server; } default: { - goto s_n_llhttp__internal__n_error_83; + goto s_n_llhttp__internal__n_error_85; } } /* UNREACHABLE */; @@ -4068,7 +4075,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema_delim_1; } default: { - goto s_n_llhttp__internal__n_error_83; + goto s_n_llhttp__internal__n_error_85; } } /* UNREACHABLE */; @@ -4120,7 +4127,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_84; + goto s_n_llhttp__internal__n_error_86; } } /* UNREACHABLE */; @@ -4161,7 +4168,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_85; + goto s_n_llhttp__internal__n_error_87; } } /* UNREACHABLE */; @@ -4259,7 +4266,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_spaces_before_url; } default: { - goto s_n_llhttp__internal__n_error_86; + goto s_n_llhttp__internal__n_error_88; } } /* UNREACHABLE */; @@ -4273,7 +4280,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_26; default: - goto s_n_llhttp__internal__n_error_105; + goto s_n_llhttp__internal__n_error_107; } /* UNREACHABLE */; abort(); @@ -4290,7 +4297,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4315,7 +4322,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4336,7 +4343,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_3; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4361,7 +4368,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4386,7 +4393,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4411,7 +4418,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_8; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4429,7 +4436,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4450,7 +4457,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_9; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4471,7 +4478,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_7; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4496,7 +4503,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_12; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4521,7 +4528,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_13; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4542,7 +4549,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_13; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4559,7 +4566,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_11; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4584,7 +4591,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_14; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4609,7 +4616,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_17; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4651,7 +4658,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_15; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4676,7 +4683,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_18; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4701,7 +4708,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_20; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4726,7 +4733,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_21; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4747,7 +4754,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_21; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4772,7 +4779,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_23; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4797,7 +4804,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_24; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4822,7 +4829,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_26; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4847,7 +4854,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_28; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4865,7 +4872,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4886,7 +4893,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_29; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4907,7 +4914,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_27; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4932,7 +4939,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_30; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4961,7 +4968,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_30; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4986,7 +4993,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_31; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5011,7 +5018,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_32; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5036,7 +5043,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_35; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5061,7 +5068,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_36; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5082,7 +5089,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_36; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5107,7 +5114,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_37; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5132,7 +5139,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_38; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5157,7 +5164,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_42; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5182,7 +5189,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_43; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5203,7 +5210,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_43; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5220,7 +5227,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_41; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5242,7 +5249,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_40; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5267,7 +5274,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_45; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5289,7 +5296,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5322,32 +5329,32 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_44; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_48: - s_n_llhttp__internal__n_after_start_req_48: { + case s_n_llhttp__internal__n_after_start_req_46: + s_n_llhttp__internal__n_after_start_req_46: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_48; + return s_n_llhttp__internal__n_after_start_req_46; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob43, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob43, 4); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 17; + match = 46; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_48; + return s_n_llhttp__internal__n_after_start_req_46; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5365,14 +5372,14 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - match = 44; + match = 17; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_49; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5385,19 +5392,19 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_after_start_req_50; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob45, 5); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob45, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 43; + match = 44; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_50; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5410,78 +5417,103 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_after_start_req_51; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob46, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob46, 5); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 20; + match = 43; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_51; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_47: - s_n_llhttp__internal__n_after_start_req_47: { + case s_n_llhttp__internal__n_after_start_req_52: + s_n_llhttp__internal__n_after_start_req_52: { + llparse_match_t match_seq; + if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_47; + return s_n_llhttp__internal__n_after_start_req_52; + } + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob47, 3); + p = match_seq.current; + switch (match_seq.status) { + case kMatchComplete: { + p++; + match = 20; + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + case kMatchPause: { + return s_n_llhttp__internal__n_after_start_req_52; + } + case kMatchMismatch: { + goto s_n_llhttp__internal__n_error_108; + } + } + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_after_start_req_48: + s_n_llhttp__internal__n_after_start_req_48: { + if (p == endp) { + return s_n_llhttp__internal__n_after_start_req_48; } switch (*p) { case 'B': { p++; - goto s_n_llhttp__internal__n_after_start_req_48; + goto s_n_llhttp__internal__n_after_start_req_49; } case 'C': { p++; - goto s_n_llhttp__internal__n_after_start_req_49; + goto s_n_llhttp__internal__n_after_start_req_50; } case 'D': { p++; - goto s_n_llhttp__internal__n_after_start_req_50; + goto s_n_llhttp__internal__n_after_start_req_51; } case 'P': { p++; - goto s_n_llhttp__internal__n_after_start_req_51; + goto s_n_llhttp__internal__n_after_start_req_52; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_46: - s_n_llhttp__internal__n_after_start_req_46: { + case s_n_llhttp__internal__n_after_start_req_47: + s_n_llhttp__internal__n_after_start_req_47: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_46; + return s_n_llhttp__internal__n_after_start_req_47; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_47; + goto s_n_llhttp__internal__n_after_start_req_48; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_54: - s_n_llhttp__internal__n_after_start_req_54: { + case s_n_llhttp__internal__n_after_start_req_55: + s_n_llhttp__internal__n_after_start_req_55: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_54; + return s_n_llhttp__internal__n_after_start_req_55; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob47, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob48, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5490,19 +5522,19 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_54; + return s_n_llhttp__internal__n_after_start_req_55; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_56: - s_n_llhttp__internal__n_after_start_req_56: { + case s_n_llhttp__internal__n_after_start_req_57: + s_n_llhttp__internal__n_after_start_req_57: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_56; + return s_n_llhttp__internal__n_after_start_req_57; } switch (*p) { case 'P': { @@ -5511,20 +5543,20 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_57: - s_n_llhttp__internal__n_after_start_req_57: { + case s_n_llhttp__internal__n_after_start_req_58: + s_n_llhttp__internal__n_after_start_req_58: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_57; + return s_n_llhttp__internal__n_after_start_req_58; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob48, 9); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob49, 9); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5533,65 +5565,65 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_57; + return s_n_llhttp__internal__n_after_start_req_58; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_55: - s_n_llhttp__internal__n_after_start_req_55: { + case s_n_llhttp__internal__n_after_start_req_56: + s_n_llhttp__internal__n_after_start_req_56: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_55; + return s_n_llhttp__internal__n_after_start_req_56; } switch (*p) { case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_56; + goto s_n_llhttp__internal__n_after_start_req_57; } case '_': { p++; - goto s_n_llhttp__internal__n_after_start_req_57; + goto s_n_llhttp__internal__n_after_start_req_58; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_53: - s_n_llhttp__internal__n_after_start_req_53: { + case s_n_llhttp__internal__n_after_start_req_54: + s_n_llhttp__internal__n_after_start_req_54: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_53; + return s_n_llhttp__internal__n_after_start_req_54; } switch (*p) { case 'A': { p++; - goto s_n_llhttp__internal__n_after_start_req_54; + goto s_n_llhttp__internal__n_after_start_req_55; } case 'T': { p++; - goto s_n_llhttp__internal__n_after_start_req_55; + goto s_n_llhttp__internal__n_after_start_req_56; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_58: - s_n_llhttp__internal__n_after_start_req_58: { + case s_n_llhttp__internal__n_after_start_req_59: + s_n_llhttp__internal__n_after_start_req_59: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_58; + return s_n_llhttp__internal__n_after_start_req_59; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob49, 4); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob50, 4); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5600,23 +5632,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_58; + return s_n_llhttp__internal__n_after_start_req_59; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_59: - s_n_llhttp__internal__n_after_start_req_59: { + case s_n_llhttp__internal__n_after_start_req_60: + s_n_llhttp__internal__n_after_start_req_60: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_59; + return s_n_llhttp__internal__n_after_start_req_60; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob50, 7); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob51, 7); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5625,48 +5657,48 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_59; + return s_n_llhttp__internal__n_after_start_req_60; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_52: - s_n_llhttp__internal__n_after_start_req_52: { + case s_n_llhttp__internal__n_after_start_req_53: + s_n_llhttp__internal__n_after_start_req_53: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_52; + return s_n_llhttp__internal__n_after_start_req_53; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_53; + goto s_n_llhttp__internal__n_after_start_req_54; } case 'O': { p++; - goto s_n_llhttp__internal__n_after_start_req_58; + goto s_n_llhttp__internal__n_after_start_req_59; } case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_59; + goto s_n_llhttp__internal__n_after_start_req_60; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_61: - s_n_llhttp__internal__n_after_start_req_61: { + case s_n_llhttp__internal__n_after_start_req_62: + s_n_llhttp__internal__n_after_start_req_62: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_61; + return s_n_llhttp__internal__n_after_start_req_62; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob51, 6); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob52, 6); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5675,23 +5707,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_61; + return s_n_llhttp__internal__n_after_start_req_62; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_62: - s_n_llhttp__internal__n_after_start_req_62: { + case s_n_llhttp__internal__n_after_start_req_63: + s_n_llhttp__internal__n_after_start_req_63: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_62; + return s_n_llhttp__internal__n_after_start_req_63; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob52, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob53, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5700,44 +5732,44 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_62; + return s_n_llhttp__internal__n_after_start_req_63; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_60: - s_n_llhttp__internal__n_after_start_req_60: { + case s_n_llhttp__internal__n_after_start_req_61: + s_n_llhttp__internal__n_after_start_req_61: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_60; + return s_n_llhttp__internal__n_after_start_req_61; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_61; + goto s_n_llhttp__internal__n_after_start_req_62; } case 'R': { p++; - goto s_n_llhttp__internal__n_after_start_req_62; + goto s_n_llhttp__internal__n_after_start_req_63; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_65: - s_n_llhttp__internal__n_after_start_req_65: { + case s_n_llhttp__internal__n_after_start_req_66: + s_n_llhttp__internal__n_after_start_req_66: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_65; + return s_n_llhttp__internal__n_after_start_req_66; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob53, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob54, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5746,23 +5778,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_65; + return s_n_llhttp__internal__n_after_start_req_66; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_67: - s_n_llhttp__internal__n_after_start_req_67: { + case s_n_llhttp__internal__n_after_start_req_68: + s_n_llhttp__internal__n_after_start_req_68: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_67; + return s_n_llhttp__internal__n_after_start_req_68; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob54, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob55, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5771,23 +5803,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_67; + return s_n_llhttp__internal__n_after_start_req_68; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_68: - s_n_llhttp__internal__n_after_start_req_68: { + case s_n_llhttp__internal__n_after_start_req_69: + s_n_llhttp__internal__n_after_start_req_69: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_68; + return s_n_llhttp__internal__n_after_start_req_69; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob55, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob56, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5796,44 +5828,44 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_68; + return s_n_llhttp__internal__n_after_start_req_69; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_66: - s_n_llhttp__internal__n_after_start_req_66: { + case s_n_llhttp__internal__n_after_start_req_67: + s_n_llhttp__internal__n_after_start_req_67: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_66; + return s_n_llhttp__internal__n_after_start_req_67; } switch (*p) { case 'I': { p++; - goto s_n_llhttp__internal__n_after_start_req_67; + goto s_n_llhttp__internal__n_after_start_req_68; } case 'O': { p++; - goto s_n_llhttp__internal__n_after_start_req_68; + goto s_n_llhttp__internal__n_after_start_req_69; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_69: - s_n_llhttp__internal__n_after_start_req_69: { + case s_n_llhttp__internal__n_after_start_req_70: + s_n_llhttp__internal__n_after_start_req_70: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_69; + return s_n_llhttp__internal__n_after_start_req_70; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob56, 8); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob57, 8); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5842,52 +5874,52 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_69; + return s_n_llhttp__internal__n_after_start_req_70; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_64: - s_n_llhttp__internal__n_after_start_req_64: { + case s_n_llhttp__internal__n_after_start_req_65: + s_n_llhttp__internal__n_after_start_req_65: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_64; + return s_n_llhttp__internal__n_after_start_req_65; } switch (*p) { case 'B': { p++; - goto s_n_llhttp__internal__n_after_start_req_65; + goto s_n_llhttp__internal__n_after_start_req_66; } case 'L': { p++; - goto s_n_llhttp__internal__n_after_start_req_66; + goto s_n_llhttp__internal__n_after_start_req_67; } case 'S': { p++; - goto s_n_llhttp__internal__n_after_start_req_69; + goto s_n_llhttp__internal__n_after_start_req_70; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_63: - s_n_llhttp__internal__n_after_start_req_63: { + case s_n_llhttp__internal__n_after_start_req_64: + s_n_llhttp__internal__n_after_start_req_64: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_63; + return s_n_llhttp__internal__n_after_start_req_64; } switch (*p) { case 'N': { p++; - goto s_n_llhttp__internal__n_after_start_req_64; + goto s_n_llhttp__internal__n_after_start_req_65; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5947,24 +5979,28 @@ static llparse_state_t llhttp__internal__run( p++; goto s_n_llhttp__internal__n_after_start_req_33; } - case 'R': { + case 'Q': { p++; goto s_n_llhttp__internal__n_after_start_req_46; } + case 'R': { + p++; + goto s_n_llhttp__internal__n_after_start_req_47; + } case 'S': { p++; - goto s_n_llhttp__internal__n_after_start_req_52; + goto s_n_llhttp__internal__n_after_start_req_53; } case 'T': { p++; - goto s_n_llhttp__internal__n_after_start_req_60; + goto s_n_llhttp__internal__n_after_start_req_61; } case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_63; + goto s_n_llhttp__internal__n_after_start_req_64; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5996,19 +6032,19 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_28; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_29; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_invoke_test_lenient_flags_29: - s_n_llhttp__internal__n_invoke_test_lenient_flags_29: { + case s_n_llhttp__internal__n_invoke_test_lenient_flags_30: + s_n_llhttp__internal__n_invoke_test_lenient_flags_30: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_92; + goto s_n_llhttp__internal__n_error_94; } /* UNREACHABLE */; abort(); @@ -6052,7 +6088,7 @@ static llparse_state_t llhttp__internal__run( switch (*p) { case 10: { p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_27; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_28; } case 13: { p++; @@ -6063,7 +6099,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_start_llhttp__on_status; } default: { - goto s_n_llhttp__internal__n_error_93; + goto s_n_llhttp__internal__n_error_95; } } /* UNREACHABLE */; @@ -6126,7 +6162,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code_2; } default: { - goto s_n_llhttp__internal__n_error_95; + goto s_n_llhttp__internal__n_error_97; } } /* UNREACHABLE */; @@ -6189,7 +6225,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code_1; } default: { - goto s_n_llhttp__internal__n_error_97; + goto s_n_llhttp__internal__n_error_99; } } /* UNREACHABLE */; @@ -6252,7 +6288,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code; } default: { - goto s_n_llhttp__internal__n_error_99; + goto s_n_llhttp__internal__n_error_101; } } /* UNREACHABLE */; @@ -6269,7 +6305,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_update_status_code; } default: { - goto s_n_llhttp__internal__n_error_100; + goto s_n_llhttp__internal__n_error_102; } } /* UNREACHABLE */; @@ -6283,13 +6319,13 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_25; default: - goto s_n_llhttp__internal__n_error_88; + goto s_n_llhttp__internal__n_error_90; } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_87: - s_n_llhttp__internal__n_error_87: { + case s_n_llhttp__internal__n_error_89: + s_n_llhttp__internal__n_error_89: { state->error = 0x9; state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; @@ -6298,8 +6334,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_101: - s_n_llhttp__internal__n_error_101: { + case s_n_llhttp__internal__n_error_103: + s_n_llhttp__internal__n_error_103: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -6371,8 +6407,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_102: - s_n_llhttp__internal__n_error_102: { + case s_n_llhttp__internal__n_error_104: + s_n_llhttp__internal__n_error_104: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -6398,8 +6434,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_103: - s_n_llhttp__internal__n_error_103: { + case s_n_llhttp__internal__n_error_105: + s_n_llhttp__internal__n_error_105: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -6489,7 +6525,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_start_res; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob57, 5); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob58, 5); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6500,7 +6536,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_res; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_107; + goto s_n_llhttp__internal__n_error_109; } } /* UNREACHABLE */; @@ -6526,7 +6562,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_2; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob58, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob59, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6538,7 +6574,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6560,7 +6596,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_3; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob59, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob60, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6571,7 +6607,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6592,7 +6628,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_3; } default: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6609,7 +6645,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_1; } default: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -7762,6 +7798,15 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_44: { + state->error = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; @@ -7790,7 +7835,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_58: { + s_n_llhttp__internal__n_error_60: { state->error = 0xb; state->reason = "Content-Length can't be present with Transfer-Encoding"; state->error_pos = (const char*) p; @@ -7799,7 +7844,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_46: { + s_n_llhttp__internal__n_error_47: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -7813,12 +7858,12 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_ws; default: - goto s_n_llhttp__internal__n_error_46; + goto s_n_llhttp__internal__n_error_47; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_48: { + s_n_llhttp__internal__n_error_49: { state->error = 0xb; state->reason = "Empty Content-Length"; state->error_pos = (const char*) p; @@ -7836,7 +7881,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_47: { + s_n_llhttp__internal__n_error_48: { state->error = 0x1d; state->reason = "`on_header_value_complete` callback error"; state->error_pos = (const char*) p; @@ -7921,14 +7966,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_header_state_1: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 2: - goto s_n_llhttp__internal__n_error_48; + goto s_n_llhttp__internal__n_error_49; default: goto s_n_llhttp__internal__n_invoke_load_header_state_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_45: { + s_n_llhttp__internal__n_error_46: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -7942,12 +7987,12 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_lws; default: - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_46; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_49: { + s_n_llhttp__internal__n_error_50: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -7961,7 +8006,7 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_lws; default: - goto s_n_llhttp__internal__n_error_49; + goto s_n_llhttp__internal__n_error_50; } /* UNREACHABLE */; abort(); @@ -7984,6 +8029,25 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_52: { + state->error = 0xa; + state->reason = "Unexpected whitespace after header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_18: { + switch (llhttp__internal__c_test_lenient_flags(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_header_state_4; + default: + goto s_n_llhttp__internal__n_error_52; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_update_header_state_2: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: @@ -8040,7 +8104,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_51: { + s_n_llhttp__internal__n_error_53: { state->error = 0x3; state->reason = "Missing expected LF after header value"; state->error_pos = (const char*) p; @@ -8049,7 +8113,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_50: { + s_n_llhttp__internal__n_error_51: { state->error = 0x19; state->reason = "Missing expected CR after header value"; state->error_pos = (const char*) p; @@ -8138,14 +8202,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_52; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_54; return s_error; } - goto s_n_llhttp__internal__n_error_52; + goto s_n_llhttp__internal__n_error_54; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_18: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_19: { switch (llhttp__internal__c_test_lenient_flags(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_header_value_lenient; @@ -8253,10 +8317,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_54; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_56; return s_error; } - goto s_n_llhttp__internal__n_error_54; + goto s_n_llhttp__internal__n_error_56; /* UNREACHABLE */; abort(); } @@ -8288,14 +8352,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_55; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_57; return s_error; } - goto s_n_llhttp__internal__n_error_55; + goto s_n_llhttp__internal__n_error_57; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_53: { + s_n_llhttp__internal__n_error_55: { state->error = 0x4; state->reason = "Duplicate Content-Length"; state->error_pos = (const char*) p; @@ -8309,7 +8373,7 @@ static llparse_state_t llhttp__internal__run( case 0: goto s_n_llhttp__internal__n_header_value_content_length; default: - goto s_n_llhttp__internal__n_error_53; + goto s_n_llhttp__internal__n_error_55; } /* UNREACHABLE */; abort(); @@ -8324,11 +8388,11 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_57; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_59; return s_error; } p++; - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_59; /* UNREACHABLE */; abort(); } @@ -8350,16 +8414,16 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_56; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_58; return s_error; } p++; - goto s_n_llhttp__internal__n_error_56; + goto s_n_llhttp__internal__n_error_58; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_19: { - switch (llhttp__internal__c_test_lenient_flags_19(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_20: { + switch (llhttp__internal__c_test_lenient_flags_20(state, p, endp)) { case 0: goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; default: @@ -8371,7 +8435,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_type_1: { switch (llhttp__internal__c_load_type(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_19; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_20; default: goto s_n_llhttp__internal__n_header_value_te_chunked; } @@ -8402,8 +8466,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_20: { - switch (llhttp__internal__c_test_lenient_flags_19(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_21: { + switch (llhttp__internal__c_test_lenient_flags_20(state, p, endp)) { case 0: goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_9; default: @@ -8415,7 +8479,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_type_2: { switch (llhttp__internal__c_load_type(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_20; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_21; default: goto s_n_llhttp__internal__n_invoke_or_flags_19; } @@ -8464,10 +8528,10 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_21: { - switch (llhttp__internal__c_test_lenient_flags_21(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_22: { + switch (llhttp__internal__c_test_lenient_flags_22(state, p, endp)) { case 0: - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_60; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8477,14 +8541,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_test_flags_4: { switch (llhttp__internal__c_test_flags_4(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_21; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_22; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_59: { + s_n_llhttp__internal__n_error_61: { state->error = 0xf; state->reason = "Transfer-Encoding can't be present with Content-Length"; state->error_pos = (const char*) p; @@ -8493,10 +8557,10 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_22: { - switch (llhttp__internal__c_test_lenient_flags_21(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_23: { + switch (llhttp__internal__c_test_lenient_flags_22(state, p, endp)) { case 0: - goto s_n_llhttp__internal__n_error_59; + goto s_n_llhttp__internal__n_error_61; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8506,7 +8570,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_test_flags_5: { switch (llhttp__internal__c_test_flags_2(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_22; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_23; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8522,7 +8586,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_44: { + s_n_llhttp__internal__n_error_45: { state->error = 0x1c; state->reason = "`on_header_field_complete` callback error"; state->error_pos = (const char*) p; @@ -8567,7 +8631,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_60: { + s_n_llhttp__internal__n_error_62: { state->error = 0xa; state->reason = "Invalid header token"; state->error_pos = (const char*) p; @@ -8682,7 +8746,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_61: { + s_n_llhttp__internal__n_error_63: { state->error = 0x7; state->reason = "Expected CRLF"; state->error_pos = (const char*) p; @@ -8708,7 +8772,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_69: { + s_n_llhttp__internal__n_error_71: { state->error = 0x17; state->reason = "Pause on PRI/Upgrade"; state->error_pos = (const char*) p; @@ -8717,7 +8781,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_70: { + s_n_llhttp__internal__n_error_72: { state->error = 0x9; state->reason = "Expected HTTP/2 Connection Preface"; state->error_pos = (const char*) p; @@ -8726,7 +8790,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_67: { + s_n_llhttp__internal__n_error_69: { state->error = 0x2; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8735,17 +8799,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_25: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_26: { switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_headers_start; default: - goto s_n_llhttp__internal__n_error_67; + goto s_n_llhttp__internal__n_error_69; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_66: { + s_n_llhttp__internal__n_error_68: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8754,17 +8818,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_24: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_25: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_req_http_complete_crlf; default: - goto s_n_llhttp__internal__n_error_66; + goto s_n_llhttp__internal__n_error_68; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_68: { + s_n_llhttp__internal__n_error_70: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8782,7 +8846,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_65: { + s_n_llhttp__internal__n_error_67: { state->error = 0x21; state->reason = "`on_version_complete` callback error"; state->error_pos = (const char*) p; @@ -8818,10 +8882,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_64; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_66; return s_error; } - goto s_n_llhttp__internal__n_error_64; + goto s_n_llhttp__internal__n_error_66; /* UNREACHABLE */; abort(); } @@ -8871,8 +8935,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_23: { - switch (llhttp__internal__c_test_lenient_flags_23(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_24: { + switch (llhttp__internal__c_test_lenient_flags_24(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_span_end_llhttp__on_version_1; default: @@ -8884,7 +8948,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_store_http_minor: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_23; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_24; } /* UNREACHABLE */; abort(); @@ -8899,10 +8963,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_71; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_73; return s_error; } - goto s_n_llhttp__internal__n_error_71; + goto s_n_llhttp__internal__n_error_73; /* UNREACHABLE */; abort(); } @@ -8916,10 +8980,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_72; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_74; return s_error; } - goto s_n_llhttp__internal__n_error_72; + goto s_n_llhttp__internal__n_error_74; /* UNREACHABLE */; abort(); } @@ -8941,14 +9005,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_73; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_75; return s_error; } - goto s_n_llhttp__internal__n_error_73; + goto s_n_llhttp__internal__n_error_75; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_63: { + s_n_llhttp__internal__n_error_65: { state->error = 0x8; state->reason = "Invalid method for HTTP/x.x request"; state->error_pos = (const char*) p; @@ -9029,13 +9093,15 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_start_llhttp__on_version; case 34: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; + case 46: + goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_63; + goto s_n_llhttp__internal__n_error_65; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_76: { + s_n_llhttp__internal__n_error_78: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -9044,7 +9110,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_74: { + s_n_llhttp__internal__n_error_76: { state->error = 0x8; state->reason = "Expected SOURCE method for ICE/x.x request"; state->error_pos = (const char*) p; @@ -9058,12 +9124,12 @@ static llparse_state_t llhttp__internal__run( case 33: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_74; + goto s_n_llhttp__internal__n_error_76; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_75: { + s_n_llhttp__internal__n_error_77: { state->error = 0x8; state->reason = "Invalid method for RTSP/x.x request"; state->error_pos = (const char*) p; @@ -9103,7 +9169,7 @@ static llparse_state_t llhttp__internal__run( case 45: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_75; + goto s_n_llhttp__internal__n_error_77; } /* UNREACHABLE */; abort(); @@ -9117,7 +9183,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_62: { + s_n_llhttp__internal__n_error_64: { state->error = 0x1a; state->reason = "`on_url_complete` callback error"; state->error_pos = (const char*) p; @@ -9133,7 +9199,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_22; default: - goto s_n_llhttp__internal__n_error_62; + goto s_n_llhttp__internal__n_error_64; } /* UNREACHABLE */; abort(); @@ -9206,7 +9272,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_77: { + s_n_llhttp__internal__n_error_79: { state->error = 0x7; state->reason = "Invalid char in url fragment start"; state->error_pos = (const char*) p; @@ -9266,7 +9332,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_78: { + s_n_llhttp__internal__n_error_80: { state->error = 0x7; state->reason = "Invalid char in url query"; state->error_pos = (const char*) p; @@ -9275,7 +9341,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_79: { + s_n_llhttp__internal__n_error_81: { state->error = 0x7; state->reason = "Invalid char in url path"; state->error_pos = (const char*) p; @@ -9386,7 +9452,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_80: { + s_n_llhttp__internal__n_error_82: { state->error = 0x7; state->reason = "Double @ in url"; state->error_pos = (const char*) p; @@ -9395,7 +9461,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_81: { + s_n_llhttp__internal__n_error_83: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -9404,7 +9470,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_82: { + s_n_llhttp__internal__n_error_84: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -9413,7 +9479,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_83: { + s_n_llhttp__internal__n_error_85: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -9422,7 +9488,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_84: { + s_n_llhttp__internal__n_error_86: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -9431,7 +9497,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_85: { + s_n_llhttp__internal__n_error_87: { state->error = 0x7; state->reason = "Unexpected start char in url"; state->error_pos = (const char*) p; @@ -9450,7 +9516,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_86: { + s_n_llhttp__internal__n_error_88: { state->error = 0x6; state->reason = "Expected space after method"; state->error_pos = (const char*) p; @@ -9468,7 +9534,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_105: { + s_n_llhttp__internal__n_error_107: { state->error = 0x20; state->reason = "`on_method_complete` callback error"; state->error_pos = (const char*) p; @@ -9502,7 +9568,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_106: { + s_n_llhttp__internal__n_error_108: { state->error = 0x6; state->reason = "Invalid method encountered"; state->error_pos = (const char*) p; @@ -9511,7 +9577,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_98: { + s_n_llhttp__internal__n_error_100: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9520,7 +9586,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_96: { + s_n_llhttp__internal__n_error_98: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9529,7 +9595,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_94: { + s_n_llhttp__internal__n_error_96: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9547,7 +9613,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_90: { + s_n_llhttp__internal__n_error_92: { state->error = 0x1b; state->reason = "`on_status_complete` callback error"; state->error_pos = (const char*) p; @@ -9563,12 +9629,12 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_24; default: - goto s_n_llhttp__internal__n_error_90; + goto s_n_llhttp__internal__n_error_92; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_89: { + s_n_llhttp__internal__n_error_91: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -9577,17 +9643,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_27: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_28: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_89; + goto s_n_llhttp__internal__n_error_91; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_91: { + s_n_llhttp__internal__n_error_93: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -9596,17 +9662,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_28: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_29: { switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_91; + goto s_n_llhttp__internal__n_error_93; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_92: { + s_n_llhttp__internal__n_error_94: { state->error = 0x19; state->reason = "Missing expected CR after response line"; state->error_pos = (const char*) p; @@ -9625,11 +9691,11 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_invoke_test_lenient_flags_29; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_invoke_test_lenient_flags_30; return s_error; } p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_29; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_30; /* UNREACHABLE */; abort(); } @@ -9651,7 +9717,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_93: { + s_n_llhttp__internal__n_error_95: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -9663,14 +9729,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code_2: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_94; + goto s_n_llhttp__internal__n_error_96; default: goto s_n_llhttp__internal__n_res_status_code_otherwise; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_95: { + s_n_llhttp__internal__n_error_97: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9682,14 +9748,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code_1: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_96; + goto s_n_llhttp__internal__n_error_98; default: goto s_n_llhttp__internal__n_res_status_code_digit_3; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_97: { + s_n_llhttp__internal__n_error_99: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9701,14 +9767,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_98; + goto s_n_llhttp__internal__n_error_100; default: goto s_n_llhttp__internal__n_res_status_code_digit_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_99: { + s_n_llhttp__internal__n_error_101: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9725,7 +9791,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_100: { + s_n_llhttp__internal__n_error_102: { state->error = 0x9; state->reason = "Expected space after version"; state->error_pos = (const char*) p; @@ -9743,7 +9809,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_88: { + s_n_llhttp__internal__n_error_90: { state->error = 0x21; state->reason = "`on_version_complete` callback error"; state->error_pos = (const char*) p; @@ -9779,10 +9845,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_87; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_89; return s_error; } - goto s_n_llhttp__internal__n_error_87; + goto s_n_llhttp__internal__n_error_89; /* UNREACHABLE */; abort(); } @@ -9832,8 +9898,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_26: { - switch (llhttp__internal__c_test_lenient_flags_23(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_27: { + switch (llhttp__internal__c_test_lenient_flags_24(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_span_end_llhttp__on_version_6; default: @@ -9845,7 +9911,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_store_http_minor_1: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_26; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_27; } /* UNREACHABLE */; abort(); @@ -9860,10 +9926,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_101; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_103; return s_error; } - goto s_n_llhttp__internal__n_error_101; + goto s_n_llhttp__internal__n_error_103; /* UNREACHABLE */; abort(); } @@ -9877,10 +9943,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_102; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_104; return s_error; } - goto s_n_llhttp__internal__n_error_102; + goto s_n_llhttp__internal__n_error_104; /* UNREACHABLE */; abort(); } @@ -9902,14 +9968,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_103; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_105; return s_error; } - goto s_n_llhttp__internal__n_error_103; + goto s_n_llhttp__internal__n_error_105; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_107: { + s_n_llhttp__internal__n_error_109: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -9969,7 +10035,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_104: { + s_n_llhttp__internal__n_error_106: { state->error = 0x8; state->reason = "Invalid word encountered"; state->error_pos = (const char*) p; @@ -10042,7 +10108,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_108: { + s_n_llhttp__internal__n_error_110: { state->error = 0x1f; state->reason = "`on_reset` callback error"; state->error_pos = (const char*) p; @@ -10058,7 +10124,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_28; default: - goto s_n_llhttp__internal__n_error_108; + goto s_n_llhttp__internal__n_error_110; } /* UNREACHABLE */; abort(); diff --git a/Windows/Change-Log.txt b/Windows/Change-Log.txt index 18b9ea740..b7d01c14a 100644 --- a/Windows/Change-Log.txt +++ b/Windows/Change-Log.txt @@ -1,3 +1,22 @@ +========================================================================================== +v6.0.2 £ +========================================================================================== + +> Ҫ£ +----------------- +1ֶ֧ʱڴͱڴ棨Ĭʹöʱգռ 15 룩 +2֧ûаװ MFC Ļ± + +> £ +----------------- +1openssl 3.0.14 汾 +2llhttp 9.2.1 汾 +3mimalloc 2.1.7 汾 + +> ˵ +----------------- +1HP-Socket v6.0.2 HP-Socket v6.0.1 汾ֱ滻 + ========================================================================================== v6.0.1 £ ========================================================================================== diff --git a/Windows/Dependent/mimalloc/14x/x64/lib/mimalloc.lib b/Windows/Dependent/mimalloc/14x/x64/lib/mimalloc.lib index bff1a3c8f..8ca2105e2 100644 Binary files a/Windows/Dependent/mimalloc/14x/x64/lib/mimalloc.lib and b/Windows/Dependent/mimalloc/14x/x64/lib/mimalloc.lib differ diff --git a/Windows/Dependent/mimalloc/14x/x86/lib/mimalloc.lib b/Windows/Dependent/mimalloc/14x/x86/lib/mimalloc.lib index 0b4cb6ae9..c535c78a2 100644 Binary files a/Windows/Dependent/mimalloc/14x/x86/lib/mimalloc.lib and b/Windows/Dependent/mimalloc/14x/x86/lib/mimalloc.lib differ diff --git a/Windows/Dependent/openssl/100/x64/include/openssl/opensslv.h b/Windows/Dependent/openssl/100/x64/include/openssl/opensslv.h index 34a5aa72d..30477e972 100644 --- a/Windows/Dependent/openssl/100/x64/include/openssl/opensslv.h +++ b/Windows/Dependent/openssl/100/x64/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Windows/Dependent/openssl/100/x64/include/openssl/sslerr.h b/Windows/Dependent/openssl/100/x64/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Windows/Dependent/openssl/100/x64/include/openssl/sslerr.h +++ b/Windows/Dependent/openssl/100/x64/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Windows/Dependent/openssl/100/x64/lib/libcrypto.lib b/Windows/Dependent/openssl/100/x64/lib/libcrypto.lib index ad513d6e9..edd1725f5 100644 Binary files a/Windows/Dependent/openssl/100/x64/lib/libcrypto.lib and b/Windows/Dependent/openssl/100/x64/lib/libcrypto.lib differ diff --git a/Windows/Dependent/openssl/100/x64/lib/libssl.lib b/Windows/Dependent/openssl/100/x64/lib/libssl.lib index ec8f3afdb..131fc7f91 100644 Binary files a/Windows/Dependent/openssl/100/x64/lib/libssl.lib and b/Windows/Dependent/openssl/100/x64/lib/libssl.lib differ diff --git a/Windows/Dependent/openssl/100/x86/include/openssl/opensslv.h b/Windows/Dependent/openssl/100/x86/include/openssl/opensslv.h index 34a5aa72d..30477e972 100644 --- a/Windows/Dependent/openssl/100/x86/include/openssl/opensslv.h +++ b/Windows/Dependent/openssl/100/x86/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Windows/Dependent/openssl/100/x86/include/openssl/sslerr.h b/Windows/Dependent/openssl/100/x86/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Windows/Dependent/openssl/100/x86/include/openssl/sslerr.h +++ b/Windows/Dependent/openssl/100/x86/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Windows/Dependent/openssl/100/x86/lib/libcrypto.lib b/Windows/Dependent/openssl/100/x86/lib/libcrypto.lib index 308c4911d..1dee7b82b 100644 Binary files a/Windows/Dependent/openssl/100/x86/lib/libcrypto.lib and b/Windows/Dependent/openssl/100/x86/lib/libcrypto.lib differ diff --git a/Windows/Dependent/openssl/100/x86/lib/libssl.lib b/Windows/Dependent/openssl/100/x86/lib/libssl.lib index 00abe0729..aa9254077 100644 Binary files a/Windows/Dependent/openssl/100/x86/lib/libssl.lib and b/Windows/Dependent/openssl/100/x86/lib/libssl.lib differ diff --git a/Windows/Dependent/openssl/14x/x64/include/openssl/opensslv.h b/Windows/Dependent/openssl/14x/x64/include/openssl/opensslv.h index 34a5aa72d..30477e972 100644 --- a/Windows/Dependent/openssl/14x/x64/include/openssl/opensslv.h +++ b/Windows/Dependent/openssl/14x/x64/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Windows/Dependent/openssl/14x/x64/include/openssl/sslerr.h b/Windows/Dependent/openssl/14x/x64/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Windows/Dependent/openssl/14x/x64/include/openssl/sslerr.h +++ b/Windows/Dependent/openssl/14x/x64/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Windows/Dependent/openssl/14x/x64/lib/libcrypto.lib b/Windows/Dependent/openssl/14x/x64/lib/libcrypto.lib index 753babeab..bfe712bd2 100644 Binary files a/Windows/Dependent/openssl/14x/x64/lib/libcrypto.lib and b/Windows/Dependent/openssl/14x/x64/lib/libcrypto.lib differ diff --git a/Windows/Dependent/openssl/14x/x64/lib/libssl.lib b/Windows/Dependent/openssl/14x/x64/lib/libssl.lib index 22a19e5e3..b1c00dd8a 100644 Binary files a/Windows/Dependent/openssl/14x/x64/lib/libssl.lib and b/Windows/Dependent/openssl/14x/x64/lib/libssl.lib differ diff --git a/Windows/Dependent/openssl/14x/x86/include/openssl/opensslv.h b/Windows/Dependent/openssl/14x/x86/include/openssl/opensslv.h index 34a5aa72d..30477e972 100644 --- a/Windows/Dependent/openssl/14x/x86/include/openssl/opensslv.h +++ b/Windows/Dependent/openssl/14x/x86/include/openssl/opensslv.h @@ -29,7 +29,7 @@ extern "C" { */ # define OPENSSL_VERSION_MAJOR 3 # define OPENSSL_VERSION_MINOR 0 -# define OPENSSL_VERSION_PATCH 13 +# define OPENSSL_VERSION_PATCH 14 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.0.13" -# define OPENSSL_FULL_VERSION_STR "3.0.13" +# define OPENSSL_VERSION_STR "3.0.14" +# define OPENSSL_FULL_VERSION_STR "3.0.14" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" +# define OPENSSL_RELEASE_DATE "4 Jun 2024" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.13 30 Jan 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.14 4 Jun 2024" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/Windows/Dependent/openssl/14x/x86/include/openssl/sslerr.h b/Windows/Dependent/openssl/14x/x86/include/openssl/sslerr.h index b156fc2ff..1e36405e3 100644 --- a/Windows/Dependent/openssl/14x/x86/include/openssl/sslerr.h +++ b/Windows/Dependent/openssl/14x/x86/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -283,10 +283,12 @@ # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY 1115 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 diff --git a/Windows/Dependent/openssl/14x/x86/lib/libcrypto.lib b/Windows/Dependent/openssl/14x/x86/lib/libcrypto.lib index 8c8d2167e..583797217 100644 Binary files a/Windows/Dependent/openssl/14x/x86/lib/libcrypto.lib and b/Windows/Dependent/openssl/14x/x86/lib/libcrypto.lib differ diff --git a/Windows/Dependent/openssl/14x/x86/lib/libssl.lib b/Windows/Dependent/openssl/14x/x86/lib/libssl.lib index 0afce58af..204ac40fd 100644 Binary files a/Windows/Dependent/openssl/14x/x86/lib/libssl.lib and b/Windows/Dependent/openssl/14x/x86/lib/libssl.lib differ diff --git a/Windows/Include/HPSocket/HPTypeDef.h b/Windows/Include/HPSocket/HPTypeDef.h index 7f08123de..30d69fec1 100644 --- a/Windows/Include/HPSocket/HPTypeDef.h +++ b/Windows/Include/HPSocket/HPTypeDef.h @@ -208,6 +208,7 @@ typedef enum EnSocketError SE_NETWORK = 12, // 网络错误 SE_DATA_PROC = 13, // 数据处理错误 SE_DATA_SEND = 14, // 数据发送失败 + SE_GC_START = 15, // 垃圾回收启动失败 /***** SSL Socket 扩展操作结果代码 *****/ SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪 diff --git a/Windows/Project/HPSocketDLL-2010/HPSocketDLL.rc b/Windows/Project/HPSocketDLL-2010/HPSocketDLL.rc index dc49f8bcb..7adcbee06 100644 Binary files a/Windows/Project/HPSocketDLL-2010/HPSocketDLL.rc and b/Windows/Project/HPSocketDLL-2010/HPSocketDLL.rc differ diff --git a/Windows/Project/HPSocketDLL-2015/HPSocketDLL.rc b/Windows/Project/HPSocketDLL-2015/HPSocketDLL.rc index dc49f8bcb..7adcbee06 100644 Binary files a/Windows/Project/HPSocketDLL-2015/HPSocketDLL.rc and b/Windows/Project/HPSocketDLL-2015/HPSocketDLL.rc differ diff --git a/Windows/Project/HPSocketDLL-2017/HPSocketDLL.rc b/Windows/Project/HPSocketDLL-2017/HPSocketDLL.rc index dc49f8bcb..7adcbee06 100644 Binary files a/Windows/Project/HPSocketDLL-2017/HPSocketDLL.rc and b/Windows/Project/HPSocketDLL-2017/HPSocketDLL.rc differ diff --git a/Windows/Project/HPSocketDLL-2019/HPSocketDLL.rc b/Windows/Project/HPSocketDLL-2019/HPSocketDLL.rc index dc49f8bcb..7adcbee06 100644 Binary files a/Windows/Project/HPSocketDLL-2019/HPSocketDLL.rc and b/Windows/Project/HPSocketDLL-2019/HPSocketDLL.rc differ diff --git a/Windows/Project/HPSocketDLL-2022/HPSocketDLL.rc b/Windows/Project/HPSocketDLL-2022/HPSocketDLL.rc index dc49f8bcb..7adcbee06 100644 Binary files a/Windows/Project/HPSocketDLL-2022/HPSocketDLL.rc and b/Windows/Project/HPSocketDLL-2022/HPSocketDLL.rc differ diff --git a/Windows/Project/HPSocketDLL4C-2010/HPSocketDLL4C.rc b/Windows/Project/HPSocketDLL4C-2010/HPSocketDLL4C.rc index 789c60776..863e5129b 100644 Binary files a/Windows/Project/HPSocketDLL4C-2010/HPSocketDLL4C.rc and b/Windows/Project/HPSocketDLL4C-2010/HPSocketDLL4C.rc differ diff --git a/Windows/Project/HPSocketDLL4C-2015/HPSocketDLL4C.rc b/Windows/Project/HPSocketDLL4C-2015/HPSocketDLL4C.rc index 789c60776..863e5129b 100644 Binary files a/Windows/Project/HPSocketDLL4C-2015/HPSocketDLL4C.rc and b/Windows/Project/HPSocketDLL4C-2015/HPSocketDLL4C.rc differ diff --git a/Windows/Project/HPSocketDLL4C-2017/HPSocketDLL4C.rc b/Windows/Project/HPSocketDLL4C-2017/HPSocketDLL4C.rc index 789c60776..863e5129b 100644 Binary files a/Windows/Project/HPSocketDLL4C-2017/HPSocketDLL4C.rc and b/Windows/Project/HPSocketDLL4C-2017/HPSocketDLL4C.rc differ diff --git a/Windows/Project/HPSocketDLL4C-2019/HPSocketDLL4C.rc b/Windows/Project/HPSocketDLL4C-2019/HPSocketDLL4C.rc index 789c60776..863e5129b 100644 Binary files a/Windows/Project/HPSocketDLL4C-2019/HPSocketDLL4C.rc and b/Windows/Project/HPSocketDLL4C-2019/HPSocketDLL4C.rc differ diff --git a/Windows/Project/HPSocketDLL4C-2022/HPSocketDLL4C.rc b/Windows/Project/HPSocketDLL4C-2022/HPSocketDLL4C.rc index 789c60776..863e5129b 100644 Binary files a/Windows/Project/HPSocketDLL4C-2022/HPSocketDLL4C.rc and b/Windows/Project/HPSocketDLL4C-2022/HPSocketDLL4C.rc differ diff --git a/Windows/Project/HPSocketLIB-2010/HPSocketLIB.rc b/Windows/Project/HPSocketLIB-2010/HPSocketLIB.rc index fb87767ed..17264fdee 100644 Binary files a/Windows/Project/HPSocketLIB-2010/HPSocketLIB.rc and b/Windows/Project/HPSocketLIB-2010/HPSocketLIB.rc differ diff --git a/Windows/Project/HPSocketLIB-2015/HPSocketLIB.rc b/Windows/Project/HPSocketLIB-2015/HPSocketLIB.rc index fb87767ed..17264fdee 100644 Binary files a/Windows/Project/HPSocketLIB-2015/HPSocketLIB.rc and b/Windows/Project/HPSocketLIB-2015/HPSocketLIB.rc differ diff --git a/Windows/Project/HPSocketLIB-2017/HPSocketLIB.rc b/Windows/Project/HPSocketLIB-2017/HPSocketLIB.rc index fb87767ed..17264fdee 100644 Binary files a/Windows/Project/HPSocketLIB-2017/HPSocketLIB.rc and b/Windows/Project/HPSocketLIB-2017/HPSocketLIB.rc differ diff --git a/Windows/Project/HPSocketLIB-2019/HPSocketLIB.rc b/Windows/Project/HPSocketLIB-2019/HPSocketLIB.rc index fb87767ed..17264fdee 100644 Binary files a/Windows/Project/HPSocketLIB-2019/HPSocketLIB.rc and b/Windows/Project/HPSocketLIB-2019/HPSocketLIB.rc differ diff --git a/Windows/Project/HPSocketLIB-2022/HPSocketLIB.rc b/Windows/Project/HPSocketLIB-2022/HPSocketLIB.rc index fb87767ed..17264fdee 100644 Binary files a/Windows/Project/HPSocketLIB-2022/HPSocketLIB.rc and b/Windows/Project/HPSocketLIB-2022/HPSocketLIB.rc differ diff --git a/Windows/Project/HPSocketLIB4C-2010/HPSocketLIB4C.rc b/Windows/Project/HPSocketLIB4C-2010/HPSocketLIB4C.rc index 2a2458289..3c558dc39 100644 Binary files a/Windows/Project/HPSocketLIB4C-2010/HPSocketLIB4C.rc and b/Windows/Project/HPSocketLIB4C-2010/HPSocketLIB4C.rc differ diff --git a/Windows/Project/HPSocketLIB4C-2015/HPSocketLIB4C.rc b/Windows/Project/HPSocketLIB4C-2015/HPSocketLIB4C.rc index 2a2458289..3c558dc39 100644 Binary files a/Windows/Project/HPSocketLIB4C-2015/HPSocketLIB4C.rc and b/Windows/Project/HPSocketLIB4C-2015/HPSocketLIB4C.rc differ diff --git a/Windows/Project/HPSocketLIB4C-2017/HPSocketLIB4C.rc b/Windows/Project/HPSocketLIB4C-2017/HPSocketLIB4C.rc index 2a2458289..3c558dc39 100644 Binary files a/Windows/Project/HPSocketLIB4C-2017/HPSocketLIB4C.rc and b/Windows/Project/HPSocketLIB4C-2017/HPSocketLIB4C.rc differ diff --git a/Windows/Project/HPSocketLIB4C-2019/HPSocketLIB4C.rc b/Windows/Project/HPSocketLIB4C-2019/HPSocketLIB4C.rc index 2a2458289..3c558dc39 100644 Binary files a/Windows/Project/HPSocketLIB4C-2019/HPSocketLIB4C.rc and b/Windows/Project/HPSocketLIB4C-2019/HPSocketLIB4C.rc differ diff --git a/Windows/Project/HPSocketLIB4C-2022/HPSocketLIB4C.rc b/Windows/Project/HPSocketLIB4C-2022/HPSocketLIB4C.rc index 2a2458289..3c558dc39 100644 Binary files a/Windows/Project/HPSocketLIB4C-2022/HPSocketLIB4C.rc and b/Windows/Project/HPSocketLIB4C-2022/HPSocketLIB4C.rc differ diff --git a/Windows/Script/clean.bat b/Windows/Script/clean.bat index 133eebb79..397757ed8 100644 --- a/Windows/Script/clean.bat +++ b/Windows/Script/clean.bat @@ -23,6 +23,7 @@ del *.cki /f /s /q del *.exe.config /f /s /q del "Other Languages\E\*.exe" /f /s /q +del "Demo\Release\*.lib" /f /s /q rd /s /q "Demo\Debug" diff --git a/Windows/Src/ArqHelper.h b/Windows/Src/ArqHelper.h index 23adce17d..79b03cbb6 100644 --- a/Windows/Src/ArqHelper.h +++ b/Windows/Src/ArqHelper.h @@ -607,7 +607,7 @@ template class CArqSessionExT : public CArqSessionT, pub { ResetCount(); - m_hTimer = m_tqFlush.CreateTimer(FlushProc, this, attr.dwFlushInterval); + m_hTimer = m_tqFlush.CreateTimer(FlushProc, this, attr.dwFlushInterval, attr.dwFlushInterval, WT_EXECUTEINTIMERTHREAD); } virtual void ResetExtra() @@ -689,8 +689,9 @@ template class CArqSessionPoolT { if(pSession->Reset()) { +#ifndef USE_EXTERNAL_GC ReleaseGCSession(); - +#endif if(!m_lsFreeSession.TryPut(pSession)) m_lsGCSession.PushBack(pSession); } @@ -711,7 +712,6 @@ template class CArqSessionPoolT ENSURE(m_lsGCSession.IsEmpty()); } -private: void ReleaseGCSession(BOOL bForce = FALSE) { ::ReleaseGCObj(m_lsGCSession, m_dwSessionLockTime, bForce); diff --git a/Windows/Src/Common/BufferPool.cpp b/Windows/Src/Common/BufferPool.cpp index 59c5fdcb3..9ba58609c 100644 --- a/Windows/Src/Common/BufferPool.cpp +++ b/Windows/Src/Common/BufferPool.cpp @@ -243,8 +243,9 @@ void CBufferPool::PutFreeBuffer(TBuffer* pBuffer) { m_itPool.PutFreeItem(pBuffer->items); +#ifndef USE_EXTERNAL_GC ReleaseGCBuffer(); - +#endif if(!m_lsFreeBuffer.TryPut(pBuffer)) m_lsGCBuffer.PushBack(pBuffer); } diff --git a/Windows/Src/Common/BufferPool.h b/Windows/Src/Common/BufferPool.h index 2f059821c..f917120aa 100644 --- a/Windows/Src/Common/BufferPool.h +++ b/Windows/Src/Common/BufferPool.h @@ -754,8 +754,7 @@ class CBufferPool void Prepare (); void Clear (); -private: - void ReleaseGCBuffer (BOOL bForce = FALSE); + void ReleaseGCBuffer (BOOL bForce = FALSE); public: void SetItemCapacity (DWORD dwItemCapacity) {m_itPool.SetItemCapacity(dwItemCapacity);} diff --git a/Windows/Src/Common/FuncHelper.h b/Windows/Src/Common/FuncHelper.h index a1c11c72d..b4c88558a 100644 --- a/Windows/Src/Common/FuncHelper.h +++ b/Windows/Src/Common/FuncHelper.h @@ -88,6 +88,9 @@ typedef HANDLE FD; #define TO_PVOID(v) ((PVOID)(UINT_PTR)(v)) #define FROM_PVOID(T, pv) ((T)(UINT_PTR)(pv)) +#define IS_NULL(v) ((v) == nullptr) +#define IS_NOT_NULL(v) (!IS_NULL(v)) + #define HEX_CHAR_TO_VALUE(c) (c <= '9' ? c - '0' : (c <= 'F' ? c - 'A' + 0x0A : c - 'a' + 0X0A)) #define HEX_DOUBLE_CHAR_TO_VALUE(pc) ((BYTE)(((HEX_CHAR_TO_VALUE(*(pc))) << 4) | (HEX_CHAR_TO_VALUE(*((pc) + 1))))) #define HEX_VALUE_TO_CHAR(n) (n <= 9 ? n + '0' : (n <= 'F' ? n + 'A' - 0X0A : n + 'a' - 0X0A)) diff --git a/Windows/Src/Common/SysHelper.h b/Windows/Src/Common/SysHelper.h index 0b62ac46e..9afaf680c 100644 --- a/Windows/Src/Common/SysHelper.h +++ b/Windows/Src/Common/SysHelper.h @@ -38,6 +38,9 @@ /* 默认内存块缓存池回收阀值 */ #define DEFAULT_BUFFER_CACHE_POOL_HOLD 1024 +/* 使用外部垃圾回收 */ +#define USE_EXTERNAL_GC 1 + #define SYS_PAGE_SIZE (GetSysPageSize()) #define DEFAULT_WORKER_THREAD_COUNT (GetDefaultWorkerThreadCount()) #define SELF_PROCESS_ID (::GetCurrentProcessId()) diff --git a/Windows/Src/Common/http/llhttp.h b/Windows/Src/Common/http/llhttp.h index 46a7213c1..37b7934d2 100644 --- a/Windows/Src/Common/http/llhttp.h +++ b/Windows/Src/Common/http/llhttp.h @@ -3,8 +3,8 @@ #define INCLUDE_LLHTTP_H_ #define LLHTTP_VERSION_MAJOR 9 -#define LLHTTP_VERSION_MINOR 1 -#define LLHTTP_VERSION_PATCH 3 +#define LLHTTP_VERSION_MINOR 2 +#define LLHTTP_VERSION_PATCH 1 #ifndef INCLUDE_LLHTTP_ITSELF_H_ #define INCLUDE_LLHTTP_ITSELF_H_ @@ -181,7 +181,8 @@ enum llhttp_method { HTTP_SET_PARAMETER = 42, HTTP_REDIRECT = 43, HTTP_RECORD = 44, - HTTP_FLUSH = 45 + HTTP_FLUSH = 45, + HTTP_QUERY = 46 }; typedef enum llhttp_method llhttp_method_t; @@ -362,6 +363,7 @@ typedef enum llhttp_status llhttp_status_t; XX(31, LINK, LINK) \ XX(32, UNLINK, UNLINK) \ XX(33, SOURCE, SOURCE) \ + XX(46, QUERY, QUERY) \ #define RTSP_METHOD_MAP(XX) \ @@ -428,6 +430,7 @@ typedef enum llhttp_status llhttp_status_t; XX(43, REDIRECT, REDIRECT) \ XX(44, RECORD, RECORD) \ XX(45, FLUSH, FLUSH) \ + XX(46, QUERY, QUERY) \ #define HTTP_STATUS_MAP(XX) \ @@ -547,6 +550,8 @@ extern "C" { #if defined(__wasm__) #define LLHTTP_EXPORT __attribute__((visibility("default"))) +#elif defined(_WIN32) +#define LLHTTP_EXPORT __declspec(dllexport) #else #define LLHTTP_EXPORT #endif diff --git a/Windows/Src/Common/http/llhttp_internal.c b/Windows/Src/Common/http/llhttp_internal.c index 1da9c4459..57cab7c1e 100644 --- a/Windows/Src/Common/http/llhttp_internal.c +++ b/Windows/Src/Common/http/llhttp_internal.c @@ -168,54 +168,57 @@ static const unsigned char llparse_blob42[] = { 'G', 'E' }; static const unsigned char llparse_blob43[] = { - 'I', 'N', 'D' + 'U', 'E', 'R', 'Y' }; static const unsigned char llparse_blob44[] = { - 'O', 'R', 'D' + 'I', 'N', 'D' }; static const unsigned char llparse_blob45[] = { - 'I', 'R', 'E', 'C', 'T' + 'O', 'R', 'D' }; static const unsigned char llparse_blob46[] = { - 'O', 'R', 'T' + 'I', 'R', 'E', 'C', 'T' }; static const unsigned char llparse_blob47[] = { - 'R', 'C', 'H' + 'O', 'R', 'T' }; static const unsigned char llparse_blob48[] = { - 'P', 'A', 'R', 'A', 'M', 'E', 'T', 'E', 'R' + 'R', 'C', 'H' }; static const unsigned char llparse_blob49[] = { - 'U', 'R', 'C', 'E' + 'P', 'A', 'R', 'A', 'M', 'E', 'T', 'E', 'R' }; static const unsigned char llparse_blob50[] = { - 'B', 'S', 'C', 'R', 'I', 'B', 'E' + 'U', 'R', 'C', 'E' }; static const unsigned char llparse_blob51[] = { - 'A', 'R', 'D', 'O', 'W', 'N' + 'B', 'S', 'C', 'R', 'I', 'B', 'E' }; static const unsigned char llparse_blob52[] = { - 'A', 'C', 'E' + 'A', 'R', 'D', 'O', 'W', 'N' }; static const unsigned char llparse_blob53[] = { - 'I', 'N', 'D' + 'A', 'C', 'E' }; static const unsigned char llparse_blob54[] = { - 'N', 'K' + 'I', 'N', 'D' }; static const unsigned char llparse_blob55[] = { - 'C', 'K' + 'N', 'K' }; static const unsigned char llparse_blob56[] = { - 'U', 'B', 'S', 'C', 'R', 'I', 'B', 'E' + 'C', 'K' }; static const unsigned char llparse_blob57[] = { - 'H', 'T', 'T', 'P', '/' + 'U', 'B', 'S', 'C', 'R', 'I', 'B', 'E' }; static const unsigned char llparse_blob58[] = { - 'A', 'D' + 'H', 'T', 'T', 'P', '/' }; static const unsigned char llparse_blob59[] = { + 'A', 'D' +}; +static const unsigned char llparse_blob60[] = { 'T', 'P', '/' }; @@ -382,7 +385,7 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_almost_done, s_n_llhttp__internal__n_invoke_test_lenient_flags_17, s_n_llhttp__internal__n_header_value_lenient, - s_n_llhttp__internal__n_error_52, + s_n_llhttp__internal__n_error_54, s_n_llhttp__internal__n_header_value_otherwise, s_n_llhttp__internal__n_header_value_connection_token, s_n_llhttp__internal__n_header_value_connection_ws, @@ -390,12 +393,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_header_value_connection_2, s_n_llhttp__internal__n_header_value_connection_3, s_n_llhttp__internal__n_header_value_connection, - s_n_llhttp__internal__n_error_54, - s_n_llhttp__internal__n_error_55, + s_n_llhttp__internal__n_error_56, + s_n_llhttp__internal__n_error_57, s_n_llhttp__internal__n_header_value_content_length_ws, s_n_llhttp__internal__n_header_value_content_length, - s_n_llhttp__internal__n_error_57, - s_n_llhttp__internal__n_error_56, + s_n_llhttp__internal__n_error_59, + s_n_llhttp__internal__n_error_58, s_n_llhttp__internal__n_header_value_te_token_ows, s_n_llhttp__internal__n_header_value, s_n_llhttp__internal__n_header_value_te_token, @@ -428,12 +431,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_req_http_complete, s_n_llhttp__internal__n_invoke_load_method_1, s_n_llhttp__internal__n_invoke_llhttp__on_version_complete, - s_n_llhttp__internal__n_error_64, - s_n_llhttp__internal__n_error_71, + s_n_llhttp__internal__n_error_66, + s_n_llhttp__internal__n_error_73, s_n_llhttp__internal__n_req_http_minor, - s_n_llhttp__internal__n_error_72, + s_n_llhttp__internal__n_error_74, s_n_llhttp__internal__n_req_http_dot, - s_n_llhttp__internal__n_error_73, + s_n_llhttp__internal__n_error_75, s_n_llhttp__internal__n_req_http_major, s_n_llhttp__internal__n_span_start_llhttp__on_version, s_n_llhttp__internal__n_req_http_start_1, @@ -509,34 +512,35 @@ enum llparse_state_e { s_n_llhttp__internal__n_after_start_req_45, s_n_llhttp__internal__n_after_start_req_44, s_n_llhttp__internal__n_after_start_req_33, - s_n_llhttp__internal__n_after_start_req_48, + s_n_llhttp__internal__n_after_start_req_46, s_n_llhttp__internal__n_after_start_req_49, s_n_llhttp__internal__n_after_start_req_50, s_n_llhttp__internal__n_after_start_req_51, + s_n_llhttp__internal__n_after_start_req_52, + s_n_llhttp__internal__n_after_start_req_48, s_n_llhttp__internal__n_after_start_req_47, - s_n_llhttp__internal__n_after_start_req_46, - s_n_llhttp__internal__n_after_start_req_54, - s_n_llhttp__internal__n_after_start_req_56, - s_n_llhttp__internal__n_after_start_req_57, s_n_llhttp__internal__n_after_start_req_55, - s_n_llhttp__internal__n_after_start_req_53, + s_n_llhttp__internal__n_after_start_req_57, s_n_llhttp__internal__n_after_start_req_58, + s_n_llhttp__internal__n_after_start_req_56, + s_n_llhttp__internal__n_after_start_req_54, s_n_llhttp__internal__n_after_start_req_59, - s_n_llhttp__internal__n_after_start_req_52, - s_n_llhttp__internal__n_after_start_req_61, - s_n_llhttp__internal__n_after_start_req_62, s_n_llhttp__internal__n_after_start_req_60, - s_n_llhttp__internal__n_after_start_req_65, - s_n_llhttp__internal__n_after_start_req_67, - s_n_llhttp__internal__n_after_start_req_68, + s_n_llhttp__internal__n_after_start_req_53, + s_n_llhttp__internal__n_after_start_req_62, + s_n_llhttp__internal__n_after_start_req_63, + s_n_llhttp__internal__n_after_start_req_61, s_n_llhttp__internal__n_after_start_req_66, + s_n_llhttp__internal__n_after_start_req_68, s_n_llhttp__internal__n_after_start_req_69, + s_n_llhttp__internal__n_after_start_req_67, + s_n_llhttp__internal__n_after_start_req_70, + s_n_llhttp__internal__n_after_start_req_65, s_n_llhttp__internal__n_after_start_req_64, - s_n_llhttp__internal__n_after_start_req_63, s_n_llhttp__internal__n_after_start_req, s_n_llhttp__internal__n_span_start_llhttp__on_method_1, s_n_llhttp__internal__n_res_line_almost_done, - s_n_llhttp__internal__n_invoke_test_lenient_flags_29, + s_n_llhttp__internal__n_invoke_test_lenient_flags_30, s_n_llhttp__internal__n_res_status, s_n_llhttp__internal__n_span_start_llhttp__on_status, s_n_llhttp__internal__n_res_status_code_otherwise, @@ -545,12 +549,12 @@ enum llparse_state_e { s_n_llhttp__internal__n_res_status_code_digit_1, s_n_llhttp__internal__n_res_after_version, s_n_llhttp__internal__n_invoke_llhttp__on_version_complete_1, - s_n_llhttp__internal__n_error_87, - s_n_llhttp__internal__n_error_101, + s_n_llhttp__internal__n_error_89, + s_n_llhttp__internal__n_error_103, s_n_llhttp__internal__n_res_http_minor, - s_n_llhttp__internal__n_error_102, + s_n_llhttp__internal__n_error_104, s_n_llhttp__internal__n_res_http_dot, - s_n_llhttp__internal__n_error_103, + s_n_llhttp__internal__n_error_105, s_n_llhttp__internal__n_res_http_major, s_n_llhttp__internal__n_span_start_llhttp__on_version_1, s_n_llhttp__internal__n_start_res, @@ -889,7 +893,7 @@ int llhttp__internal__c_test_flags_4( return (state->flags & 512) == 512; } -int llhttp__internal__c_test_lenient_flags_21( +int llhttp__internal__c_test_lenient_flags_22( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -1020,7 +1024,7 @@ int llhttp__internal__c_test_flags_3( return (state->flags & 8) == 8; } -int llhttp__internal__c_test_lenient_flags_19( +int llhttp__internal__c_test_lenient_flags_20( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -1084,7 +1088,7 @@ int llhttp__internal__c_store_http_minor( return 0; } -int llhttp__internal__c_test_lenient_flags_23( +int llhttp__internal__c_test_lenient_flags_24( llhttp__internal_t* state, const unsigned char* p, const unsigned char* endp) { @@ -2139,7 +2143,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_18; default: - goto s_n_llhttp__internal__n_error_47; + goto s_n_llhttp__internal__n_error_48; } /* UNREACHABLE */; abort(); @@ -2200,10 +2204,10 @@ static llparse_state_t llhttp__internal__run( } switch (*p) { case 9: { - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; } case ' ': { - goto s_n_llhttp__internal__n_invoke_load_header_state_4; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; } default: { goto s_n_llhttp__internal__n_invoke_load_header_state_5; @@ -2223,7 +2227,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_header_value_lws; } default: { - goto s_n_llhttp__internal__n_error_51; + goto s_n_llhttp__internal__n_error_53; } } /* UNREACHABLE */; @@ -2235,7 +2239,7 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_almost_done; default: - goto s_n_llhttp__internal__n_error_50; + goto s_n_llhttp__internal__n_error_51; } /* UNREACHABLE */; abort(); @@ -2260,8 +2264,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_52: - s_n_llhttp__internal__n_error_52: { + case s_n_llhttp__internal__n_error_54: + s_n_llhttp__internal__n_error_54: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -2283,7 +2287,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_18; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_19; } } /* UNREACHABLE */; @@ -2460,8 +2464,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_54: - s_n_llhttp__internal__n_error_54: { + case s_n_llhttp__internal__n_error_56: + s_n_llhttp__internal__n_error_56: { state->error = 0xb; state->reason = "Content-Length overflow"; state->error_pos = (const char*) p; @@ -2470,8 +2474,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_55: - s_n_llhttp__internal__n_error_55: { + case s_n_llhttp__internal__n_error_57: + s_n_llhttp__internal__n_error_57: { state->error = 0xb; state->reason = "Invalid character in Content-Length"; state->error_pos = (const char*) p; @@ -2566,8 +2570,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_57: - s_n_llhttp__internal__n_error_57: { + case s_n_llhttp__internal__n_error_59: + s_n_llhttp__internal__n_error_59: { state->error = 0xf; state->reason = "Invalid `Transfer-Encoding` header value"; state->error_pos = (const char*) p; @@ -2576,8 +2580,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_56: - s_n_llhttp__internal__n_error_56: { + case s_n_llhttp__internal__n_error_58: + s_n_llhttp__internal__n_error_58: { state->error = 0xf; state->reason = "Invalid `Transfer-Encoding` header value"; state->error_pos = (const char*) p; @@ -2816,7 +2820,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_19; default: - goto s_n_llhttp__internal__n_error_44; + goto s_n_llhttp__internal__n_error_45; } /* UNREACHABLE */; abort(); @@ -2831,7 +2835,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; } default: { - goto s_n_llhttp__internal__n_error_60; + goto s_n_llhttp__internal__n_error_62; } } /* UNREACHABLE */; @@ -3151,6 +3155,9 @@ static llparse_state_t llhttp__internal__run( p++; goto s_n_llhttp__internal__n_headers_almost_done; } + case ':': { + goto s_n_llhttp__internal__n_error_44; + } default: { goto s_n_llhttp__internal__n_span_start_llhttp__on_header_field; } @@ -3229,7 +3236,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_to_http_09; } default: { - goto s_n_llhttp__internal__n_error_61; + goto s_n_llhttp__internal__n_error_63; } } /* UNREACHABLE */; @@ -3254,7 +3261,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_skip_lf_to_http09_1; } default: { - goto s_n_llhttp__internal__n_error_61; + goto s_n_llhttp__internal__n_error_63; } } /* UNREACHABLE */; @@ -3272,13 +3279,13 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - goto s_n_llhttp__internal__n_error_69; + goto s_n_llhttp__internal__n_error_71; } case kMatchPause: { return s_n_llhttp__internal__n_req_pri_upgrade; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_70; + goto s_n_llhttp__internal__n_error_72; } } /* UNREACHABLE */; @@ -3295,7 +3302,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_headers_start; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_25; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_26; } } /* UNREACHABLE */; @@ -3309,14 +3316,14 @@ static llparse_state_t llhttp__internal__run( switch (*p) { case 10: { p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_24; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_25; } case 13: { p++; goto s_n_llhttp__internal__n_req_http_complete_crlf; } default: { - goto s_n_llhttp__internal__n_error_68; + goto s_n_llhttp__internal__n_error_70; } } /* UNREACHABLE */; @@ -3341,13 +3348,13 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_21; default: - goto s_n_llhttp__internal__n_error_65; + goto s_n_llhttp__internal__n_error_67; } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_64: - s_n_llhttp__internal__n_error_64: { + case s_n_llhttp__internal__n_error_66: + s_n_llhttp__internal__n_error_66: { state->error = 0x9; state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; @@ -3356,8 +3363,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_71: - s_n_llhttp__internal__n_error_71: { + case s_n_llhttp__internal__n_error_73: + s_n_llhttp__internal__n_error_73: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -3429,8 +3436,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_72: - s_n_llhttp__internal__n_error_72: { + case s_n_llhttp__internal__n_error_74: + s_n_llhttp__internal__n_error_74: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -3456,8 +3463,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_73: - s_n_llhttp__internal__n_error_73: { + case s_n_llhttp__internal__n_error_75: + s_n_llhttp__internal__n_error_75: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -3558,7 +3565,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_1; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3582,7 +3589,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3606,7 +3613,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_http_start_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3635,7 +3642,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_http_start_3; } default: { - goto s_n_llhttp__internal__n_error_76; + goto s_n_llhttp__internal__n_error_78; } } /* UNREACHABLE */; @@ -3726,7 +3733,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_fragment; } default: { - goto s_n_llhttp__internal__n_error_77; + goto s_n_llhttp__internal__n_error_79; } } /* UNREACHABLE */; @@ -3787,7 +3794,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_end_stub_query_3; } default: { - goto s_n_llhttp__internal__n_error_78; + goto s_n_llhttp__internal__n_error_80; } } /* UNREACHABLE */; @@ -3825,7 +3832,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_query; } default: { - goto s_n_llhttp__internal__n_error_79; + goto s_n_llhttp__internal__n_error_81; } } /* UNREACHABLE */; @@ -3950,10 +3957,10 @@ static llparse_state_t llhttp__internal__run( } case 8: { p++; - goto s_n_llhttp__internal__n_error_80; + goto s_n_llhttp__internal__n_error_82; } default: { - goto s_n_llhttp__internal__n_error_81; + goto s_n_llhttp__internal__n_error_83; } } /* UNREACHABLE */; @@ -4012,7 +4019,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server_with_at; } default: { - goto s_n_llhttp__internal__n_error_82; + goto s_n_llhttp__internal__n_error_84; } } /* UNREACHABLE */; @@ -4029,7 +4036,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_server; } default: { - goto s_n_llhttp__internal__n_error_83; + goto s_n_llhttp__internal__n_error_85; } } /* UNREACHABLE */; @@ -4066,7 +4073,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema_delim_1; } default: { - goto s_n_llhttp__internal__n_error_83; + goto s_n_llhttp__internal__n_error_85; } } /* UNREACHABLE */; @@ -4118,7 +4125,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_84; + goto s_n_llhttp__internal__n_error_86; } } /* UNREACHABLE */; @@ -4159,7 +4166,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_url_schema; } default: { - goto s_n_llhttp__internal__n_error_85; + goto s_n_llhttp__internal__n_error_87; } } /* UNREACHABLE */; @@ -4257,7 +4264,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_spaces_before_url; } default: { - goto s_n_llhttp__internal__n_error_86; + goto s_n_llhttp__internal__n_error_88; } } /* UNREACHABLE */; @@ -4271,7 +4278,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_26; default: - goto s_n_llhttp__internal__n_error_105; + goto s_n_llhttp__internal__n_error_107; } /* UNREACHABLE */; abort(); @@ -4288,7 +4295,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4313,7 +4320,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4334,7 +4341,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_3; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4359,7 +4366,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_4; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4384,7 +4391,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_6; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4409,7 +4416,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_8; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4427,7 +4434,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4448,7 +4455,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_9; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4469,7 +4476,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_7; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4494,7 +4501,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_12; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4519,7 +4526,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_13; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4540,7 +4547,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_13; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4557,7 +4564,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_11; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4582,7 +4589,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_14; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4607,7 +4614,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_17; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4649,7 +4656,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_15; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4674,7 +4681,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_18; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4699,7 +4706,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_20; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4724,7 +4731,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_21; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4745,7 +4752,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_21; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4770,7 +4777,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_23; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4795,7 +4802,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_24; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4820,7 +4827,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_26; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4845,7 +4852,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_28; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4863,7 +4870,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4884,7 +4891,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_29; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4905,7 +4912,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_27; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4930,7 +4937,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_30; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4959,7 +4966,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_30; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -4984,7 +4991,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_31; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5009,7 +5016,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_32; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5034,7 +5041,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_35; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5059,7 +5066,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_36; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5080,7 +5087,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_36; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5105,7 +5112,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_37; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5130,7 +5137,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_38; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5155,7 +5162,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_42; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5180,7 +5187,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_43; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5201,7 +5208,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_43; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5218,7 +5225,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_41; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5240,7 +5247,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_40; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5265,7 +5272,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_after_start_req_45; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5287,7 +5294,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5320,32 +5327,32 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_after_start_req_44; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_48: - s_n_llhttp__internal__n_after_start_req_48: { + case s_n_llhttp__internal__n_after_start_req_46: + s_n_llhttp__internal__n_after_start_req_46: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_48; + return s_n_llhttp__internal__n_after_start_req_46; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob43, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob43, 4); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 17; + match = 46; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_48; + return s_n_llhttp__internal__n_after_start_req_46; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5363,14 +5370,14 @@ static llparse_state_t llhttp__internal__run( switch (match_seq.status) { case kMatchComplete: { p++; - match = 44; + match = 17; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_49; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5383,19 +5390,19 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_after_start_req_50; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob45, 5); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob45, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 43; + match = 44; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_50; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5408,78 +5415,103 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_after_start_req_51; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob46, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob46, 5); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { p++; - match = 20; + match = 43; goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { return s_n_llhttp__internal__n_after_start_req_51; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_47: - s_n_llhttp__internal__n_after_start_req_47: { + case s_n_llhttp__internal__n_after_start_req_52: + s_n_llhttp__internal__n_after_start_req_52: { + llparse_match_t match_seq; + if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_47; + return s_n_llhttp__internal__n_after_start_req_52; + } + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob47, 3); + p = match_seq.current; + switch (match_seq.status) { + case kMatchComplete: { + p++; + match = 20; + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + case kMatchPause: { + return s_n_llhttp__internal__n_after_start_req_52; + } + case kMatchMismatch: { + goto s_n_llhttp__internal__n_error_108; + } + } + /* UNREACHABLE */; + abort(); + } + case s_n_llhttp__internal__n_after_start_req_48: + s_n_llhttp__internal__n_after_start_req_48: { + if (p == endp) { + return s_n_llhttp__internal__n_after_start_req_48; } switch (*p) { case 'B': { p++; - goto s_n_llhttp__internal__n_after_start_req_48; + goto s_n_llhttp__internal__n_after_start_req_49; } case 'C': { p++; - goto s_n_llhttp__internal__n_after_start_req_49; + goto s_n_llhttp__internal__n_after_start_req_50; } case 'D': { p++; - goto s_n_llhttp__internal__n_after_start_req_50; + goto s_n_llhttp__internal__n_after_start_req_51; } case 'P': { p++; - goto s_n_llhttp__internal__n_after_start_req_51; + goto s_n_llhttp__internal__n_after_start_req_52; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_46: - s_n_llhttp__internal__n_after_start_req_46: { + case s_n_llhttp__internal__n_after_start_req_47: + s_n_llhttp__internal__n_after_start_req_47: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_46; + return s_n_llhttp__internal__n_after_start_req_47; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_47; + goto s_n_llhttp__internal__n_after_start_req_48; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_54: - s_n_llhttp__internal__n_after_start_req_54: { + case s_n_llhttp__internal__n_after_start_req_55: + s_n_llhttp__internal__n_after_start_req_55: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_54; + return s_n_llhttp__internal__n_after_start_req_55; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob47, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob48, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5488,19 +5520,19 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_54; + return s_n_llhttp__internal__n_after_start_req_55; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_56: - s_n_llhttp__internal__n_after_start_req_56: { + case s_n_llhttp__internal__n_after_start_req_57: + s_n_llhttp__internal__n_after_start_req_57: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_56; + return s_n_llhttp__internal__n_after_start_req_57; } switch (*p) { case 'P': { @@ -5509,20 +5541,20 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_57: - s_n_llhttp__internal__n_after_start_req_57: { + case s_n_llhttp__internal__n_after_start_req_58: + s_n_llhttp__internal__n_after_start_req_58: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_57; + return s_n_llhttp__internal__n_after_start_req_58; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob48, 9); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob49, 9); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5531,65 +5563,65 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_57; + return s_n_llhttp__internal__n_after_start_req_58; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_55: - s_n_llhttp__internal__n_after_start_req_55: { + case s_n_llhttp__internal__n_after_start_req_56: + s_n_llhttp__internal__n_after_start_req_56: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_55; + return s_n_llhttp__internal__n_after_start_req_56; } switch (*p) { case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_56; + goto s_n_llhttp__internal__n_after_start_req_57; } case '_': { p++; - goto s_n_llhttp__internal__n_after_start_req_57; + goto s_n_llhttp__internal__n_after_start_req_58; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_53: - s_n_llhttp__internal__n_after_start_req_53: { + case s_n_llhttp__internal__n_after_start_req_54: + s_n_llhttp__internal__n_after_start_req_54: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_53; + return s_n_llhttp__internal__n_after_start_req_54; } switch (*p) { case 'A': { p++; - goto s_n_llhttp__internal__n_after_start_req_54; + goto s_n_llhttp__internal__n_after_start_req_55; } case 'T': { p++; - goto s_n_llhttp__internal__n_after_start_req_55; + goto s_n_llhttp__internal__n_after_start_req_56; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_58: - s_n_llhttp__internal__n_after_start_req_58: { + case s_n_llhttp__internal__n_after_start_req_59: + s_n_llhttp__internal__n_after_start_req_59: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_58; + return s_n_llhttp__internal__n_after_start_req_59; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob49, 4); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob50, 4); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5598,23 +5630,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_58; + return s_n_llhttp__internal__n_after_start_req_59; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_59: - s_n_llhttp__internal__n_after_start_req_59: { + case s_n_llhttp__internal__n_after_start_req_60: + s_n_llhttp__internal__n_after_start_req_60: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_59; + return s_n_llhttp__internal__n_after_start_req_60; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob50, 7); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob51, 7); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5623,48 +5655,48 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_59; + return s_n_llhttp__internal__n_after_start_req_60; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_52: - s_n_llhttp__internal__n_after_start_req_52: { + case s_n_llhttp__internal__n_after_start_req_53: + s_n_llhttp__internal__n_after_start_req_53: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_52; + return s_n_llhttp__internal__n_after_start_req_53; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_53; + goto s_n_llhttp__internal__n_after_start_req_54; } case 'O': { p++; - goto s_n_llhttp__internal__n_after_start_req_58; + goto s_n_llhttp__internal__n_after_start_req_59; } case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_59; + goto s_n_llhttp__internal__n_after_start_req_60; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_61: - s_n_llhttp__internal__n_after_start_req_61: { + case s_n_llhttp__internal__n_after_start_req_62: + s_n_llhttp__internal__n_after_start_req_62: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_61; + return s_n_llhttp__internal__n_after_start_req_62; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob51, 6); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob52, 6); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5673,23 +5705,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_61; + return s_n_llhttp__internal__n_after_start_req_62; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_62: - s_n_llhttp__internal__n_after_start_req_62: { + case s_n_llhttp__internal__n_after_start_req_63: + s_n_llhttp__internal__n_after_start_req_63: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_62; + return s_n_llhttp__internal__n_after_start_req_63; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob52, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob53, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5698,44 +5730,44 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_62; + return s_n_llhttp__internal__n_after_start_req_63; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_60: - s_n_llhttp__internal__n_after_start_req_60: { + case s_n_llhttp__internal__n_after_start_req_61: + s_n_llhttp__internal__n_after_start_req_61: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_60; + return s_n_llhttp__internal__n_after_start_req_61; } switch (*p) { case 'E': { p++; - goto s_n_llhttp__internal__n_after_start_req_61; + goto s_n_llhttp__internal__n_after_start_req_62; } case 'R': { p++; - goto s_n_llhttp__internal__n_after_start_req_62; + goto s_n_llhttp__internal__n_after_start_req_63; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_65: - s_n_llhttp__internal__n_after_start_req_65: { + case s_n_llhttp__internal__n_after_start_req_66: + s_n_llhttp__internal__n_after_start_req_66: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_65; + return s_n_llhttp__internal__n_after_start_req_66; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob53, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob54, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5744,23 +5776,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_65; + return s_n_llhttp__internal__n_after_start_req_66; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_67: - s_n_llhttp__internal__n_after_start_req_67: { + case s_n_llhttp__internal__n_after_start_req_68: + s_n_llhttp__internal__n_after_start_req_68: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_67; + return s_n_llhttp__internal__n_after_start_req_68; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob54, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob55, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5769,23 +5801,23 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_67; + return s_n_llhttp__internal__n_after_start_req_68; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_68: - s_n_llhttp__internal__n_after_start_req_68: { + case s_n_llhttp__internal__n_after_start_req_69: + s_n_llhttp__internal__n_after_start_req_69: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_68; + return s_n_llhttp__internal__n_after_start_req_69; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob55, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob56, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5794,44 +5826,44 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_68; + return s_n_llhttp__internal__n_after_start_req_69; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_66: - s_n_llhttp__internal__n_after_start_req_66: { + case s_n_llhttp__internal__n_after_start_req_67: + s_n_llhttp__internal__n_after_start_req_67: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_66; + return s_n_llhttp__internal__n_after_start_req_67; } switch (*p) { case 'I': { p++; - goto s_n_llhttp__internal__n_after_start_req_67; + goto s_n_llhttp__internal__n_after_start_req_68; } case 'O': { p++; - goto s_n_llhttp__internal__n_after_start_req_68; + goto s_n_llhttp__internal__n_after_start_req_69; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_69: - s_n_llhttp__internal__n_after_start_req_69: { + case s_n_llhttp__internal__n_after_start_req_70: + s_n_llhttp__internal__n_after_start_req_70: { llparse_match_t match_seq; if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_69; + return s_n_llhttp__internal__n_after_start_req_70; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob56, 8); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob57, 8); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -5840,52 +5872,52 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_store_method_1; } case kMatchPause: { - return s_n_llhttp__internal__n_after_start_req_69; + return s_n_llhttp__internal__n_after_start_req_70; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_64: - s_n_llhttp__internal__n_after_start_req_64: { + case s_n_llhttp__internal__n_after_start_req_65: + s_n_llhttp__internal__n_after_start_req_65: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_64; + return s_n_llhttp__internal__n_after_start_req_65; } switch (*p) { case 'B': { p++; - goto s_n_llhttp__internal__n_after_start_req_65; + goto s_n_llhttp__internal__n_after_start_req_66; } case 'L': { p++; - goto s_n_llhttp__internal__n_after_start_req_66; + goto s_n_llhttp__internal__n_after_start_req_67; } case 'S': { p++; - goto s_n_llhttp__internal__n_after_start_req_69; + goto s_n_llhttp__internal__n_after_start_req_70; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_after_start_req_63: - s_n_llhttp__internal__n_after_start_req_63: { + case s_n_llhttp__internal__n_after_start_req_64: + s_n_llhttp__internal__n_after_start_req_64: { if (p == endp) { - return s_n_llhttp__internal__n_after_start_req_63; + return s_n_llhttp__internal__n_after_start_req_64; } switch (*p) { case 'N': { p++; - goto s_n_llhttp__internal__n_after_start_req_64; + goto s_n_llhttp__internal__n_after_start_req_65; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5945,24 +5977,28 @@ static llparse_state_t llhttp__internal__run( p++; goto s_n_llhttp__internal__n_after_start_req_33; } - case 'R': { + case 'Q': { p++; goto s_n_llhttp__internal__n_after_start_req_46; } + case 'R': { + p++; + goto s_n_llhttp__internal__n_after_start_req_47; + } case 'S': { p++; - goto s_n_llhttp__internal__n_after_start_req_52; + goto s_n_llhttp__internal__n_after_start_req_53; } case 'T': { p++; - goto s_n_llhttp__internal__n_after_start_req_60; + goto s_n_llhttp__internal__n_after_start_req_61; } case 'U': { p++; - goto s_n_llhttp__internal__n_after_start_req_63; + goto s_n_llhttp__internal__n_after_start_req_64; } default: { - goto s_n_llhttp__internal__n_error_106; + goto s_n_llhttp__internal__n_error_108; } } /* UNREACHABLE */; @@ -5994,19 +6030,19 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; } default: { - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_28; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_29; } } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_invoke_test_lenient_flags_29: - s_n_llhttp__internal__n_invoke_test_lenient_flags_29: { + case s_n_llhttp__internal__n_invoke_test_lenient_flags_30: + s_n_llhttp__internal__n_invoke_test_lenient_flags_30: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_92; + goto s_n_llhttp__internal__n_error_94; } /* UNREACHABLE */; abort(); @@ -6050,7 +6086,7 @@ static llparse_state_t llhttp__internal__run( switch (*p) { case 10: { p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_27; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_28; } case 13: { p++; @@ -6061,7 +6097,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_start_llhttp__on_status; } default: { - goto s_n_llhttp__internal__n_error_93; + goto s_n_llhttp__internal__n_error_95; } } /* UNREACHABLE */; @@ -6124,7 +6160,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code_2; } default: { - goto s_n_llhttp__internal__n_error_95; + goto s_n_llhttp__internal__n_error_97; } } /* UNREACHABLE */; @@ -6187,7 +6223,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code_1; } default: { - goto s_n_llhttp__internal__n_error_97; + goto s_n_llhttp__internal__n_error_99; } } /* UNREACHABLE */; @@ -6250,7 +6286,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_mul_add_status_code; } default: { - goto s_n_llhttp__internal__n_error_99; + goto s_n_llhttp__internal__n_error_101; } } /* UNREACHABLE */; @@ -6267,7 +6303,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_invoke_update_status_code; } default: { - goto s_n_llhttp__internal__n_error_100; + goto s_n_llhttp__internal__n_error_102; } } /* UNREACHABLE */; @@ -6281,13 +6317,13 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_25; default: - goto s_n_llhttp__internal__n_error_88; + goto s_n_llhttp__internal__n_error_90; } /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_87: - s_n_llhttp__internal__n_error_87: { + case s_n_llhttp__internal__n_error_89: + s_n_llhttp__internal__n_error_89: { state->error = 0x9; state->reason = "Invalid HTTP version"; state->error_pos = (const char*) p; @@ -6296,8 +6332,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_101: - s_n_llhttp__internal__n_error_101: { + case s_n_llhttp__internal__n_error_103: + s_n_llhttp__internal__n_error_103: { state->error = 0x9; state->reason = "Invalid minor version"; state->error_pos = (const char*) p; @@ -6369,8 +6405,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_102: - s_n_llhttp__internal__n_error_102: { + case s_n_llhttp__internal__n_error_104: + s_n_llhttp__internal__n_error_104: { state->error = 0x9; state->reason = "Expected dot"; state->error_pos = (const char*) p; @@ -6396,8 +6432,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - case s_n_llhttp__internal__n_error_103: - s_n_llhttp__internal__n_error_103: { + case s_n_llhttp__internal__n_error_105: + s_n_llhttp__internal__n_error_105: { state->error = 0x9; state->reason = "Invalid major version"; state->error_pos = (const char*) p; @@ -6487,7 +6523,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_start_res; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob57, 5); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob58, 5); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6498,7 +6534,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_start_res; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_107; + goto s_n_llhttp__internal__n_error_109; } } /* UNREACHABLE */; @@ -6524,7 +6560,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_2; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob58, 2); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob59, 2); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6536,7 +6572,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_2; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6558,7 +6594,7 @@ static llparse_state_t llhttp__internal__run( if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_3; } - match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob59, 3); + match_seq = llparse__match_sequence_id(state, p, endp, llparse_blob60, 3); p = match_seq.current; switch (match_seq.status) { case kMatchComplete: { @@ -6569,7 +6605,7 @@ static llparse_state_t llhttp__internal__run( return s_n_llhttp__internal__n_req_or_res_method_3; } case kMatchMismatch: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6590,7 +6626,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_3; } default: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -6607,7 +6643,7 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_req_or_res_method_1; } default: { - goto s_n_llhttp__internal__n_error_104; + goto s_n_llhttp__internal__n_error_106; } } /* UNREACHABLE */; @@ -7760,6 +7796,15 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_44: { + state->error = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; @@ -7788,7 +7833,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_58: { + s_n_llhttp__internal__n_error_60: { state->error = 0xb; state->reason = "Content-Length can't be present with Transfer-Encoding"; state->error_pos = (const char*) p; @@ -7797,7 +7842,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_46: { + s_n_llhttp__internal__n_error_47: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -7811,12 +7856,12 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_ws; default: - goto s_n_llhttp__internal__n_error_46; + goto s_n_llhttp__internal__n_error_47; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_48: { + s_n_llhttp__internal__n_error_49: { state->error = 0xb; state->reason = "Empty Content-Length"; state->error_pos = (const char*) p; @@ -7834,7 +7879,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_47: { + s_n_llhttp__internal__n_error_48: { state->error = 0x1d; state->reason = "`on_header_value_complete` callback error"; state->error_pos = (const char*) p; @@ -7919,14 +7964,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_header_state_1: { switch (llhttp__internal__c_load_header_state(state, p, endp)) { case 2: - goto s_n_llhttp__internal__n_error_48; + goto s_n_llhttp__internal__n_error_49; default: goto s_n_llhttp__internal__n_invoke_load_header_state_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_45: { + s_n_llhttp__internal__n_error_46: { state->error = 0xa; state->reason = "Invalid header value char"; state->error_pos = (const char*) p; @@ -7940,12 +7985,12 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_lws; default: - goto s_n_llhttp__internal__n_error_45; + goto s_n_llhttp__internal__n_error_46; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_49: { + s_n_llhttp__internal__n_error_50: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -7959,7 +8004,7 @@ static llparse_state_t llhttp__internal__run( case 1: goto s_n_llhttp__internal__n_header_value_discard_lws; default: - goto s_n_llhttp__internal__n_error_49; + goto s_n_llhttp__internal__n_error_50; } /* UNREACHABLE */; abort(); @@ -7982,6 +8027,25 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } + s_n_llhttp__internal__n_error_52: { + state->error = 0xa; + state->reason = "Unexpected whitespace after header value"; + state->error_pos = (const char*) p; + state->_current = (void*) (intptr_t) s_error; + return s_error; + /* UNREACHABLE */; + abort(); + } + s_n_llhttp__internal__n_invoke_test_lenient_flags_18: { + switch (llhttp__internal__c_test_lenient_flags(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_header_state_4; + default: + goto s_n_llhttp__internal__n_error_52; + } + /* UNREACHABLE */; + abort(); + } s_n_llhttp__internal__n_invoke_update_header_state_2: { switch (llhttp__internal__c_update_header_state(state, p, endp)) { default: @@ -8038,7 +8102,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_51: { + s_n_llhttp__internal__n_error_53: { state->error = 0x3; state->reason = "Missing expected LF after header value"; state->error_pos = (const char*) p; @@ -8047,7 +8111,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_50: { + s_n_llhttp__internal__n_error_51: { state->error = 0x19; state->reason = "Missing expected CR after header value"; state->error_pos = (const char*) p; @@ -8136,14 +8200,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_52; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_54; return s_error; } - goto s_n_llhttp__internal__n_error_52; + goto s_n_llhttp__internal__n_error_54; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_18: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_19: { switch (llhttp__internal__c_test_lenient_flags(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_header_value_lenient; @@ -8251,10 +8315,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_54; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_56; return s_error; } - goto s_n_llhttp__internal__n_error_54; + goto s_n_llhttp__internal__n_error_56; /* UNREACHABLE */; abort(); } @@ -8286,14 +8350,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_55; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_57; return s_error; } - goto s_n_llhttp__internal__n_error_55; + goto s_n_llhttp__internal__n_error_57; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_53: { + s_n_llhttp__internal__n_error_55: { state->error = 0x4; state->reason = "Duplicate Content-Length"; state->error_pos = (const char*) p; @@ -8307,7 +8371,7 @@ static llparse_state_t llhttp__internal__run( case 0: goto s_n_llhttp__internal__n_header_value_content_length; default: - goto s_n_llhttp__internal__n_error_53; + goto s_n_llhttp__internal__n_error_55; } /* UNREACHABLE */; abort(); @@ -8322,11 +8386,11 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_57; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_59; return s_error; } p++; - goto s_n_llhttp__internal__n_error_57; + goto s_n_llhttp__internal__n_error_59; /* UNREACHABLE */; abort(); } @@ -8348,16 +8412,16 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_56; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_58; return s_error; } p++; - goto s_n_llhttp__internal__n_error_56; + goto s_n_llhttp__internal__n_error_58; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_19: { - switch (llhttp__internal__c_test_lenient_flags_19(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_20: { + switch (llhttp__internal__c_test_lenient_flags_20(state, p, endp)) { case 0: goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; default: @@ -8369,7 +8433,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_type_1: { switch (llhttp__internal__c_load_type(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_19; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_20; default: goto s_n_llhttp__internal__n_header_value_te_chunked; } @@ -8400,8 +8464,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_20: { - switch (llhttp__internal__c_test_lenient_flags_19(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_21: { + switch (llhttp__internal__c_test_lenient_flags_20(state, p, endp)) { case 0: goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_9; default: @@ -8413,7 +8477,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_load_type_2: { switch (llhttp__internal__c_load_type(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_20; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_21; default: goto s_n_llhttp__internal__n_invoke_or_flags_19; } @@ -8462,10 +8526,10 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_21: { - switch (llhttp__internal__c_test_lenient_flags_21(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_22: { + switch (llhttp__internal__c_test_lenient_flags_22(state, p, endp)) { case 0: - goto s_n_llhttp__internal__n_error_58; + goto s_n_llhttp__internal__n_error_60; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8475,14 +8539,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_test_flags_4: { switch (llhttp__internal__c_test_flags_4(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_21; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_22; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_59: { + s_n_llhttp__internal__n_error_61: { state->error = 0xf; state->reason = "Transfer-Encoding can't be present with Content-Length"; state->error_pos = (const char*) p; @@ -8491,10 +8555,10 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_22: { - switch (llhttp__internal__c_test_lenient_flags_21(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_23: { + switch (llhttp__internal__c_test_lenient_flags_22(state, p, endp)) { case 0: - goto s_n_llhttp__internal__n_error_59; + goto s_n_llhttp__internal__n_error_61; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8504,7 +8568,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_test_flags_5: { switch (llhttp__internal__c_test_flags_2(state, p, endp)) { case 1: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_22; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_23; default: goto s_n_llhttp__internal__n_header_value_discard_ws; } @@ -8520,7 +8584,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_44: { + s_n_llhttp__internal__n_error_45: { state->error = 0x1c; state->reason = "`on_header_field_complete` callback error"; state->error_pos = (const char*) p; @@ -8565,7 +8629,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_60: { + s_n_llhttp__internal__n_error_62: { state->error = 0xa; state->reason = "Invalid header token"; state->error_pos = (const char*) p; @@ -8680,7 +8744,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_61: { + s_n_llhttp__internal__n_error_63: { state->error = 0x7; state->reason = "Expected CRLF"; state->error_pos = (const char*) p; @@ -8706,7 +8770,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_69: { + s_n_llhttp__internal__n_error_71: { state->error = 0x17; state->reason = "Pause on PRI/Upgrade"; state->error_pos = (const char*) p; @@ -8715,7 +8779,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_70: { + s_n_llhttp__internal__n_error_72: { state->error = 0x9; state->reason = "Expected HTTP/2 Connection Preface"; state->error_pos = (const char*) p; @@ -8724,7 +8788,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_67: { + s_n_llhttp__internal__n_error_69: { state->error = 0x2; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8733,17 +8797,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_25: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_26: { switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_headers_start; default: - goto s_n_llhttp__internal__n_error_67; + goto s_n_llhttp__internal__n_error_69; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_66: { + s_n_llhttp__internal__n_error_68: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8752,17 +8816,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_24: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_25: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_req_http_complete_crlf; default: - goto s_n_llhttp__internal__n_error_66; + goto s_n_llhttp__internal__n_error_68; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_68: { + s_n_llhttp__internal__n_error_70: { state->error = 0x9; state->reason = "Expected CRLF after version"; state->error_pos = (const char*) p; @@ -8780,7 +8844,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_65: { + s_n_llhttp__internal__n_error_67: { state->error = 0x21; state->reason = "`on_version_complete` callback error"; state->error_pos = (const char*) p; @@ -8816,10 +8880,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_64; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_66; return s_error; } - goto s_n_llhttp__internal__n_error_64; + goto s_n_llhttp__internal__n_error_66; /* UNREACHABLE */; abort(); } @@ -8869,8 +8933,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_23: { - switch (llhttp__internal__c_test_lenient_flags_23(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_24: { + switch (llhttp__internal__c_test_lenient_flags_24(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_span_end_llhttp__on_version_1; default: @@ -8882,7 +8946,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_store_http_minor: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_23; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_24; } /* UNREACHABLE */; abort(); @@ -8897,10 +8961,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_71; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_73; return s_error; } - goto s_n_llhttp__internal__n_error_71; + goto s_n_llhttp__internal__n_error_73; /* UNREACHABLE */; abort(); } @@ -8914,10 +8978,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_72; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_74; return s_error; } - goto s_n_llhttp__internal__n_error_72; + goto s_n_llhttp__internal__n_error_74; /* UNREACHABLE */; abort(); } @@ -8939,14 +9003,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_73; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_75; return s_error; } - goto s_n_llhttp__internal__n_error_73; + goto s_n_llhttp__internal__n_error_75; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_63: { + s_n_llhttp__internal__n_error_65: { state->error = 0x8; state->reason = "Invalid method for HTTP/x.x request"; state->error_pos = (const char*) p; @@ -9027,13 +9091,15 @@ static llparse_state_t llhttp__internal__run( goto s_n_llhttp__internal__n_span_start_llhttp__on_version; case 34: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; + case 46: + goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_63; + goto s_n_llhttp__internal__n_error_65; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_76: { + s_n_llhttp__internal__n_error_78: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -9042,7 +9108,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_74: { + s_n_llhttp__internal__n_error_76: { state->error = 0x8; state->reason = "Expected SOURCE method for ICE/x.x request"; state->error_pos = (const char*) p; @@ -9056,12 +9122,12 @@ static llparse_state_t llhttp__internal__run( case 33: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_74; + goto s_n_llhttp__internal__n_error_76; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_75: { + s_n_llhttp__internal__n_error_77: { state->error = 0x8; state->reason = "Invalid method for RTSP/x.x request"; state->error_pos = (const char*) p; @@ -9101,7 +9167,7 @@ static llparse_state_t llhttp__internal__run( case 45: goto s_n_llhttp__internal__n_span_start_llhttp__on_version; default: - goto s_n_llhttp__internal__n_error_75; + goto s_n_llhttp__internal__n_error_77; } /* UNREACHABLE */; abort(); @@ -9115,7 +9181,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_62: { + s_n_llhttp__internal__n_error_64: { state->error = 0x1a; state->reason = "`on_url_complete` callback error"; state->error_pos = (const char*) p; @@ -9131,7 +9197,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_22; default: - goto s_n_llhttp__internal__n_error_62; + goto s_n_llhttp__internal__n_error_64; } /* UNREACHABLE */; abort(); @@ -9204,7 +9270,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_77: { + s_n_llhttp__internal__n_error_79: { state->error = 0x7; state->reason = "Invalid char in url fragment start"; state->error_pos = (const char*) p; @@ -9264,7 +9330,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_78: { + s_n_llhttp__internal__n_error_80: { state->error = 0x7; state->reason = "Invalid char in url query"; state->error_pos = (const char*) p; @@ -9273,7 +9339,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_79: { + s_n_llhttp__internal__n_error_81: { state->error = 0x7; state->reason = "Invalid char in url path"; state->error_pos = (const char*) p; @@ -9384,7 +9450,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_80: { + s_n_llhttp__internal__n_error_82: { state->error = 0x7; state->reason = "Double @ in url"; state->error_pos = (const char*) p; @@ -9393,7 +9459,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_81: { + s_n_llhttp__internal__n_error_83: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -9402,7 +9468,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_82: { + s_n_llhttp__internal__n_error_84: { state->error = 0x7; state->reason = "Unexpected char in url server"; state->error_pos = (const char*) p; @@ -9411,7 +9477,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_83: { + s_n_llhttp__internal__n_error_85: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -9420,7 +9486,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_84: { + s_n_llhttp__internal__n_error_86: { state->error = 0x7; state->reason = "Unexpected char in url schema"; state->error_pos = (const char*) p; @@ -9429,7 +9495,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_85: { + s_n_llhttp__internal__n_error_87: { state->error = 0x7; state->reason = "Unexpected start char in url"; state->error_pos = (const char*) p; @@ -9448,7 +9514,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_86: { + s_n_llhttp__internal__n_error_88: { state->error = 0x6; state->reason = "Expected space after method"; state->error_pos = (const char*) p; @@ -9466,7 +9532,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_105: { + s_n_llhttp__internal__n_error_107: { state->error = 0x20; state->reason = "`on_method_complete` callback error"; state->error_pos = (const char*) p; @@ -9500,7 +9566,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_106: { + s_n_llhttp__internal__n_error_108: { state->error = 0x6; state->reason = "Invalid method encountered"; state->error_pos = (const char*) p; @@ -9509,7 +9575,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_98: { + s_n_llhttp__internal__n_error_100: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9518,7 +9584,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_96: { + s_n_llhttp__internal__n_error_98: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9527,7 +9593,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_94: { + s_n_llhttp__internal__n_error_96: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9545,7 +9611,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_90: { + s_n_llhttp__internal__n_error_92: { state->error = 0x1b; state->reason = "`on_status_complete` callback error"; state->error_pos = (const char*) p; @@ -9561,12 +9627,12 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_24; default: - goto s_n_llhttp__internal__n_error_90; + goto s_n_llhttp__internal__n_error_92; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_89: { + s_n_llhttp__internal__n_error_91: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -9575,17 +9641,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_27: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_28: { switch (llhttp__internal__c_test_lenient_flags_1(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_89; + goto s_n_llhttp__internal__n_error_91; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_91: { + s_n_llhttp__internal__n_error_93: { state->error = 0x2; state->reason = "Expected LF after CR"; state->error_pos = (const char*) p; @@ -9594,17 +9660,17 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_28: { + s_n_llhttp__internal__n_invoke_test_lenient_flags_29: { switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; default: - goto s_n_llhttp__internal__n_error_91; + goto s_n_llhttp__internal__n_error_93; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_92: { + s_n_llhttp__internal__n_error_94: { state->error = 0x19; state->reason = "Missing expected CR after response line"; state->error_pos = (const char*) p; @@ -9623,11 +9689,11 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) (p + 1); - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_invoke_test_lenient_flags_29; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_invoke_test_lenient_flags_30; return s_error; } p++; - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_29; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_30; /* UNREACHABLE */; abort(); } @@ -9649,7 +9715,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_93: { + s_n_llhttp__internal__n_error_95: { state->error = 0xd; state->reason = "Invalid response status"; state->error_pos = (const char*) p; @@ -9661,14 +9727,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code_2: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_94; + goto s_n_llhttp__internal__n_error_96; default: goto s_n_llhttp__internal__n_res_status_code_otherwise; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_95: { + s_n_llhttp__internal__n_error_97: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9680,14 +9746,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code_1: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_96; + goto s_n_llhttp__internal__n_error_98; default: goto s_n_llhttp__internal__n_res_status_code_digit_3; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_97: { + s_n_llhttp__internal__n_error_99: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9699,14 +9765,14 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_mul_add_status_code: { switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { case 1: - goto s_n_llhttp__internal__n_error_98; + goto s_n_llhttp__internal__n_error_100; default: goto s_n_llhttp__internal__n_res_status_code_digit_2; } /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_99: { + s_n_llhttp__internal__n_error_101: { state->error = 0xd; state->reason = "Invalid status code"; state->error_pos = (const char*) p; @@ -9723,7 +9789,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_100: { + s_n_llhttp__internal__n_error_102: { state->error = 0x9; state->reason = "Expected space after version"; state->error_pos = (const char*) p; @@ -9741,7 +9807,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_88: { + s_n_llhttp__internal__n_error_90: { state->error = 0x21; state->reason = "`on_version_complete` callback error"; state->error_pos = (const char*) p; @@ -9777,10 +9843,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_87; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_89; return s_error; } - goto s_n_llhttp__internal__n_error_87; + goto s_n_llhttp__internal__n_error_89; /* UNREACHABLE */; abort(); } @@ -9830,8 +9896,8 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_invoke_test_lenient_flags_26: { - switch (llhttp__internal__c_test_lenient_flags_23(state, p, endp)) { + s_n_llhttp__internal__n_invoke_test_lenient_flags_27: { + switch (llhttp__internal__c_test_lenient_flags_24(state, p, endp)) { case 1: goto s_n_llhttp__internal__n_span_end_llhttp__on_version_6; default: @@ -9843,7 +9909,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_invoke_store_http_minor_1: { switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { default: - goto s_n_llhttp__internal__n_invoke_test_lenient_flags_26; + goto s_n_llhttp__internal__n_invoke_test_lenient_flags_27; } /* UNREACHABLE */; abort(); @@ -9858,10 +9924,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_101; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_103; return s_error; } - goto s_n_llhttp__internal__n_error_101; + goto s_n_llhttp__internal__n_error_103; /* UNREACHABLE */; abort(); } @@ -9875,10 +9941,10 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_102; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_104; return s_error; } - goto s_n_llhttp__internal__n_error_102; + goto s_n_llhttp__internal__n_error_104; /* UNREACHABLE */; abort(); } @@ -9900,14 +9966,14 @@ static llparse_state_t llhttp__internal__run( if (err != 0) { state->error = err; state->error_pos = (const char*) p; - state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_103; + state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_105; return s_error; } - goto s_n_llhttp__internal__n_error_103; + goto s_n_llhttp__internal__n_error_105; /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_107: { + s_n_llhttp__internal__n_error_109: { state->error = 0x8; state->reason = "Expected HTTP/"; state->error_pos = (const char*) p; @@ -9967,7 +10033,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_104: { + s_n_llhttp__internal__n_error_106: { state->error = 0x8; state->reason = "Invalid word encountered"; state->error_pos = (const char*) p; @@ -10040,7 +10106,7 @@ static llparse_state_t llhttp__internal__run( /* UNREACHABLE */; abort(); } - s_n_llhttp__internal__n_error_108: { + s_n_llhttp__internal__n_error_110: { state->error = 0x1f; state->reason = "`on_reset` callback error"; state->error_pos = (const char*) p; @@ -10056,7 +10122,7 @@ static llparse_state_t llhttp__internal__run( case 21: goto s_n_llhttp__internal__n_pause_28; default: - goto s_n_llhttp__internal__n_error_108; + goto s_n_llhttp__internal__n_error_110; } /* UNREACHABLE */; abort(); diff --git a/Windows/Src/HttpAgent.cpp b/Windows/Src/HttpAgent.cpp index 06bbb85dd..8d8057c0e 100644 --- a/Windows/Src/HttpAgent.cpp +++ b/Windows/Src/HttpAgent.cpp @@ -200,6 +200,15 @@ template EnHandleResult CHttpAgentT void CHttpAgentT::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_objPool.ReleaseGCHttpObj(bForce); +#endif +} + template BOOL CHttpAgentT::IsUpgrade(CONNID dwConnID) { THttpObj* pHttpObj = FindHttpObj(dwConnID); diff --git a/Windows/Src/HttpAgent.h b/Windows/Src/HttpAgent.h index 2e83d91fd..39680a114 100644 --- a/Windows/Src/HttpAgent.h +++ b/Windows/Src/HttpAgent.h @@ -108,6 +108,8 @@ template class CHttpAgentT : public IComplexHttpRe virtual EnHandleResult DoFireClose(TSocketObj* pSocketObj, EnSocketOperation enOperation, int iErrorCode); virtual EnHandleResult DoFireShutdown(); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + EnHandleResult DoFireSuperReceive(TSocketObj* pSocketObj, const BYTE* pData, int iLength) {return __super::DoFireReceive(pSocketObj, pData, iLength);} diff --git a/Windows/Src/HttpHelper.h b/Windows/Src/HttpHelper.h index 80b707ac3..bb0781097 100644 --- a/Windows/Src/HttpHelper.h +++ b/Windows/Src/HttpHelper.h @@ -91,7 +91,7 @@ typedef llhttp_settings_t http_parser_settings; #define MIN_HTTP_RELEASE_CHECK_INTERVAL 1000 #define MIN_HTTP_RELEASE_DELAY 100 #define MAX_HTTP_RELEASE_DELAY (60 * 1000) -#define DEFAULT_HTTP_RELEASE_DELAY (3 * 1000) +#define DEFAULT_HTTP_RELEASE_DELAY (5 * 1000) #define DEFAULT_HTTP_VERSION HV_1_1 #define DEFAULT_HTTP_SYNC_CONNECT_TIMEOUT 5000 @@ -1306,8 +1306,9 @@ template class CHttpObjPoolT { pHttpObj->SetFree(); +#ifndef USE_EXTERNAL_GC ReleaseGCHttpObj(); - +#endif if(!m_lsFreeHttpObj.TryPut(pHttpObj)) m_lsGCHttpObj.PushBack(pHttpObj); } @@ -1325,7 +1326,6 @@ template class CHttpObjPoolT ENSURE(m_lsGCHttpObj.IsEmpty()); } -private: void ReleaseGCHttpObj(BOOL bForce = FALSE) { ::ReleaseGCObj(m_lsGCHttpObj, m_dwHttpObjLockTime, bForce); diff --git a/Windows/Src/HttpServer.cpp b/Windows/Src/HttpServer.cpp index b741711ef..79db5ddd5 100644 --- a/Windows/Src/HttpServer.cpp +++ b/Windows/Src/HttpServer.cpp @@ -284,6 +284,15 @@ template EnHandleResult CHttpServerT void CHttpServerT::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_objPool.ReleaseGCHttpObj(bForce); +#endif +} + template void CHttpServerT::WaitForCleanerThreadEnd() { if(m_thCleaner.IsRunning()) diff --git a/Windows/Src/HttpServer.h b/Windows/Src/HttpServer.h index 273cabbfd..0d92a8f92 100644 --- a/Windows/Src/HttpServer.h +++ b/Windows/Src/HttpServer.h @@ -100,6 +100,8 @@ template class CHttpServerT : public IComplexHttpR virtual EnHandleResult DoFireClose(TSocketObj* pSocketObj, EnSocketOperation enOperation, int iErrorCode); virtual EnHandleResult DoFireShutdown(); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + EnHandleResult DoFireSuperReceive(TSocketObj* pSocketObj, const BYTE* pData, int iLength) {return __super::DoFireReceive(pSocketObj, pData, iLength);} diff --git a/Windows/Src/InternalDef.h b/Windows/Src/InternalDef.h index 8514a5c64..18d0df0d5 100644 --- a/Windows/Src/InternalDef.h +++ b/Windows/Src/InternalDef.h @@ -107,6 +107,9 @@ /* Ĭѹ/ѹݻ */ #define DEFAULT_COMPRESS_BUFFER_SIZE (16 * 1024) +/* ռ룩 */ +#define GC_CHECK_INTERVAL (15 * 1000) + #define HOST_SEPARATOR_CHAR '^' #define PORT_SEPARATOR_CHAR ':' #define IPV6_ADDR_BEGIN_CHAR '[' diff --git a/Windows/Src/SSLAgent.cpp b/Windows/Src/SSLAgent.cpp index a343c57e6..7e023b2ea 100644 --- a/Windows/Src/SSLAgent.cpp +++ b/Windows/Src/SSLAgent.cpp @@ -66,6 +66,15 @@ void CSSLAgent::OnWorkerThreadEnd(THR_ID dwThreadID) __super::OnWorkerThreadEnd(dwThreadID); } +void CSSLAgent::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_sslPool.ReleaseGCSession(bForce); +#endif +} + BOOL CSSLAgent::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount) { ASSERT(pBuffers && iCount > 0); diff --git a/Windows/Src/SSLAgent.h b/Windows/Src/SSLAgent.h index f513a900c..c7eed630b 100644 --- a/Windows/Src/SSLAgent.h +++ b/Windows/Src/SSLAgent.h @@ -64,6 +64,8 @@ class CSSLAgent : public CTcpAgent virtual void OnWorkerThreadEnd(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + protected: virtual BOOL StartSSLHandShake(TSocketObj* pSocketObj); diff --git a/Windows/Src/SSLHelper.cpp b/Windows/Src/SSLHelper.cpp index b7bb0653c..b665af450 100644 --- a/Windows/Src/SSLHelper.cpp +++ b/Windows/Src/SSLHelper.cpp @@ -1168,8 +1168,9 @@ void CSSLSessionPool::PutFreeSession(CSSLSession* pSession) { if(pSession->Reset()) { +#ifndef USE_EXTERNAL_GC ReleaseGCSession(); - +#endif if(!m_lsFreeSession.TryPut(pSession)) m_lsGCSession.PushBack(pSession); } diff --git a/Windows/Src/SSLHelper.h b/Windows/Src/SSLHelper.h index 76be5e947..a73ea4703 100644 --- a/Windows/Src/SSLHelper.h +++ b/Windows/Src/SSLHelper.h @@ -342,8 +342,7 @@ class CSSLSessionPool void Prepare (); void Clear (); -private: - void ReleaseGCSession (BOOL bForce = FALSE); + void ReleaseGCSession (BOOL bForce = FALSE); public: void SetItemCapacity (DWORD dwItemCapacity) {m_itPool.SetItemCapacity(dwItemCapacity);} diff --git a/Windows/Src/SSLServer.cpp b/Windows/Src/SSLServer.cpp index c10a32b01..a69755b9b 100644 --- a/Windows/Src/SSLServer.cpp +++ b/Windows/Src/SSLServer.cpp @@ -66,6 +66,15 @@ void CSSLServer::OnWorkerThreadEnd(THR_ID dwThreadID) __super::OnWorkerThreadEnd(dwThreadID); } +void CSSLServer::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_sslPool.ReleaseGCSession(bForce); +#endif +} + BOOL CSSLServer::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount) { ASSERT(pBuffers && iCount > 0); diff --git a/Windows/Src/SSLServer.h b/Windows/Src/SSLServer.h index 76f137698..f62048c56 100644 --- a/Windows/Src/SSLServer.h +++ b/Windows/Src/SSLServer.h @@ -73,6 +73,8 @@ class CSSLServer : public CTcpServer virtual void OnWorkerThreadEnd(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + protected: virtual BOOL StartSSLHandShake(TSocketObj* pSocketObj); diff --git a/Windows/Src/SocketHelper.cpp b/Windows/Src/SocketHelper.cpp index 03d7c9f94..a068e7fb4 100644 --- a/Windows/Src/SocketHelper.cpp +++ b/Windows/Src/SocketHelper.cpp @@ -1200,6 +1200,7 @@ LPCTSTR GetSocketErrorDesc(EnSocketError enCode) case SE_NETWORK: return _T("Network Error"); case SE_DATA_PROC: return _T("Process Data Error"); case SE_DATA_SEND: return _T("Send Data Fail"); + case SE_GC_START: return _T("Start GC Fail"); case SE_SSL_ENV_NOT_READY: return _T("SSL environment not ready"); diff --git a/Windows/Src/SocketHelper.h b/Windows/Src/SocketHelper.h index 92dd2d622..14ac2244f 100644 --- a/Windows/Src/SocketHelper.h +++ b/Windows/Src/SocketHelper.h @@ -700,6 +700,61 @@ struct TUdpSocketObj : public TSocketObjBase } }; +/* 虚拟 Timer Queue */ +class _CFakeTimerQueue +{ +public: + _CFakeTimerQueue() + { + + } + + ~_CFakeTimerQueue() + { + + } + + HANDLE CreateTimer(WAITORTIMERCALLBACK fnCallback, PVOID lpParam, DWORD dwPeriod, DWORD dwDueTime = INFINITE, ULONG ulFlags = WT_EXECUTEDEFAULT) + { + return INVALID_HANDLE_VALUE; + } + + BOOL ChangeTimer(HANDLE hTimer, DWORD dwPeriod, DWORD dwDueTime = INFINITE) + { + return TRUE; + } + + BOOL DeleteTimer(HANDLE hTimer, HANDLE hCompletionEvent = INVALID_HANDLE_VALUE) + { + return TRUE; + } + + BOOL Reset() + { + return TRUE; + } + + BOOL IsValid() { return TRUE; } + + HANDLE GetHandle() { return INVALID_HANDLE_VALUE; } + const HANDLE GetHandle() const { return INVALID_HANDLE_VALUE; } + + operator HANDLE() { return INVALID_HANDLE_VALUE; } + operator const HANDLE() const { return INVALID_HANDLE_VALUE; } + +private: + _CFakeTimerQueue(const _CFakeTimerQueue&); + _CFakeTimerQueue operator = (const _CFakeTimerQueue&); +}; + +/* 垃圾回收 Timer Queue */ +#ifdef USE_EXTERNAL_GC +typedef CTimerQueue CGCTimerQueue; +#else +typedef _CFakeTimerQueue CGCTimerQueue; +#endif + + /* 有效 TSocketObj 缓存 */ typedef CRingCache2 TSocketObjPtrPool; /* 失效 TSocketObj 缓存 */ diff --git a/Windows/Src/TcpAgent.cpp b/Windows/Src/TcpAgent.cpp index 4ee8c4ae9..df8bf2397 100644 --- a/Windows/Src/TcpAgent.cpp +++ b/Windows/Src/TcpAgent.cpp @@ -245,8 +245,6 @@ BOOL CTcpAgent::CreateCompletePort() BOOL CTcpAgent::CreateWorkerThreads() { - BOOL isOK = TRUE; - for(DWORD i = 0; i < m_dwWorkerThreadCount; i++) { HANDLE hThread = (HANDLE)_beginthreadex(nullptr, 0, WorkerThreadProc, (LPVOID)this, 0, nullptr); @@ -256,12 +254,19 @@ BOOL CTcpAgent::CreateWorkerThreads() else { SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::GetLastError()); - isOK = FALSE; - break; + return FALSE; } } - return isOK; +#ifdef USE_EXTERNAL_GC + if(IS_NULL(m_tqGC.CreateTimer(GCProc, this, GC_CHECK_INTERVAL, GC_CHECK_INTERVAL, WT_EXECUTEINTIMERTHREAD))) + { + SetLastError(SE_GC_START, __FUNCTION__, ::GetLastError()); + return FALSE; + } +#endif + + return TRUE; } BOOL CTcpAgent::Stop() @@ -351,7 +356,9 @@ void CTcpAgent::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFla m_bfActiveSockets.Remove(pSocketObj->connID); TSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -383,6 +390,7 @@ void CTcpAgent::AddClientSocketObj(CONNID dwConnID, TSocketObj* pSocketObj, cons void CTcpAgent::ReleaseFreeSocket() { + m_tqGC.Reset(); m_lsFreeSocket.Clear(); ReleaseGCSocketObj(TRUE); @@ -1609,3 +1617,9 @@ void CTcpAgent::CheckError(TSocketObj* pSocketObj, EnSocketOperation enOperation if(iErrorCode != WSAENOTSOCK && iErrorCode != ERROR_OPERATION_ABORTED) AddFreeSocketObj(pSocketObj, SCF_ERROR, enOperation, iErrorCode); } + +void WINAPI CTcpAgent::GCProc(LPVOID pv, BOOLEAN bTimerFired) +{ + CTcpAgent* pThis = (CTcpAgent*)pv; + pThis->ReleaseGCSocketObj(FALSE); +} diff --git a/Windows/Src/TcpAgent.h b/Windows/Src/TcpAgent.h index 5554f84b1..594d61f41 100644 --- a/Windows/Src/TcpAgent.h +++ b/Windows/Src/TcpAgent.h @@ -164,6 +164,8 @@ class CTcpAgent : public ITcpAgent virtual void OnWorkerThreadStart(THR_ID dwThreadID) {} virtual void OnWorkerThreadEnd(THR_ID dwThreadID) {} + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + BOOL DoSendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount); BOOL DoSendPackets(TSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount); TSocketObj* FindSocketObj(CONNID dwConnID); @@ -209,7 +211,6 @@ class CTcpAgent : public ITcpAgent TSocketObj* CreateSocketObj(); void DeleteSocketObj(TSocketObj* pSocketObj); BOOL InvalidSocketObj(TSocketObj* pSocketObj); - void ReleaseGCSocketObj(BOOL bForce = FALSE); void AddClientSocketObj(CONNID dwConnID, TSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr, LPCTSTR lpszRemoteHostName, PVOID pExtra); void CloseClientSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, int iShutdownFlag = SD_SEND); @@ -218,6 +219,7 @@ class CTcpAgent : public ITcpAgent friend BOOL ContinueReceive<>(CTcpAgent* pThis, TSocketObj* pSocketObj, TBufferObj* pBufferObj, EnHandleResult& hr); static UINT WINAPI WorkerThreadProc(LPVOID pv); + static void WINAPI GCProc(LPVOID pv, BOOLEAN bTimerFired); EnIocpAction CheckIocpCommand(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey); @@ -319,6 +321,8 @@ class CTcpAgent : public ITcpAgent HP_SOCKADDR m_soAddr; vector m_vtWorkerThreads; + CGCTimerQueue m_tqGC; + CPrivateHeap m_phSocket; CBufferObjPool m_bfObjPool; diff --git a/Windows/Src/TcpPackAgent.h b/Windows/Src/TcpPackAgent.h index 82ec3d021..4feb6d147 100644 --- a/Windows/Src/TcpPackAgent.h +++ b/Windows/Src/TcpPackAgent.h @@ -140,6 +140,15 @@ template class CTcpPackAgentT : public IPackSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + public: virtual void SetMaxPackSize (DWORD dwMaxPackSize) {ENSURE_HAS_STOPPED(); m_dwMaxPackSize = dwMaxPackSize;} virtual void SetPackHeaderFlag (USHORT usPackHeaderFlag) {ENSURE_HAS_STOPPED(); m_usHeaderFlag = usPackHeaderFlag;} diff --git a/Windows/Src/TcpPackServer.h b/Windows/Src/TcpPackServer.h index e16489a3b..b65275f34 100644 --- a/Windows/Src/TcpPackServer.h +++ b/Windows/Src/TcpPackServer.h @@ -140,6 +140,15 @@ template class CTcpPackServerT : public IPackSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + public: virtual void SetMaxPackSize (DWORD dwMaxPackSize) {ENSURE_HAS_STOPPED(); m_dwMaxPackSize = dwMaxPackSize;} virtual void SetPackHeaderFlag (USHORT usPackHeaderFlag) {ENSURE_HAS_STOPPED(); m_usHeaderFlag = usPackHeaderFlag;} diff --git a/Windows/Src/TcpPullAgent.h b/Windows/Src/TcpPullAgent.h index 953779051..104225e02 100644 --- a/Windows/Src/TcpPullAgent.h +++ b/Windows/Src/TcpPullAgent.h @@ -109,6 +109,15 @@ template class CTcpPullAgentT : public IPullSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + private: void ReleaseConnectionExtra(TSocketObj* pSocketObj) { diff --git a/Windows/Src/TcpPullServer.h b/Windows/Src/TcpPullServer.h index 21c2dfec0..4d7f9a273 100644 --- a/Windows/Src/TcpPullServer.h +++ b/Windows/Src/TcpPullServer.h @@ -109,6 +109,15 @@ template class CTcpPullServerT : public IPullSocket, public T m_bfPool.Prepare(); } + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE) + { + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_bfPool.ReleaseGCBuffer(bForce); +#endif + } + private: void ReleaseConnectionExtra(TSocketObj* pSocketObj) { diff --git a/Windows/Src/TcpServer.cpp b/Windows/Src/TcpServer.cpp index 823a6a34b..acfd0bd6f 100644 --- a/Windows/Src/TcpServer.cpp +++ b/Windows/Src/TcpServer.cpp @@ -258,8 +258,6 @@ BOOL CTcpServer::CreateCompletePort() BOOL CTcpServer::CreateWorkerThreads() { - BOOL isOK = TRUE; - for(DWORD i = 0; i < m_dwWorkerThreadCount; i++) { HANDLE hThread = (HANDLE)_beginthreadex(nullptr, 0, WorkerThreadProc, (LPVOID)this, 0, nullptr); @@ -269,18 +267,15 @@ BOOL CTcpServer::CreateWorkerThreads() else { SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::GetLastError()); - isOK = FALSE; - break; + return FALSE; } } - return isOK; + return TRUE; } BOOL CTcpServer::StartAccept() { - BOOL isOK = TRUE; - if(::CreateIoCompletionPort((HANDLE)m_soListen, m_hCompletePort, m_soListen, 0)) { m_iRemainAcceptSockets = m_dwAcceptSocketCount; @@ -291,10 +286,18 @@ BOOL CTcpServer::StartAccept() else { SetLastError(SE_SOCKE_ATTACH_TO_CP, __FUNCTION__, ::GetLastError()); - isOK = FALSE; + return FALSE; } - return isOK; +#ifdef USE_EXTERNAL_GC + if(IS_NULL(m_tqGC.CreateTimer(GCProc, this, GC_CHECK_INTERVAL, GC_CHECK_INTERVAL, WT_EXECUTEINTIMERTHREAD))) + { + SetLastError(SE_GC_START, __FUNCTION__, ::GetLastError()); + return FALSE; + } +#endif + + return TRUE; } BOOL CTcpServer::Stop() @@ -399,7 +402,9 @@ void CTcpServer::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFl m_bfActiveSockets.Remove(pSocketObj->connID); TSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -430,6 +435,7 @@ void CTcpServer::AddClientSocketObj(CONNID dwConnID, TSocketObj* pSocketObj, con void CTcpServer::ReleaseFreeSocket() { + m_tqGC.Reset(); m_lsFreeSocket.Clear(); ReleaseGCSocketObj(TRUE); @@ -1513,3 +1519,9 @@ void CTcpServer::CheckError(TSocketObj* pSocketObj, EnSocketOperation enOperatio if(iErrorCode != WSAENOTSOCK && iErrorCode != ERROR_OPERATION_ABORTED) AddFreeSocketObj(pSocketObj, SCF_ERROR, enOperation, iErrorCode); } + +void WINAPI CTcpServer::GCProc(LPVOID pv, BOOLEAN bTimerFired) +{ + CTcpServer* pThis = (CTcpServer*)pv; + pThis->ReleaseGCSocketObj(FALSE); +} diff --git a/Windows/Src/TcpServer.h b/Windows/Src/TcpServer.h index 0dcf193ad..a4890782e 100644 --- a/Windows/Src/TcpServer.h +++ b/Windows/Src/TcpServer.h @@ -168,6 +168,8 @@ class CTcpServer : public ITcpServer virtual void OnWorkerThreadStart(THR_ID dwThreadID) {} virtual void OnWorkerThreadEnd(THR_ID dwThreadID) {} + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + BOOL DoSendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount); BOOL DoSendPackets(TSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount); TSocketObj* FindSocketObj(CONNID dwConnID); @@ -215,7 +217,6 @@ class CTcpServer : public ITcpServer TSocketObj* CreateSocketObj(); void DeleteSocketObj(TSocketObj* pSocketObj); BOOL InvalidSocketObj(TSocketObj* pSocketObj); - void ReleaseGCSocketObj(BOOL bForce = FALSE); void AddClientSocketObj(CONNID dwConnID, TSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr); void CloseClientSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, int iShutdownFlag = SD_SEND); @@ -224,6 +225,7 @@ class CTcpServer : public ITcpServer friend BOOL ContinueReceive<>(CTcpServer* pThis, TSocketObj* pSocketObj, TBufferObj* pBufferObj, EnHandleResult& hr); static UINT WINAPI WorkerThreadProc(LPVOID pv); + static void WINAPI GCProc(LPVOID pv, BOOLEAN bTimerFired); EnIocpAction CheckIocpCommand(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey); @@ -334,6 +336,8 @@ class CTcpServer : public ITcpServer CSpinGuard m_csState; + CGCTimerQueue m_tqGC; + TSocketObjPtrPool m_bfActiveSockets; TSocketObjPtrList m_lsFreeSocket; diff --git a/Windows/Src/UdpArqServer.cpp b/Windows/Src/UdpArqServer.cpp index ed8b11963..0ccfe04ff 100644 --- a/Windows/Src/UdpArqServer.cpp +++ b/Windows/Src/UdpArqServer.cpp @@ -76,6 +76,15 @@ void CUdpArqServer::OnWorkerThreadStart(THR_ID dwThreadID) ::WaitFor(3); } +void CUdpArqServer::ReleaseGCSocketObj(BOOL bForce) +{ + __super::ReleaseGCSocketObj(bForce); + +#ifdef USE_EXTERNAL_GC + m_ssPool.ReleaseGCSession(bForce); +#endif +} + BOOL CUdpArqServer::Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset) { ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_arqAttr.dwMaxMessageSize); diff --git a/Windows/Src/UdpArqServer.h b/Windows/Src/UdpArqServer.h index 3914c2edb..a275adc2f 100644 --- a/Windows/Src/UdpArqServer.h +++ b/Windows/Src/UdpArqServer.h @@ -53,6 +53,8 @@ class CUdpArqServer : public IArqSocket, public CUdpServer virtual void Reset(); virtual void OnWorkerThreadStart(THR_ID dwThreadID); + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + public: virtual void SetNoDelay (BOOL bNoDelay) {ENSURE_HAS_STOPPED(); m_arqAttr.bNoDelay = bNoDelay;} virtual void SetTurnoffCongestCtrl (BOOL bTurnOff) {ENSURE_HAS_STOPPED(); m_arqAttr.bTurnoffNc = bTurnOff;} diff --git a/Windows/Src/UdpServer.cpp b/Windows/Src/UdpServer.cpp index 26987d1ee..2bde5d6d0 100644 --- a/Windows/Src/UdpServer.cpp +++ b/Windows/Src/UdpServer.cpp @@ -252,8 +252,6 @@ BOOL CUdpServer::CreateCompletePort() BOOL CUdpServer::CreateWorkerThreads() { - BOOL isOK = TRUE; - for(DWORD i = 0; i < m_dwWorkerThreadCount; i++) { HANDLE hThread = (HANDLE)_beginthreadex(nullptr, 0, WorkerThreadProc, (LPVOID)this, 0, nullptr); @@ -263,18 +261,15 @@ BOOL CUdpServer::CreateWorkerThreads() else { SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ::GetLastError()); - isOK = FALSE; - break; + return FALSE; } } - return isOK; + return TRUE; } BOOL CUdpServer::StartAccept() { - BOOL isOK = TRUE; - if(::CreateIoCompletionPort((HANDLE)m_soListen, m_hCompletePort, m_soListen, 0)) { m_iRemainPostReceives = m_dwPostReceiveCount; @@ -285,10 +280,18 @@ BOOL CUdpServer::StartAccept() else { SetLastError(SE_SOCKE_ATTACH_TO_CP, __FUNCTION__, ::GetLastError()); - isOK = FALSE; + return FALSE; } - return isOK; +#ifdef USE_EXTERNAL_GC + if(IS_NULL(m_tqGC.CreateTimer(GCProc, this, GC_CHECK_INTERVAL, GC_CHECK_INTERVAL, WT_EXECUTEINTIMERTHREAD))) + { + SetLastError(SE_GC_START, __FUNCTION__, ::GetLastError()); + return FALSE; + } +#endif + + return TRUE; } BOOL CUdpServer::Stop() @@ -433,7 +436,9 @@ void CUdpServer::AddFreeSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag e TUdpSocketObj::Release(pSocketObj); +#ifndef USE_EXTERNAL_GC ReleaseGCSocketObj(); +#endif if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); @@ -454,7 +459,7 @@ void CUdpServer::AddClientSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj, ASSERT(FindSocketObj(dwConnID) == nullptr); if(IsNeedDetectConnection()) - pSocketObj->hTimer = m_tqDetect.CreateTimer(DetectConnectionProc, pSocketObj, m_dwDetectInterval); + pSocketObj->hTimer = m_tqDetect.CreateTimer(DetectConnectionProc, pSocketObj, m_dwDetectInterval, m_dwDetectInterval, WT_EXECUTEINTIMERTHREAD); pSocketObj->pHolder = this; pSocketObj->connTime = ::TimeGetTime(); @@ -471,6 +476,7 @@ void CUdpServer::AddClientSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj, void CUdpServer::ReleaseFreeSocket() { + m_tqGC.Reset(); m_lsFreeSocket.Clear(); ReleaseGCSocketObj(TRUE); @@ -1516,4 +1522,10 @@ void WINAPI CUdpServer::DetectConnectionProc(LPVOID pv, BOOLEAN bTimerFired) } } +void WINAPI CUdpServer::GCProc(LPVOID pv, BOOLEAN bTimerFired) +{ + CUdpServer* pThis = (CUdpServer*)pv; + pThis->ReleaseGCSocketObj(FALSE); +} + #endif diff --git a/Windows/Src/UdpServer.h b/Windows/Src/UdpServer.h index be510f80a..25c952f13 100644 --- a/Windows/Src/UdpServer.h +++ b/Windows/Src/UdpServer.h @@ -145,6 +145,8 @@ class CUdpServer : public IUdpServer virtual void OnWorkerThreadStart(THR_ID dwThreadID) {} virtual void OnWorkerThreadEnd(THR_ID dwThreadID) {} + virtual void ReleaseGCSocketObj(BOOL bForce = FALSE); + TUdpSocketObj* FindSocketObj(CONNID dwConnID); int SendInternal(TUdpSocketObj* pSocketObj, TUdpBufferObjPtr& bufPtr); @@ -173,6 +175,7 @@ class CUdpServer : public IUdpServer static UINT WINAPI WorkerThreadProc(LPVOID pv); static void WINAPI DetectConnectionProc(LPVOID pv, BOOLEAN bTimerFired); + static void WINAPI GCProc(LPVOID pv, BOOLEAN bTimerFired); private: BOOL CheckStarting(); @@ -201,7 +204,6 @@ class CUdpServer : public IUdpServer TUdpSocketObj* CreateSocketObj(); void DeleteSocketObj(TUdpSocketObj* pSocketObj); BOOL InvalidSocketObj(TUdpSocketObj* pSocketObj); - void ReleaseGCSocketObj(BOOL bForce = FALSE); void AddClientSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj, const HP_SOCKADDR& remoteAddr); void CloseClientSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0, BOOL bNotify = TRUE); @@ -314,6 +316,7 @@ class CUdpServer : public IUdpServer CCriSec m_csAccept; + CGCTimerQueue m_tqGC; CTimerQueue m_tqDetect; TUdpSocketObjPtrPool m_bfActiveSockets;