This is an automated email from the ASF dual-hosted git repository.

bneradt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new e6a8ac335e Update quiche to 0.22.0. (#11493)
e6a8ac335e is described below

commit e6a8ac335e819f2849fa5581774861e4cbc346d3
Author: Damian Meden <dme...@apache.org>
AuthorDate: Tue Jul 16 01:16:51 2024 +0200

    Update quiche to 0.22.0. (#11493)
    
    This bumps the quiche version from the build deps scripts and
    update the code to use the changed API from quic:
    - quiche_conn_stream_recv
    - quiche_conn_stream_send
    
    which now takes an extra param to get the detected error(if any).
---
 include/iocore/net/quic/QUICStream.h |  2 ++
 src/iocore/net/quic/QUICStream.cc    | 18 +++++++++++-------
 tools/build_boringssl_h3_tools.sh    |  4 +++-
 tools/build_openssl_h3_tools.sh      |  4 +++-
 4 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/include/iocore/net/quic/QUICStream.h 
b/include/iocore/net/quic/QUICStream.h
index 90975e0d02..82481096ed 100644
--- a/include/iocore/net/quic/QUICStream.h
+++ b/include/iocore/net/quic/QUICStream.h
@@ -42,6 +42,8 @@ class QUICStreamStateListener;
 class QUICStream
 {
 public:
+  using ErrorCode = uint64_t; //!<  recv/send stream application error codes.
+
   QUICStream() {}
   QUICStream(QUICConnectionInfoProvider *cinfo, QUICStreamId sid);
   ~QUICStream();
diff --git a/src/iocore/net/quic/QUICStream.cc 
b/src/iocore/net/quic/QUICStream.cc
index b01e4d1280..fcdfc7e88e 100644
--- a/src/iocore/net/quic/QUICStream.cc
+++ b/src/iocore/net/quic/QUICStream.cc
@@ -96,11 +96,13 @@ QUICStream::on_eos()
 void
 QUICStream::receive_data(quiche_conn *quiche_con)
 {
-  uint8_t buf[4096];
-  bool    fin;
-  ssize_t read_len = 0;
+  uint8_t                    buf[4096];
+  bool                       fin;
+  ssize_t                    read_len = 0;
+  [[maybe_unused]] ErrorCode error_code{0}; // Only set if 
QUICHE_ERR_STREAM_STOPPED(-15) or QUICHE_ERR_STREAM_RESET(-16) are
+                                            // returned by 
quiche_conn_stream_recv.
 
-  while ((read_len = quiche_conn_stream_recv(quiche_con, this->_id, buf, 
sizeof(buf), &fin)) > 0) {
+  while ((read_len = quiche_conn_stream_recv(quiche_con, this->_id, buf, 
sizeof(buf), &fin, &error_code)) > 0) {
     this->_adapter->write(this->_received_bytes, buf, read_len, fin);
     this->_received_bytes += read_len;
   }
@@ -112,8 +114,10 @@ QUICStream::receive_data(quiche_conn *quiche_con)
 void
 QUICStream::send_data(quiche_conn *quiche_con)
 {
-  bool    fin = false;
-  ssize_t len = 0;
+  bool                       fin = false;
+  ssize_t                    len = 0;
+  [[maybe_unused]] ErrorCode error_code{0}; // Only set if 
QUICHE_ERR_STREAM_STOPPED(-15) or QUICHE_ERR_STREAM_RESET(-16) are
+                                            // returned by 
quiche_conn_stream_send.
 
   len = quiche_conn_stream_capacity(quiche_con, this->_id);
   if (len <= 0) {
@@ -125,7 +129,7 @@ QUICStream::send_data(quiche_conn *quiche_con)
   }
   if (block->size() > 0 || fin) {
     ssize_t written_len =
-      quiche_conn_stream_send(quiche_con, this->_id, reinterpret_cast<uint8_t 
*>(block->start()), block->size(), fin);
+      quiche_conn_stream_send(quiche_con, this->_id, reinterpret_cast<uint8_t 
*>(block->start()), block->size(), fin, &error_code);
     if (written_len >= 0) {
       this->_sent_bytes += written_len;
     }
diff --git a/tools/build_boringssl_h3_tools.sh 
b/tools/build_boringssl_h3_tools.sh
index 9dc22878bb..8c5979619f 100755
--- a/tools/build_boringssl_h3_tools.sh
+++ b/tools/build_boringssl_h3_tools.sh
@@ -171,12 +171,14 @@ echo "Building quiche"
 QUICHE_BASE="${BASE:-/opt}/quiche"
 [ ! -d quiche ] && git clone  https://github.com/cloudflare/quiche.git
 cd quiche
-git checkout 0.21.0
+git checkout 0.22.0
 QUICHE_BSSL_PATH=${BORINGSSL_LIB_PATH} QUICHE_BSSL_LINK_KIND=dylib cargo build 
-j4 --package quiche --release --features ffi,pkg-config-meta,qlog
 sudo mkdir -p ${QUICHE_BASE}/lib/pkgconfig
 sudo mkdir -p ${QUICHE_BASE}/include
 sudo cp target/release/libquiche.a ${QUICHE_BASE}/lib/
 [ -f target/release/libquiche.so ] && sudo cp target/release/libquiche.so 
${QUICHE_BASE}/lib/
+# Why a link? 
https://github.com/cloudflare/quiche/issues/1808#issuecomment-2196233378
+sudo ln -s ${QUICHE_BASE}/lib/libquiche.so ${QUICHE_BASE}/lib/libquiche.so.0
 sudo cp quiche/include/quiche.h ${QUICHE_BASE}/include/
 sudo cp target/release/quiche.pc ${QUICHE_BASE}/lib/pkgconfig
 sudo chmod -R a+rX ${BASE}
diff --git a/tools/build_openssl_h3_tools.sh b/tools/build_openssl_h3_tools.sh
index cc4d358b75..0f4c5c4f26 100755
--- a/tools/build_openssl_h3_tools.sh
+++ b/tools/build_openssl_h3_tools.sh
@@ -120,7 +120,7 @@ echo "Building quiche"
 QUICHE_BASE="${BASE:-/opt}/quiche"
 [ ! -d quiche ] && git clone https://github.com/cloudflare/quiche.git
 cd quiche
-git checkout 0.21.0
+git checkout 0.22.0
 
 PKG_CONFIG_PATH="$OPENSSL_LIB"/pkgconfig LD_LIBRARY_PATH="$OPENSSL_LIB" \
   cargo build -j4 --package quiche --release --features 
ffi,pkg-config-meta,qlog,openssl
@@ -129,6 +129,8 @@ sudo mkdir -p ${QUICHE_BASE}/lib/pkgconfig
 sudo mkdir -p ${QUICHE_BASE}/include
 sudo cp target/release/libquiche.a ${QUICHE_BASE}/lib/
 [ -f target/release/libquiche.so ] && sudo cp target/release/libquiche.so 
${QUICHE_BASE}/lib/
+# Why a link? 
https://github.com/cloudflare/quiche/issues/1808#issuecomment-2196233378
+sudo ln -s ${QUICHE_BASE}/lib/libquiche.so ${QUICHE_BASE}/lib/libquiche.so.0
 sudo cp quiche/include/quiche.h ${QUICHE_BASE}/include/
 sudo cp target/release/quiche.pc ${QUICHE_BASE}/lib/pkgconfig
 sudo chmod -R a+rX ${BASE}

Reply via email to