mirror of
https://github.com/curl/curl.git
synced 2026-01-18 17:21:26 +01:00
vquic: drop msh3
It has never been properly functional in curl while there are several alternatives that are. Closes #17729
This commit is contained in:
1
.github/labeler.yml
vendored
1
.github/labeler.yml
vendored
@@ -282,7 +282,6 @@ HTTP/3:
|
||||
.github/workflows/ngtcp2*,\
|
||||
.github/workflows/quiche*,\
|
||||
.github/workflows/osslq*,\
|
||||
CMake/FindMSH3.cmake,\
|
||||
CMake/FindNGHTTP3.cmake,\
|
||||
CMake/FindNGTCP2.cmake,\
|
||||
docs/HTTP3.md,\
|
||||
|
||||
1
.github/scripts/cmp-config.pl
vendored
1
.github/scripts/cmp-config.pl
vendored
@@ -55,7 +55,6 @@ my %remove = (
|
||||
'#define HAVE_LIBSSL 1' => 1,
|
||||
'#define HAVE_LIBWOLFSSH' => 1,
|
||||
'#define HAVE_LIBZSTD 1' => 1,
|
||||
'#define HAVE_MSH3_H 1' => 1,
|
||||
'#define HAVE_NGHTTP2_NGHTTP2_H 1' => 1,
|
||||
'#define HAVE_NGHTTP3_NGHTTP3_H 1' => 1,
|
||||
'#define HAVE_NGTCP2_NGTCP2_CRYPTO_H 1' => 1,
|
||||
|
||||
35
.github/workflows/linux.yml
vendored
35
.github/workflows/linux.yml
vendored
@@ -49,8 +49,6 @@ env:
|
||||
WOLFSSH_VERSION: 1.4.19
|
||||
# renovate: datasource=github-tags depName=Mbed-TLS/mbedtls versioning=semver registryUrl=https://github.com
|
||||
MBEDTLS_VERSION: 3.6.4
|
||||
# renovate: datasource=github-tags depName=nibanks/msh3 versioning=semver registryUrl=https://github.com
|
||||
MSH3_VERSION: 0.6.0
|
||||
# renovate: datasource=github-tags depName=awslabs/aws-lc versioning=semver registryUrl=https://github.com
|
||||
AWSLC_VERSION: 1.56.0
|
||||
# handled in renovate.json
|
||||
@@ -127,19 +125,7 @@ jobs:
|
||||
install_steps: skipall
|
||||
generate: -DCURL_USE_MBEDTLS=ON -DENABLE_DEBUG=ON -DCURL_USE_PKGCONFIG=OFF -DCURL_COMPLETION_FISH=ON -DCURL_COMPLETION_ZSH=ON
|
||||
|
||||
- name: 'msh3'
|
||||
install_packages: zlib1g-dev
|
||||
install_steps: quictls msh3
|
||||
LDFLAGS: -Wl,-rpath,/home/runner/msh3/lib -Wl,-rpath,/home/runner/quictls/lib
|
||||
configure: --with-msh3=/home/runner/msh3 --with-openssl=/home/runner/quictls --enable-debug
|
||||
|
||||
- name: 'msh3'
|
||||
install_packages: zlib1g-dev
|
||||
install_steps: quictls msh3 skipall
|
||||
PKG_CONFIG_PATH: /home/runner/msh3/lib/pkgconfig # Broken as of v0.6.0
|
||||
generate: -DOPENSSL_ROOT_DIR=/home/runner/quictls -DUSE_MSH3=ON -DMSH3_INCLUDE_DIR=/home/runner/msh3/include -DMSH3_LIBRARY=/home/runner/msh3/lib/libmsh3.so -DENABLE_DEBUG=ON
|
||||
|
||||
- name: 'awslc'
|
||||
- name: awslc
|
||||
install_packages: zlib1g-dev
|
||||
install_steps: awslc pytest
|
||||
configure: LDFLAGS=-Wl,-rpath,/home/runner/awslc/lib --with-openssl=/home/runner/awslc --enable-ech
|
||||
@@ -500,25 +486,6 @@ jobs:
|
||||
make
|
||||
make -j1 install_sw
|
||||
|
||||
- name: 'cache msh3'
|
||||
if: ${{ contains(matrix.build.install_steps, 'msh3') }}
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-msh3
|
||||
env:
|
||||
cache-name: cache-msh3
|
||||
with:
|
||||
path: ~/msh3
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.MSH3_VERSION }}
|
||||
|
||||
- name: 'build msh3'
|
||||
if: ${{ contains(matrix.build.install_steps, 'msh3') && steps.cache-msh3.outputs.cache-hit != 'true' }}
|
||||
run: |
|
||||
git clone --quiet --depth=1 -b "v${MSH3_VERSION}" --recursive https://github.com/nibanks/msh3
|
||||
cd msh3
|
||||
cmake -B . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/home/runner/msh3
|
||||
cmake --build .
|
||||
cmake --install .
|
||||
|
||||
- name: 'cache awslc'
|
||||
if: ${{ contains(matrix.build.install_steps, 'awslc') }}
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at https://curl.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
# SPDX-License-Identifier: curl
|
||||
#
|
||||
###########################################################################
|
||||
# Find the msh3 library
|
||||
#
|
||||
# Input variables:
|
||||
#
|
||||
# - `MSH3_INCLUDE_DIR`: The msh3 include directory.
|
||||
# - `MSH3_LIBRARY`: Path to `msh3` library.
|
||||
#
|
||||
# Result variables:
|
||||
#
|
||||
# - `MSH3_FOUND`: System has msh3.
|
||||
# - `MSH3_INCLUDE_DIRS`: The msh3 include directories.
|
||||
# - `MSH3_LIBRARIES`: The msh3 library names.
|
||||
# - `MSH3_LIBRARY_DIRS`: The msh3 library directories.
|
||||
# - `MSH3_PC_REQUIRES`: The msh3 pkg-config packages.
|
||||
# - `MSH3_CFLAGS`: Required compiler flags.
|
||||
# - `MSH3_VERSION`: Version of msh3.
|
||||
|
||||
set(MSH3_PC_REQUIRES "libmsh3")
|
||||
|
||||
if(CURL_USE_PKGCONFIG AND
|
||||
NOT DEFINED MSH3_INCLUDE_DIR AND
|
||||
NOT DEFINED MSH3_LIBRARY)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(MSH3 ${MSH3_PC_REQUIRES})
|
||||
endif()
|
||||
|
||||
if(MSH3_FOUND)
|
||||
string(REPLACE ";" " " MSH3_CFLAGS "${MSH3_CFLAGS}")
|
||||
message(STATUS "Found MSH3 (via pkg-config): ${MSH3_INCLUDE_DIRS} (found version \"${MSH3_VERSION}\")")
|
||||
else()
|
||||
set(MSH3_PC_REQUIRES "") # Depend on pkg-config only when found via pkg-config
|
||||
|
||||
find_path(MSH3_INCLUDE_DIR NAMES "msh3.h")
|
||||
find_library(MSH3_LIBRARY NAMES "msh3")
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(MSH3
|
||||
REQUIRED_VARS
|
||||
MSH3_INCLUDE_DIR
|
||||
MSH3_LIBRARY
|
||||
)
|
||||
|
||||
if(MSH3_FOUND)
|
||||
set(MSH3_INCLUDE_DIRS ${MSH3_INCLUDE_DIR})
|
||||
set(MSH3_LIBRARIES ${MSH3_LIBRARY})
|
||||
endif()
|
||||
|
||||
mark_as_advanced(MSH3_INCLUDE_DIR MSH3_LIBRARY)
|
||||
endif()
|
||||
@@ -1162,30 +1162,8 @@ if(USE_QUICHE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(USE_MSH3 "Use msh3/msquic library for HTTP/3 support" OFF)
|
||||
if(USE_MSH3)
|
||||
if(USE_NGTCP2 OR USE_QUICHE)
|
||||
message(FATAL_ERROR "Only one HTTP/3 backend can be selected")
|
||||
endif()
|
||||
if(NOT WIN32)
|
||||
if(NOT USE_OPENSSL)
|
||||
message(FATAL_ERROR "msh3/msquic requires OpenSSL fork with QUIC API")
|
||||
endif()
|
||||
curl_openssl_check_quic()
|
||||
endif()
|
||||
find_package(MSH3 REQUIRED)
|
||||
list(APPEND CURL_LIBS ${MSH3_LIBRARIES})
|
||||
list(APPEND CURL_LIBDIRS ${MSH3_LIBRARY_DIRS})
|
||||
list(APPEND LIBCURL_PC_REQUIRES_PRIVATE ${MSH3_PC_REQUIRES})
|
||||
include_directories(SYSTEM ${MSH3_INCLUDE_DIRS})
|
||||
link_directories(${MSH3_LIBRARY_DIRS})
|
||||
if(MSH3_CFLAGS)
|
||||
string(APPEND CMAKE_C_FLAGS " ${MSH3_CFLAGS}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(USE_OPENSSL_QUIC)
|
||||
if(USE_NGTCP2 OR USE_QUICHE OR USE_MSH3)
|
||||
if(USE_NGTCP2 OR USE_QUICHE)
|
||||
message(FATAL_ERROR "Only one HTTP/3 backend can be selected")
|
||||
endif()
|
||||
find_package(OpenSSL 3.3.0 REQUIRED)
|
||||
@@ -1202,7 +1180,7 @@ if(USE_OPENSSL_QUIC)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CURL_WITH_MULTI_SSL AND (USE_NGTCP2 OR USE_QUICHE OR USE_MSH3 OR USE_OPENSSL_QUIC))
|
||||
if(CURL_WITH_MULTI_SSL AND (USE_NGTCP2 OR USE_QUICHE OR USE_OPENSSL_QUIC))
|
||||
message(FATAL_ERROR "MultiSSL cannot be enabled with HTTP/3 and vice versa.")
|
||||
endif()
|
||||
|
||||
@@ -2169,7 +2147,7 @@ curl_add_if("NTLM" NOT CURL_DISABLE_NTLM AND
|
||||
(_use_curl_ntlm_core OR USE_WINDOWS_SSPI))
|
||||
curl_add_if("TLS-SRP" USE_TLS_SRP)
|
||||
curl_add_if("HTTP2" USE_NGHTTP2)
|
||||
curl_add_if("HTTP3" USE_NGTCP2 OR USE_QUICHE OR USE_MSH3 OR USE_OPENSSL_QUIC)
|
||||
curl_add_if("HTTP3" USE_NGTCP2 OR USE_QUICHE OR USE_OPENSSL_QUIC)
|
||||
curl_add_if("MultiSSL" CURL_WITH_MULTI_SSL)
|
||||
curl_add_if("HTTPS-proxy" NOT CURL_DISABLE_PROXY AND _ssl_enabled AND (USE_OPENSSL OR USE_GNUTLS
|
||||
OR USE_SCHANNEL OR USE_RUSTLS OR USE_MBEDTLS OR
|
||||
|
||||
@@ -43,7 +43,6 @@ CMAKE_DIST = \
|
||||
CMake/FindLibssh.cmake \
|
||||
CMake/FindLibssh2.cmake \
|
||||
CMake/FindLibuv.cmake \
|
||||
CMake/FindMSH3.cmake \
|
||||
CMake/FindMbedTLS.cmake \
|
||||
CMake/FindNGHTTP2.cmake \
|
||||
CMake/FindNGHTTP3.cmake \
|
||||
|
||||
95
configure.ac
95
configure.ac
@@ -173,7 +173,7 @@ curl_headers_msg="enabled (--disable-headers-api)"
|
||||
ssl_backends=
|
||||
curl_h1_msg="enabled (internal)"
|
||||
curl_h2_msg="no (--with-nghttp2)"
|
||||
curl_h3_msg="no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-openssl-quic, --with-msh3)"
|
||||
curl_h3_msg="no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-openssl-quic)"
|
||||
|
||||
enable_altsvc="yes"
|
||||
hsts="yes"
|
||||
@@ -3781,97 +3781,6 @@ if test X"$want_quiche" != Xno; then
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for msh3/msquic (QUIC)
|
||||
dnl **********************************************************************
|
||||
|
||||
OPT_MSH3="no"
|
||||
|
||||
if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then
|
||||
# without HTTP or with ngtcp2, msh3 is no use
|
||||
OPT_MSH3="no"
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(msh3,
|
||||
AS_HELP_STRING([--with-msh3=PATH],[Enable msh3 usage])
|
||||
AS_HELP_STRING([--without-msh3],[Disable msh3 usage]),
|
||||
[OPT_MSH3=$withval])
|
||||
case "$OPT_MSH3" in
|
||||
no)
|
||||
dnl --without-msh3 option used
|
||||
want_msh3="no"
|
||||
;;
|
||||
yes)
|
||||
dnl --with-msh3 option used without path
|
||||
want_msh3="default"
|
||||
want_msh3_path=""
|
||||
;;
|
||||
*)
|
||||
dnl --with-msh3 option used with path
|
||||
want_msh3="yes"
|
||||
want_msh3_path="$withval"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test X"$want_msh3" != Xno; then
|
||||
|
||||
dnl msh3 on non-Windows needs an OpenSSL with the QUIC API
|
||||
if test "$curl_cv_native_windows" != "yes"; then
|
||||
if test "$QUIC_ENABLED" != "yes"; then
|
||||
AC_MSG_ERROR([the detected TLS library does not support QUIC, making --with-msh3 a no-no])
|
||||
fi
|
||||
if test "$OPENSSL_ENABLED" != "1"; then
|
||||
AC_MSG_ERROR([msh3/msquic requires OpenSSL])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$NGHTTP3_ENABLED" = 1; then
|
||||
AC_MSG_ERROR([--with-msh3 and --with-ngtcp2 are mutually exclusive])
|
||||
fi
|
||||
if test "$USE_QUICHE" = 1; then
|
||||
AC_MSG_ERROR([--with-msh3 and --with-quiche are mutually exclusive])
|
||||
fi
|
||||
|
||||
dnl backup the pre-msh3 variables
|
||||
CLEANLDFLAGS="$LDFLAGS"
|
||||
CLEANLDFLAGSPC="$LDFLAGSPC"
|
||||
CLEANCPPFLAGS="$CPPFLAGS"
|
||||
CLEANLIBS="$LIBS"
|
||||
|
||||
if test -n "$want_msh3_path"; then
|
||||
LD_MSH3="-L$want_msh3_path/lib"
|
||||
CPP_MSH3="-I$want_msh3_path/include"
|
||||
DIR_MSH3="$want_msh3_path/lib"
|
||||
LDFLAGS="$LDFLAGS $LD_MSH3"
|
||||
LDFLAGSPC="$LDFLAGSPC $LD_MSH3"
|
||||
CPPFLAGS="$CPPFLAGS $CPP_MSH3"
|
||||
fi
|
||||
LIBS="-lmsh3 $LIBS"
|
||||
|
||||
AC_CHECK_LIB(msh3, MsH3ApiOpen,
|
||||
[
|
||||
AC_CHECK_HEADERS(msh3.h,
|
||||
curl_h3_msg="enabled (msh3)"
|
||||
AC_DEFINE(USE_MSH3, 1, [if msh3 is in use])
|
||||
USE_MSH3=1
|
||||
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_MSH3"
|
||||
export CURL_LIBRARY_PATH
|
||||
AC_MSG_NOTICE([Added $DIR_MSH3 to CURL_LIBRARY_PATH])
|
||||
dnl FIXME: Enable when msh3 was detected via pkg-config
|
||||
if false; then
|
||||
LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libmsh3"
|
||||
fi
|
||||
experimental="$experimental HTTP3"
|
||||
)
|
||||
],
|
||||
dnl not found, revert back to clean variables
|
||||
LDFLAGS=$CLEANLDFLAGS
|
||||
LDFLAGSPC=$CLEANLDFLAGSPC
|
||||
CPPFLAGS=$CLEANCPPFLAGS
|
||||
LIBS=$CLEANLIBS
|
||||
)
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl libuv is only ever used for debug purposes
|
||||
dnl **********************************************************************
|
||||
@@ -5316,7 +5225,7 @@ if test "x$USE_NGHTTP2" = "x1"; then
|
||||
fi
|
||||
|
||||
if test "x$USE_NGTCP2_H3" = "x1" -o "x$USE_QUICHE" = "x1" \
|
||||
-o "x$USE_OPENSSL_H3" = "x1" -o "x$USE_MSH3" = "x1"; then
|
||||
-o "x$USE_OPENSSL_H3" = "x1"; then
|
||||
if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
|
||||
AC_MSG_ERROR([MultiSSL cannot be enabled with HTTP/3 and vice versa])
|
||||
fi
|
||||
|
||||
@@ -16,20 +16,6 @@ how your use case cannot be satisfied properly using a workaround.
|
||||
|
||||
Nothing is currently scheduled to be removed.
|
||||
|
||||
## msh3 support
|
||||
|
||||
The msh3 backed for QUIC and HTTP/3 was introduced in April 2022 but has never
|
||||
been made to work properly. It has seen no visible traction or developer
|
||||
activity from the msh3 main author (or anyone else seemingly interested) in
|
||||
two years. As a non-functional backend, it only adds friction and "weight" to
|
||||
the development and maintenance.
|
||||
|
||||
Meanwhile, we have a fully working backend in the ngtcp2 one and we have two
|
||||
fully working backends in OpenSSL-QUIC and quiche well on their way of ending
|
||||
their experimental status in a future.
|
||||
|
||||
We remove msh3 support from the curl source tree in July 2025.
|
||||
|
||||
## winbuild build system
|
||||
|
||||
curl drops support for the winbuild build method after September 2025.
|
||||
@@ -78,3 +64,4 @@ Making the new minimum target Windows version Vista / Server 2008.
|
||||
- Support for Visual Studio 2005 and older (removed in 8.13.0)
|
||||
- Secure Transport (removed in 8.15.0)
|
||||
- BearSSL (removed in 8.15.0)
|
||||
- msh3 (removed in 8.16.0)
|
||||
|
||||
@@ -23,13 +23,10 @@ QUIC libraries we are using:
|
||||
|
||||
[OpenSSL 3.2+ QUIC](https://github.com/openssl/openssl) - **EXPERIMENTAL**
|
||||
|
||||
[msh3](https://github.com/nibanks/msh3) (with [msquic](https://github.com/microsoft/msquic)) - **EXPERIMENTAL**
|
||||
|
||||
## Experimental
|
||||
|
||||
HTTP/3 support in curl is considered **EXPERIMENTAL** until further notice
|
||||
when built to use *quiche* or *msh3*. Only the *ngtcp2* backend is not
|
||||
experimental.
|
||||
when built to use *quiche*. Only the *ngtcp2* backend is not experimental.
|
||||
|
||||
Further development and tweaking of the HTTP/3 support in curl happens in the
|
||||
master branch using pull-requests, just like ordinary changes.
|
||||
@@ -300,63 +297,6 @@ You can build curl with cmake:
|
||||
If `make install` results in `Permission denied` error, you need to prepend
|
||||
it with `sudo`.
|
||||
|
||||
# msh3 (msquic) version
|
||||
|
||||
**Note**: The msquic HTTP/3 backend is immature and is not properly functional
|
||||
one as of September 2023. Feel free to help us test it and improve it, but
|
||||
there is no point in filing bugs about it just yet.
|
||||
|
||||
msh3 support is **EXPERIMENTAL**
|
||||
|
||||
## Build Linux (with quictls fork of OpenSSL)
|
||||
|
||||
Build msh3:
|
||||
|
||||
% git clone -b v0.6.0 --depth 1 --recursive https://github.com/nibanks/msh3
|
||||
% cd msh3 && mkdir build && cd build
|
||||
% cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
|
||||
% cmake --build .
|
||||
% cmake --install .
|
||||
|
||||
Build curl:
|
||||
|
||||
% git clone https://github.com/curl/curl
|
||||
% cd curl
|
||||
% autoreconf -fi
|
||||
% ./configure LDFLAGS="-Wl,-rpath,/usr/local/lib" --with-msh3=/usr/local --with-openssl
|
||||
% make
|
||||
% make install
|
||||
|
||||
Run from `/usr/local/bin/curl`.
|
||||
|
||||
## Build Windows
|
||||
|
||||
Build msh3:
|
||||
|
||||
% git clone -b v0.6.0 --depth 1 --recursive https://github.com/nibanks/msh3
|
||||
% cd msh3 && mkdir build && cd build
|
||||
% cmake -G 'Visual Studio 17 2022' -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
|
||||
% cmake --build . --config Release
|
||||
% cmake --install . --config Release
|
||||
|
||||
**Note** - On Windows, Schannel is used for TLS support by default. If you
|
||||
with to use (the quictls fork of) OpenSSL, specify the `-DQUIC_TLS=openssl`
|
||||
option to the generate command above. Also note that OpenSSL brings with it an
|
||||
additional set of build dependencies not specified here.
|
||||
|
||||
Build curl (in [Visual Studio Command
|
||||
prompt](../winbuild/README.md#open-a-command-prompt)):
|
||||
|
||||
% git clone https://github.com/curl/curl
|
||||
% cd curl/winbuild
|
||||
% nmake /f Makefile.vc mode=dll WITH_MSH3=dll MSH3_PATH="C:/Program Files/msh3" MACHINE=x64
|
||||
|
||||
Run in the `C:/Program Files/msh3/lib` directory, copy `curl.exe` to that
|
||||
directory, or copy `msquic.dll` and `msh3.dll` from that directory to the
|
||||
`curl.exe` directory. For example:
|
||||
|
||||
% C:\Program Files\msh3\lib> F:\curl\builds\libcurl-vc-x64-release-dll-ipv6-sspi-schannel-msh3\bin\curl.exe --http3 https://curl.se/
|
||||
|
||||
# `--http3`
|
||||
|
||||
Use only HTTP/3:
|
||||
|
||||
@@ -372,7 +372,6 @@ Details via CMake
|
||||
- `USE_APPLE_IDN`: Use Apple built-in IDN support. Default: `OFF`
|
||||
- `USE_LIBIDN2`: Use libidn2 for IDN support. Default: `ON`
|
||||
- `USE_LIBRTMP`: Enable librtmp from rtmpdump. Default: `OFF`
|
||||
- `USE_MSH3`: Use msh3/msquic library for HTTP/3 support. Default: `OFF`
|
||||
- `USE_NGHTTP2`: Use nghttp2 library. Default: `ON`
|
||||
- `USE_NGTCP2`: Use ngtcp2 and nghttp3 libraries for HTTP/3 support. Default: `OFF`
|
||||
- `USE_QUICHE`: Use quiche library for HTTP/3 support. Default: `OFF`
|
||||
@@ -429,8 +428,6 @@ Details via CMake
|
||||
- `MBEDTLS_LIBRARY`: Path to `mbedtls` library.
|
||||
- `MBEDX509_LIBRARY`: Path to `mbedx509` library.
|
||||
- `MBEDCRYPTO_LIBRARY`: Path to `mbedcrypto` library.
|
||||
- `MSH3_INCLUDE_DIR`: The msh3 include directory.
|
||||
- `MSH3_LIBRARY`: Path to `msh3` library.
|
||||
- `NGHTTP2_INCLUDE_DIR`: The nghttp2 include directory.
|
||||
- `NGHTTP2_LIBRARY`: Path to `nghttp2` library.
|
||||
- `NGHTTP3_INCLUDE_DIR`: The nghttp3 include directory.
|
||||
@@ -577,7 +574,6 @@ winbuild options | Equivalent CMake options
|
||||
`RTLIBCFG`: `static` | `CURL_STATIC_CRT=ON`
|
||||
`ENABLE_IDN` | `USE_WIN32_IDN=ON`
|
||||
`ENABLE_IPV6` | `ENABLE_IPV6=ON`
|
||||
`ENABLE_MSH3` | `USE_MSH3=ON`
|
||||
`ENABLE_NGHTTP2` | `USE_NGHTTP2=ON`
|
||||
`ENABLE_OPENSSL_AUTO_LOAD_CONFIG` | `CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG=OFF` (default)
|
||||
`ENABLE_SCHANNEL` | `CURL_USE_SCHANNEL=ON`
|
||||
@@ -587,7 +583,6 @@ winbuild options | Equivalent CMake options
|
||||
`WITH_DEVEL` | see individual `*_INCLUDE_DIR` and `*_LIBRARY` options and `OPENSSL_ROOT_DIR`
|
||||
`WITH_CARES`, `CARES_PATH` | `ENABLE_ARES=ON`, optional: `CARES_INCLUDE_DIR`, `CARES_LIBRARY`
|
||||
`WITH_MBEDTLS`, `MBEDTLS_PATH` | `CURL_USE_MBEDTLS=ON`, optional: `MBEDTLS_INCLUDE_DIR`, `MBEDTLS_LIBRARY`, `MBEDX509_LIBRARY`, `MBEDCRYPTO_LIBRARY`
|
||||
`WITH_MSH3`, `MSH_PATH` | `USE_MSH3=ON`, optional: `MSH3_INCLUDE_DIR`, `MSH3_LIBRARY`
|
||||
`WITH_NGHTTP2`, `NGHTTP2_PATH` | `USE_NGHTTP2=ON`, optional: `NGHTTP2_INCLUDE_DIR`, `NGHTTP2_LIBRARY`
|
||||
`WITH_SSH`, `SSH_PATH` | `CURL_USE_LIBSSH=ON`, optional: `LIBSSH_INCLUDE_DIR`, `LIBSSH_LIBRARY`
|
||||
`WITH_SSH2`, `SSH2_PATH` | `CURL_USE_LIBSSH2=ON`, optional: `LIBSSH2_INCLUDE_DIR`, `LIBSSH2_LIBRARY`
|
||||
|
||||
@@ -110,7 +110,6 @@ LIB_VTLS_HFILES = \
|
||||
vtls/x509asn1.h
|
||||
|
||||
LIB_VQUIC_CFILES = \
|
||||
vquic/curl_msh3.c \
|
||||
vquic/curl_ngtcp2.c \
|
||||
vquic/curl_osslq.c \
|
||||
vquic/curl_quiche.c \
|
||||
@@ -118,7 +117,6 @@ LIB_VQUIC_CFILES = \
|
||||
vquic/vquic-tls.c
|
||||
|
||||
LIB_VQUIC_HFILES = \
|
||||
vquic/curl_msh3.h \
|
||||
vquic/curl_ngtcp2.h \
|
||||
vquic/curl_osslq.h \
|
||||
vquic/curl_quiche.h \
|
||||
|
||||
@@ -307,9 +307,9 @@ tcpkeepalive(struct Curl_easy *data,
|
||||
* Assign the address `ai` to the Curl_sockaddr_ex `dest` and
|
||||
* set the transport used.
|
||||
*/
|
||||
CURLcode Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest,
|
||||
const struct Curl_addrinfo *ai,
|
||||
int transport)
|
||||
static CURLcode sock_assign_addr(struct Curl_sockaddr_ex *dest,
|
||||
const struct Curl_addrinfo *ai,
|
||||
int transport)
|
||||
{
|
||||
/*
|
||||
* The Curl_sockaddr_ex structure is basically libcurl's external API
|
||||
@@ -406,7 +406,7 @@ CURLcode Curl_socket_open(struct Curl_easy *data,
|
||||
/* if the caller does not want info back, use a local temp copy */
|
||||
addr = &dummy;
|
||||
|
||||
result = Curl_sock_assign_addr(addr, ai, transport);
|
||||
result = sock_assign_addr(addr, ai, transport);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
@@ -949,7 +949,7 @@ static CURLcode cf_socket_ctx_init(struct cf_socket_ctx *ctx,
|
||||
ctx->sock = CURL_SOCKET_BAD;
|
||||
ctx->transport = transport;
|
||||
|
||||
result = Curl_sock_assign_addr(&ctx->addr, ai, transport);
|
||||
result = sock_assign_addr(&ctx->addr, ai, transport);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
|
||||
@@ -91,14 +91,6 @@ void Curl_sndbuf_init(curl_socket_t sockfd);
|
||||
#define Curl_sndbuf_init(y) Curl_nop_stmt
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Assign the address `ai` to the Curl_sockaddr_ex `dest` and
|
||||
* set the transport used.
|
||||
*/
|
||||
CURLcode Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest,
|
||||
const struct Curl_addrinfo *ai,
|
||||
int transport);
|
||||
|
||||
/**
|
||||
* Creates a cfilter that opens a TCP socket to the given address
|
||||
* when calling its `connect` implementation.
|
||||
|
||||
@@ -203,10 +203,6 @@
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS
|
||||
|
||||
/* Define to enable HTTP3 support (experimental, requires NGTCP2, quiche or
|
||||
MSH3) */
|
||||
#undef USE_HTTP3
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
|
||||
@@ -761,9 +761,6 @@ ${SIZEOF_TIME_T_CODE}
|
||||
/* Define to 1 if you have the quiche_conn_set_qlog_fd function. */
|
||||
#cmakedefine HAVE_QUICHE_CONN_SET_QLOG_FD 1
|
||||
|
||||
/* to enable msh3 */
|
||||
#cmakedefine USE_MSH3 1
|
||||
|
||||
/* if Unix domain sockets are enabled */
|
||||
#cmakedefine USE_UNIX_SOCKETS 1
|
||||
|
||||
|
||||
@@ -986,7 +986,7 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
|
||||
|
||||
#if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \
|
||||
(defined(USE_OPENSSL_QUIC) && defined(USE_NGHTTP3)) || \
|
||||
defined(USE_QUICHE) || defined(USE_MSH3)
|
||||
defined(USE_QUICHE)
|
||||
|
||||
#ifdef CURL_WITH_MULTI_SSL
|
||||
#error "MultiSSL combined with QUIC is not supported"
|
||||
|
||||
@@ -25,10 +25,6 @@
|
||||
***************************************************************************/
|
||||
#include "curl_setup.h"
|
||||
|
||||
#if defined(USE_MSH3) && !defined(_WIN32)
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#include "bufq.h"
|
||||
#include "dynhds.h"
|
||||
#include "ws.h"
|
||||
|
||||
@@ -84,6 +84,7 @@ int Curl_pipe(curl_socket_t socks[2], bool nonblocking)
|
||||
|
||||
#ifndef CURL_DISABLE_SOCKETPAIR
|
||||
#ifdef HAVE_SOCKETPAIR
|
||||
#ifdef USE_SOCKETPAIR
|
||||
int Curl_socketpair(int domain, int type, int protocol,
|
||||
curl_socket_t socks[2], bool nonblocking)
|
||||
{
|
||||
@@ -104,6 +105,7 @@ int Curl_socketpair(int domain, int type, int protocol,
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif /* USE_SOCKETPAIR */
|
||||
#else /* !HAVE_SOCKETPAIR */
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
|
||||
@@ -66,8 +66,9 @@ int Curl_pipe(curl_socket_t socks[2], bool nonblocking);
|
||||
#define SOCKETPAIR_TYPE SOCK_STREAM
|
||||
#endif
|
||||
|
||||
#define wakeup_create(p,nb)\
|
||||
Curl_socketpair(SOCKETPAIR_FAMILY, SOCKETPAIR_TYPE, 0, p, nb)
|
||||
#define USE_SOCKETPAIR
|
||||
#define wakeup_create(p,nb) \
|
||||
Curl_socketpair(SOCKETPAIR_FAMILY, SOCKETPAIR_TYPE, 0, p, nb)
|
||||
|
||||
#endif /* USE_EVENTFD */
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,46 +0,0 @@
|
||||
#ifndef HEADER_CURL_VQUIC_CURL_MSH3_H
|
||||
#define HEADER_CURL_VQUIC_CURL_MSH3_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at https://curl.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* SPDX-License-Identifier: curl
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
#include "../curl_setup.h"
|
||||
|
||||
#ifdef USE_MSH3
|
||||
|
||||
#include <msh3.h>
|
||||
|
||||
void Curl_msh3_ver(char *p, size_t len);
|
||||
|
||||
CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf,
|
||||
struct Curl_easy *data,
|
||||
struct connectdata *conn,
|
||||
const struct Curl_addrinfo *ai);
|
||||
|
||||
bool Curl_conn_is_msh3(const struct Curl_easy *data,
|
||||
const struct connectdata *conn,
|
||||
int sockindex);
|
||||
|
||||
#endif /* USE_MSQUIC */
|
||||
|
||||
#endif /* HEADER_CURL_VQUIC_CURL_MSH3_H */
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "../curlx/dynbuf.h"
|
||||
#include "../cfilters.h"
|
||||
#include "../curl_trc.h"
|
||||
#include "curl_msh3.h"
|
||||
#include "curl_ngtcp2.h"
|
||||
#include "curl_osslq.h"
|
||||
#include "curl_quiche.h"
|
||||
@@ -76,8 +75,6 @@ void Curl_quic_ver(char *p, size_t len)
|
||||
Curl_osslq_ver(p, len);
|
||||
#elif defined(USE_QUICHE)
|
||||
Curl_quiche_ver(p, len);
|
||||
#elif defined(USE_MSH3)
|
||||
Curl_msh3_ver(p, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -691,8 +688,6 @@ CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf,
|
||||
return Curl_cf_osslq_create(pcf, data, conn, ai);
|
||||
#elif defined(USE_QUICHE)
|
||||
return Curl_cf_quiche_create(pcf, data, conn, ai);
|
||||
#elif defined(USE_MSH3)
|
||||
return Curl_cf_msh3_create(pcf, data, conn, ai);
|
||||
#else
|
||||
*pcf = NULL;
|
||||
(void)data;
|
||||
|
||||
@@ -219,8 +219,8 @@ static void ossl_provider_cleanup(struct Curl_easy *data);
|
||||
#define OSSL_PACKAGE "BoringSSL"
|
||||
#elif defined(OPENSSL_IS_AWSLC)
|
||||
#define OSSL_PACKAGE "AWS-LC"
|
||||
#elif (defined(USE_NGTCP2) && defined(USE_NGHTTP3) && \
|
||||
!defined(OPENSSL_QUIC_API2)) || defined(USE_MSH3)
|
||||
#elif (defined(USE_NGTCP2) && defined(USE_NGHTTP3) && \
|
||||
!defined(OPENSSL_QUIC_API2))
|
||||
#define OSSL_PACKAGE "quictls"
|
||||
#else
|
||||
#define OSSL_PACKAGE "OpenSSL"
|
||||
|
||||
@@ -586,7 +586,7 @@ class ScoreRunner:
|
||||
score['meta']['protocol'] = 'h3'
|
||||
if not self.env.have_h3_curl():
|
||||
raise ScoreCardError('curl does not support HTTP/3')
|
||||
for lib in ['ngtcp2', 'quiche', 'msh3', 'nghttp3']:
|
||||
for lib in ['ngtcp2', 'quiche', 'nghttp3']:
|
||||
if self.env.curl_uses_lib(lib):
|
||||
score['meta']['implementation'] = lib
|
||||
break
|
||||
|
||||
@@ -114,8 +114,6 @@ class TestDownload:
|
||||
def test_02_05_download_many_sequential(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 shaky here")
|
||||
if proto == 'h2' and env.curl_uses_lib('mbedtls') and \
|
||||
sys.platform.startswith('darwin') and env.ci_run:
|
||||
pytest.skip('mbedtls 3.6.3 fails this test on macOS CI runners')
|
||||
@@ -220,8 +218,6 @@ class TestDownload:
|
||||
def test_02_11_10MB_parallel(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 3
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-10m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
@@ -258,8 +254,6 @@ class TestDownload:
|
||||
def test_02_14_not_found(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
@@ -274,8 +268,6 @@ class TestDownload:
|
||||
def test_02_15_fail_not_found(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
|
||||
@@ -74,8 +74,6 @@ class TestGoAway:
|
||||
@pytest.mark.skipif(condition=not Env.have_h3(), reason="h3 not supported")
|
||||
def test_03_02_h3_goaway(self, env: Env, httpd, nghttpx):
|
||||
proto = 'h3'
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
if proto == 'h3' and env.curl_uses_ossl_quic():
|
||||
pytest.skip('OpenSSL QUIC fails here')
|
||||
count = 3
|
||||
|
||||
@@ -42,8 +42,6 @@ class TestErrors:
|
||||
def test_05_01_partial_1(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 1
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}' \
|
||||
@@ -66,8 +64,6 @@ class TestErrors:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_ossl_quic():
|
||||
pytest.skip("openssl-quic is flaky in yielding proper error codes")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 20
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}' \
|
||||
|
||||
@@ -55,8 +55,6 @@ class TestUpload:
|
||||
def test_07_01_upload_1_small(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
data = '0123456789'
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
@@ -70,8 +68,6 @@ class TestUpload:
|
||||
def test_07_02_upload_1_large(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
@@ -86,8 +82,6 @@ class TestUpload:
|
||||
def test_07_10_upload_sequential(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 20
|
||||
data = '0123456789'
|
||||
curl = CurlClient(env=env)
|
||||
@@ -103,8 +97,6 @@ class TestUpload:
|
||||
def test_07_11_upload_parallel(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1
|
||||
count = 20
|
||||
data = '0123456789'
|
||||
@@ -122,8 +114,6 @@ class TestUpload:
|
||||
def test_07_12_upload_seq_large(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
count = 10
|
||||
curl = CurlClient(env=env)
|
||||
@@ -141,8 +131,6 @@ class TestUpload:
|
||||
def test_07_13_upload_seq_large(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 2
|
||||
curl = CurlClient(env=env)
|
||||
@@ -162,8 +150,6 @@ class TestUpload:
|
||||
def test_07_14_upload_stdin(self, env: Env, httpd, nghttpx, proto, indata):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 1
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/put?id=[0-{count-1}]'
|
||||
@@ -226,8 +212,6 @@ class TestUpload:
|
||||
def test_07_20_upload_parallel(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1
|
||||
count = 10
|
||||
data = '0123456789'
|
||||
@@ -245,8 +229,6 @@ class TestUpload:
|
||||
def test_07_21_upload_parallel_large(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
# limit since we use a separate connection in h1
|
||||
count = 10
|
||||
@@ -262,8 +244,6 @@ class TestUpload:
|
||||
def test_07_22_upload_parallel_fail(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 20
|
||||
curl = CurlClient(env=env)
|
||||
@@ -280,8 +260,6 @@ class TestUpload:
|
||||
def test_07_30_put_100k(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
count = 1
|
||||
curl = CurlClient(env=env)
|
||||
@@ -300,8 +278,6 @@ class TestUpload:
|
||||
def test_07_31_put_10m(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 1
|
||||
curl = CurlClient(env=env)
|
||||
@@ -320,8 +296,6 @@ class TestUpload:
|
||||
def test_07_32_issue_10591(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 1
|
||||
curl = CurlClient(env=env)
|
||||
@@ -416,8 +390,6 @@ class TestUpload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_ossl_quic():
|
||||
pytest.skip("OpenSSL's own QUIC is flaky here")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
data = '0123456789' * 10
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo{redir}?id=[0-0]'
|
||||
@@ -435,8 +407,6 @@ class TestUpload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_ossl_quic():
|
||||
pytest.skip("OpenSSL's own QUIC is flaky here")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
data = '0123456789' * 10
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo307?id=[0-0]'
|
||||
@@ -452,8 +422,6 @@ class TestUpload:
|
||||
def test_07_38_form_small(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
r = curl.http_form(urls=[url], alpn_proto=proto, form={
|
||||
@@ -466,8 +434,6 @@ class TestUpload:
|
||||
def test_07_39_post_urlenc_small(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-63k')
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
@@ -484,8 +450,6 @@ class TestUpload:
|
||||
def test_07_40_post_urlenc_large(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-64k')
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
@@ -506,8 +470,6 @@ class TestUpload:
|
||||
def test_07_41_post_urlenc_small(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
if proto == 'h3' and env.curl_uses_lib('quiche'):
|
||||
pytest.skip("quiche has CWND issues with large requests")
|
||||
fdata = os.path.join(env.gen_dir, 'data-63k')
|
||||
@@ -541,8 +503,6 @@ class TestUpload:
|
||||
def test_07_42a_upload_disconnect(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
client = LocalClient(name='upload_pausing', env=env, timeout=60)
|
||||
if not client.exists():
|
||||
pytest.skip(f'example client not built: {client.name}')
|
||||
@@ -563,8 +523,6 @@ class TestUpload:
|
||||
def test_07_42b_upload_disconnect(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
client = LocalClient(name='upload_pausing', env=env, timeout=60)
|
||||
if not client.exists():
|
||||
pytest.skip(f'example client not built: {client.name}')
|
||||
@@ -580,8 +538,6 @@ class TestUpload:
|
||||
def test_07_42c_upload_disconnect(self, env: Env, httpd, nghttpx, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
client = LocalClient(name='upload_pausing', env=env, timeout=60)
|
||||
if not client.exists():
|
||||
pytest.skip(f'example client not built: {client.name}')
|
||||
@@ -598,8 +554,6 @@ class TestUpload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_ossl_quic():
|
||||
pytest.skip("openssl-quic is flaky in filed PUTs")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 fails here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 1
|
||||
max_upload = 128 * 1024
|
||||
|
||||
@@ -72,8 +72,6 @@ class TestCaddy:
|
||||
def test_08_01_download_1(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.domain1}:{caddy.port}/data.json'
|
||||
r = curl.http_download(urls=[url], alpn_proto=proto)
|
||||
@@ -84,8 +82,6 @@ class TestCaddy:
|
||||
def test_08_02_download_1mb_sequential(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
count = 50
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.domain1}:{caddy.port}/data1.data?[0-{count-1}]'
|
||||
@@ -97,8 +93,6 @@ class TestCaddy:
|
||||
def test_08_03_download_1mb_parallel(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
count = 20
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.domain1}:{caddy.port}/data1.data?[0-{count-1}]'
|
||||
@@ -119,8 +113,6 @@ class TestCaddy:
|
||||
def test_08_04a_download_10mb_sequential(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
count = 40
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.domain1}:{caddy.port}/data5.data?[0-{count-1}]'
|
||||
@@ -134,8 +126,6 @@ class TestCaddy:
|
||||
def test_08_04b_download_10mb_sequential(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
count = 20
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.domain1}:{caddy.port}/data10.data?[0-{count-1}]'
|
||||
@@ -149,8 +139,6 @@ class TestCaddy:
|
||||
def test_08_05_download_1mb_parallel(self, env: Env, caddy: Caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3_curl():
|
||||
pytest.skip("h3 not supported in curl")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 itself crashes")
|
||||
if proto == 'http/1.1' and env.curl_uses_lib('mbedtls'):
|
||||
pytest.skip("mbedtls 3.6.0 fails on 50 connections with: "
|
||||
"ssl_handshake returned: (-0x7F00) SSL - Memory allocation failed")
|
||||
@@ -172,8 +160,6 @@ class TestCaddy:
|
||||
def test_08_06_post_parallel(self, env: Env, httpd, caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1
|
||||
count = 20
|
||||
data = '0123456789'
|
||||
@@ -191,8 +177,6 @@ class TestCaddy:
|
||||
def test_08_07_put_large(self, env: Env, httpd, caddy, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1<
|
||||
count = 1
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
|
||||
@@ -164,23 +164,6 @@ NGHTTP2 = static
|
||||
USE_NGHTTP2 = false
|
||||
!ENDIF
|
||||
|
||||
!IF "$(ENABLE_MSH3)"=="yes"
|
||||
# compatibility bit, WITH_MSH3 is the correct flag
|
||||
WITH_MSH3 = dll
|
||||
USE_MSH3 = true
|
||||
MSH3 = dll
|
||||
!ELSEIF "$(WITH_MSH3)"=="dll"
|
||||
USE_MSH3 = true
|
||||
MSH3 = dll
|
||||
!ELSEIF "$(WITH_MSH3)"=="static"
|
||||
USE_MSH3 = true
|
||||
MSH3 = static
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF USE_MSH3
|
||||
USE_MSH3 = false
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
|
||||
USE_MBEDTLS = true
|
||||
MBEDTLS = $(WITH_MBEDTLS)
|
||||
@@ -281,10 +264,6 @@ CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-schannel
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-nghttp2-$(NGHTTP2)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MSH3)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-msh3
|
||||
!ENDIF
|
||||
|
||||
!MESSAGE configuration name: $(CONFIG_NAME_LIB)
|
||||
|
||||
# Note these directories are removed by this makefile's 'clean' so they should
|
||||
@@ -308,7 +287,6 @@ $(MODE):
|
||||
@SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
|
||||
@SET MACHINE=$(MACHINE)
|
||||
@SET USE_NGHTTP2=$(USE_NGHTTP2)
|
||||
@SET USE_MSH3=$(USE_MSH3)
|
||||
@SET USE_IDN=$(USE_IDN)
|
||||
@SET USE_IPV6=$(USE_IPV6)
|
||||
@SET USE_SSPI=$(USE_SSPI)
|
||||
|
||||
@@ -171,27 +171,6 @@ NGHTTP2_LIBS = nghttp2.lib
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF MSH3_PATH
|
||||
MSH3_INC_DIR = $(MSH3_PATH)\include
|
||||
MSH3_LIB_DIR = $(MSH3_PATH)\lib
|
||||
MSH3_LFLAGS = $(MSH3_LFLAGS) "/LIBPATH:$(MSH3_LIB_DIR)"
|
||||
!ELSE
|
||||
MSH3_INC_DIR = $(DEVEL_INCLUDE)
|
||||
MSH3_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_MSH3)"=="dll"
|
||||
MSH3_CFLAGS = /DUSE_MSH3 /I"$(MSH3_INC_DIR)"
|
||||
MSH3_LIBS = msh3.lib
|
||||
!ELSEIF "$(WITH_MSH3)"=="static"
|
||||
MSH3_CFLAGS = /DUSE_MSH3 /DMSH3_STATICLIB /I"$(MSH3_INC_DIR)"
|
||||
!IF EXISTS("$(NGHTTP2_LIB_DIR)\msh3_static.lib")
|
||||
MSH3_LIBS = msh3_static.lib
|
||||
!ELSE
|
||||
MSH3_LIBS = msh3.lib
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF MBEDTLS_PATH
|
||||
MBEDTLS_INC_DIR = $(MBEDTLS_PATH)\include
|
||||
MBEDTLS_LIB_DIR = $(MBEDTLS_PATH)\lib
|
||||
@@ -540,11 +519,6 @@ CFLAGS = $(CFLAGS) $(NGHTTP2_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MSH3)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(MSH3_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(MSH3_LFLAGS) $(MSH3_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(GEN_PDB)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)"
|
||||
LFLAGS = $(LFLAGS) $(LFLAGS_PDB)
|
||||
@@ -601,7 +575,6 @@ package: $(TARGET)
|
||||
$(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DIRDIST)
|
||||
@echo Using SSL: $(USE_SSL)
|
||||
@echo Using NGHTTP2: $(USE_NGHTTP2)
|
||||
@echo Using MSH3: $(USE_MSH3)
|
||||
@echo Using c-ares: $(USE_CARES)
|
||||
@echo Using SSH2: $(USE_SSH2)
|
||||
@echo Using SSH: $(USE_SSH)
|
||||
|
||||
@@ -80,7 +80,6 @@ where `<options>` is one or many of:
|
||||
Defaults to sibling directory: `../deps`
|
||||
- `WITH_SSL=<dll/static>` - Enable OpenSSL support, DLL or static
|
||||
- `WITH_NGHTTP2=<dll/static>` - Enable HTTP/2 support, DLL or static
|
||||
- `WITH_MSH3=<dll/static>` - Enable (experimental) HTTP/3 support, DLL or static
|
||||
- `WITH_MBEDTLS=<dll/static>` - Enable mbedTLS support, DLL or static
|
||||
- `WITH_WOLFSSL=<dll/static>` - Enable wolfSSL support, DLL or static
|
||||
- `WITH_CARES=<dll/static>` - Enable c-ares support, DLL or static
|
||||
@@ -106,7 +105,6 @@ where `<options>` is one or many of:
|
||||
- `MBEDTLS_PATH=<path>` - Custom path for mbedTLS
|
||||
- `WOLFSSL_PATH=<path>` - Custom path for wolfSSL
|
||||
- `NGHTTP2_PATH=<path>` - Custom path for nghttp2
|
||||
- `MSH3_PATH=<path>` - Custom path for msh3
|
||||
- `SSH_PATH=<path>` - Custom path for libssh
|
||||
- `SSH2_PATH=<path>` - Custom path for libssh2
|
||||
- `SSL_PATH=<path>` - Custom path for OpenSSL
|
||||
|
||||
Reference in New Issue
Block a user