-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
http3: initial support for OpenSSL 3.2 QUIC stack
- HTTP/3 for curl using OpenSSL's own QUIC stack together with nghttp3 - configure with `--with-openssl-quic` to enable curl to build this. This requires the nghttp3 library - implementation with the following restrictions: * macOS has to use an unconnected UDP socket due to an issue in OpenSSL's datagram implementation See openssl/openssl#23251 This makes connections to non-reponsive servers hang. * GET requests will send the indicator that they have no body in a separate QUIC packet. This may result in processing delays or Transfer-Encodings on proxied requests * uploads that encounter blocks will use 100% cpu as detection of these flow control issue is not working (we have not figured out to pry that from OpenSSL). Closes curl#12734
- Loading branch information
Showing
15 changed files
with
2,698 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,233 @@ | ||
# Copyright (C) Daniel Stenberg, <[email protected]>, et al. | ||
# | ||
# SPDX-License-Identifier: curl | ||
|
||
name: osslq-linux | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
- '*/ci' | ||
paths-ignore: | ||
- '**/*.md' | ||
- '**/CMakeLists.txt' | ||
- '.azure-pipelines.yml' | ||
- '.circleci/**' | ||
- '.cirrus.yml' | ||
- 'appveyor.*' | ||
- 'CMake/**' | ||
- 'packages/**' | ||
- 'plan9/**' | ||
- 'projects/**' | ||
- 'winbuild/**' | ||
pull_request: | ||
branches: | ||
- master | ||
paths-ignore: | ||
- '**/*.md' | ||
- '**/CMakeLists.txt' | ||
- '.azure-pipelines.yml' | ||
- '.circleci/**' | ||
- '.cirrus.yml' | ||
- 'appveyor.*' | ||
- 'CMake/**' | ||
- 'packages/**' | ||
- 'plan9/**' | ||
- 'projects/**' | ||
- 'winbuild/**' | ||
|
||
concurrency: | ||
# Hardcoded workflow filename as workflow name above is just Linux again | ||
group: osslq-${{ github.event.pull_request.number || github.sha }} | ||
cancel-in-progress: true | ||
|
||
permissions: {} | ||
|
||
env: | ||
MAKEFLAGS: -j 3 | ||
openssl3-version: openssl-3.2.0 | ||
quictls-version: 3.1.4+quic | ||
nghttp3-version: v1.1.0 | ||
ngtcp2-version: v1.1.0 | ||
nghttp2-version: master | ||
mod_h2-version: v2.0.25 | ||
|
||
jobs: | ||
autotools: | ||
name: ${{ matrix.build.name }} | ||
runs-on: 'ubuntu-latest' | ||
timeout-minutes: 60 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: | ||
- name: openssl-quic | ||
configure: >- | ||
PKG_CONFIG_PATH="$HOME/openssl3/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib" | ||
--enable-warnings --enable-werror --enable-debug --disable-ntlm | ||
--with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" | ||
--with-openssl=$HOME/openssl3 --with-openssl-quic | ||
--with-nghttp3=$HOME/nghttpx | ||
steps: | ||
- run: | | ||
sudo apt-get update | ||
sudo apt-get install libtool autoconf automake pkg-config stunnel4 \ | ||
libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ | ||
nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ | ||
libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ | ||
texinfo texlive texlive-extra-utils autopoint libev-dev \ | ||
apache2 apache2-dev libnghttp2-dev | ||
name: 'install prereqs and impacket, pytest, crypto, apache2' | ||
- name: cache openssl3 | ||
if: contains(matrix.build.install_steps, 'openssl3') | ||
uses: actions/cache@v3 | ||
id: cache-openssl3 | ||
env: | ||
cache-name: cache-openssl3 | ||
with: | ||
path: /home/runner/openssl3 | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.openssl3-version }} | ||
|
||
- name: 'install openssl3' | ||
if: steps.cache-openssl3.outputs.cache-hit != 'true' | ||
run: | | ||
git clone --quiet --depth=1 -b ${{ env.openssl3-version }} https://github.com/openssl/openssl | ||
cd openssl | ||
./config --prefix=$HOME/openssl3 --libdir=$HOME/openssl3/lib | ||
make -j1 install_sw | ||
- name: cache quictls | ||
if: contains(matrix.build.install_steps, 'quictls') | ||
uses: actions/cache@v3 | ||
id: cache-quictls | ||
env: | ||
cache-name: cache-quictls | ||
with: | ||
path: /home/runner/quictls | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-quictls-${{ env.quictls-version }} | ||
|
||
- name: cache quictls | ||
uses: actions/cache@v3 | ||
id: cache-quictls-no-deprecated | ||
env: | ||
cache-name: cache-quictls-no-deprecated | ||
with: | ||
path: /home/runner/quictls | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} | ||
|
||
- if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' | ||
run: | | ||
cd $HOME | ||
git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls | ||
cd quictls | ||
./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib | ||
make | ||
name: 'build quictls' | ||
|
||
- run: | | ||
cd $HOME/quictls | ||
make -j1 install_sw | ||
name: 'install quictls' | ||
- name: cache nghttp3 | ||
uses: actions/cache@v3 | ||
id: cache-nghttp3 | ||
env: | ||
cache-name: cache-nghttp3 | ||
with: | ||
path: /home/runner/nghttp3 | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} | ||
|
||
- if: steps.cache-nghttp3.outputs.cache-hit != 'true' | ||
run: | | ||
cd $HOME | ||
git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 | ||
cd nghttp3 | ||
autoreconf -fi | ||
./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only | ||
make | ||
name: 'build nghttp3' | ||
|
||
- run: | | ||
cd $HOME/nghttp3 | ||
make install | ||
name: 'install nghttp3' | ||
# depends on all other cached libs built so far | ||
- run: | | ||
git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 | ||
cd ngtcp2 | ||
autoreconf -fi | ||
./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl | ||
make install | ||
name: 'install ngtcp2' | ||
# depends on all other cached libs built so far | ||
- run: | | ||
git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 | ||
cd nghttp2 | ||
autoreconf -fi | ||
./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 | ||
make install | ||
name: 'install nghttp2' | ||
- name: cache mod_h2 | ||
uses: actions/cache@v3 | ||
id: cache-mod_h2 | ||
env: | ||
cache-name: cache-mod_h2 | ||
with: | ||
path: /home/runner/mod_h2 | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} | ||
|
||
- if: steps.cache-mod_h2.outputs.cache-hit != 'true' | ||
run: | | ||
cd $HOME | ||
git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 | ||
cd mod_h2 | ||
autoreconf -fi | ||
./configure | ||
make | ||
name: 'build mod_h2' | ||
|
||
- run: | | ||
cd $HOME/mod_h2 | ||
sudo make install | ||
name: 'install mod_h2' | ||
- uses: actions/checkout@v4 | ||
|
||
- run: | | ||
sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt | ||
name: 'install python test prereqs' | ||
- run: autoreconf -fi | ||
name: 'autoreconf' | ||
|
||
- run: ./configure ${{ matrix.build.configure }} | ||
name: 'configure' | ||
|
||
- run: make V=1 | ||
name: 'make' | ||
|
||
- run: make V=1 examples | ||
name: 'make examples' | ||
|
||
- run: make V=1 -C tests | ||
name: 'make tests' | ||
|
||
- run: make V=1 test-ci | ||
name: 'run tests' | ||
env: | ||
# 2500 and 25002 fail atm due to fin handling | ||
TFLAGS: "!http/3" | ||
|
||
- run: pytest -v tests | ||
name: 'run pytest' | ||
env: | ||
TFLAGS: "${{ matrix.build.tflags }}" | ||
CURL_CI: github |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.