From a05cce74f912c63fa9afb11d6d0abafd52853970 Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Thu, 27 Jul 2023 12:59:03 +0200 Subject: [PATCH] http2: fix in h2 proxy tunnel: progress in ingress on sending - depending on what is tunneled, the proxy may never get invoked for receiving data explicitly. Not progressing ingress may lead to stalls due to missed WINDOW_UPDATEs. CI: - add a chache for building mod_h2 Closes #11527 --- .github/workflows/ngtcp2-linux.yml | 19 +++++++++++++++++-- lib/cf-h2-proxy.c | 7 +++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ngtcp2-linux.yml b/.github/workflows/ngtcp2-linux.yml index d14872c93c..186fd5a606 100644 --- a/.github/workflows/ngtcp2-linux.yml +++ b/.github/workflows/ngtcp2-linux.yml @@ -158,12 +158,27 @@ jobs: make install name: 'install nghttp2' - - run: | - git clone --quiet --depth=1 -b master https://github.com/icing/mod_h2 + - 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' diff --git a/lib/cf-h2-proxy.c b/lib/cf-h2-proxy.c index f6acfc5202..dd2c00d51a 100644 --- a/lib/cf-h2-proxy.c +++ b/lib/cf-h2-proxy.c @@ -1309,6 +1309,13 @@ static ssize_t cf_h2_proxy_send(struct Curl_cfilter *cf, } } + result = proxy_h2_progress_ingress(cf, data); + if(result) { + *err = result; + nwritten = -1; + goto out; + } + /* Call the nghttp2 send loop and flush to write ALL buffered data, * headers and/or request body completely out to the network */ result = proxy_h2_progress_egress(cf, data); -- 2.47.3