You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by cm...@apache.org on 2024/03/01 15:25:30 UTC
(trafficserver) 02/17: http3: Don't use chunked encoding unnecessarily (#11080)
This is an automated email from the ASF dual-hosted git repository.
cmcfarlen pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit d056e07dd95c230e9e57b9f7b3bde83025744999
Author: Masakazu Kitajo <ma...@apache.org>
AuthorDate: Mon Feb 19 09:22:12 2024 -0700
http3: Don't use chunked encoding unnecessarily (#11080)
(cherry picked from commit fc3fd98d106d5073c9668d1e18e5b8527a599324)
---
include/iocore/net/quic/QUICStream.h | 2 ++
src/iocore/net/quic/QUICStream.cc | 7 +++++++
src/proxy/http3/Http3Transaction.cc | 11 +++++------
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/include/iocore/net/quic/QUICStream.h b/include/iocore/net/quic/QUICStream.h
index 29283d71a0..2280ecdecb 100644
--- a/include/iocore/net/quic/QUICStream.h
+++ b/include/iocore/net/quic/QUICStream.h
@@ -51,6 +51,7 @@ public:
const QUICConnectionInfoProvider *connection_info();
QUICStreamDirection direction() const;
bool is_bidirectional() const;
+ bool has_no_more_data() const;
QUICOffset final_offset() const;
@@ -82,6 +83,7 @@ protected:
QUICStreamAdapter *_adapter = nullptr;
uint64_t _received_bytes = 0;
uint64_t _sent_bytes = 0;
+ bool _has_no_more_data = false;
};
class QUICStreamStateListener
diff --git a/src/iocore/net/quic/QUICStream.cc b/src/iocore/net/quic/QUICStream.cc
index a7241ada28..c911274632 100644
--- a/src/iocore/net/quic/QUICStream.cc
+++ b/src/iocore/net/quic/QUICStream.cc
@@ -55,6 +55,12 @@ QUICStream::is_bidirectional() const
return ((this->_id & 0x03) < 0x02);
}
+bool
+QUICStream::has_no_more_data() const
+{
+ return this->_has_no_more_data;
+}
+
void
QUICStream::set_io_adapter(QUICStreamAdapter *adapter)
{
@@ -98,6 +104,7 @@ QUICStream::receive_data(quiche_conn *quiche_con)
this->_adapter->write(this->_received_bytes, buf, read_len, fin);
this->_received_bytes += read_len;
}
+ this->_has_no_more_data = quiche_conn_stream_finished(quiche_con, this->_id);
this->_adapter->encourge_read();
}
diff --git a/src/proxy/http3/Http3Transaction.cc b/src/proxy/http3/Http3Transaction.cc
index 11ce096ebd..a2c96ec23a 100644
--- a/src/proxy/http3/Http3Transaction.cc
+++ b/src/proxy/http3/Http3Transaction.cc
@@ -617,8 +617,8 @@ Http3Transaction::_process_write_vio()
bool
Http3Transaction::has_request_body(int64_t content_length, bool is_chunked_set) const
{
- // Has body if Content-Length != 0
- if (content_length != 0) {
+ // Has body if Content-Length != 0 (content_length can be -1 if it's undefined)
+ if (content_length > 0) {
return true;
}
@@ -628,10 +628,9 @@ Http3Transaction::has_request_body(int64_t content_length, bool is_chunked_set)
}
// No body if stream is already closed and DATA frame is not received yet
- // TODO stream state
- // if () {
- // return false;
- // }
+ if (this->_info.adapter.stream().has_no_more_data()) {
+ return false;
+ }
// No body if trailing header is received and DATA frame is not received yet
// TODO trailing header