Use QuicStream::transport_version() in QuicSpdySession.
Use QuicStream::transport_version() throughout QuicSpdySession instead of
session->connection()->transport_version() or
spdy_session->connection()->transport_version().
gfe-relnote: n/a, no functional change.
PiperOrigin-RevId: 257309665
Change-Id: Iaad38a38ee1bb3d6c309759f9cc9c58a46f1d1fb
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 6b7c48f..dd71302 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -98,8 +98,7 @@
bool OnDataFrameEnd() override { return stream_->OnDataFrameEnd(); }
bool OnHeadersFrameStart(Http3FrameLengths frame_length) override {
- if (!VersionUsesQpack(
- stream_->session()->connection()->transport_version())) {
+ if (!VersionUsesQpack(stream_->transport_version())) {
CloseConnectionOnWrongFrame("Headers");
return false;
}
@@ -108,8 +107,7 @@
bool OnHeadersFramePayload(QuicStringPiece payload) override {
DCHECK(!payload.empty());
- if (!VersionUsesQpack(
- stream_->session()->connection()->transport_version())) {
+ if (!VersionUsesQpack(stream_->transport_version())) {
CloseConnectionOnWrongFrame("Headers");
return false;
}
@@ -117,8 +115,7 @@
}
bool OnHeadersFrameEnd() override {
- if (!VersionUsesQpack(
- stream_->session()->connection()->transport_version())) {
+ if (!VersionUsesQpack(stream_->transport_version())) {
CloseConnectionOnWrongFrame("Headers");
return false;
}
@@ -177,17 +174,18 @@
sequencer_offset_(0),
is_decoder_processing_input_(false),
ack_listener_(nullptr) {
- DCHECK(!QuicUtils::IsCryptoStreamId(
- spdy_session->connection()->transport_version(), id));
+ DCHECK_EQ(session()->connection(), spdy_session->connection());
+ DCHECK_EQ(transport_version(),
+ spdy_session->connection()->transport_version());
+ DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
DCHECK_EQ(0u, sequencer()->NumBytesConsumed());
// If headers are sent on the headers stream, then do not receive any
// callbacks from the sequencer until headers are complete.
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
sequencer()->SetBlockedUntilFlush();
}
- if (VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (VersionHasDataFrameHeader(transport_version())) {
sequencer()->set_level_triggered(true);
}
}
@@ -213,16 +211,17 @@
sequencer_offset_(sequencer()->NumBytesConsumed()),
is_decoder_processing_input_(false),
ack_listener_(nullptr) {
- DCHECK(!QuicUtils::IsCryptoStreamId(
- spdy_session->connection()->transport_version(), id()));
+ DCHECK_EQ(session()->connection(), spdy_session->connection());
+ DCHECK_EQ(transport_version(),
+ spdy_session->connection()->transport_version());
+ DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id()));
// If headers are sent on the headers stream, then do not receive any
// callbacks from the sequencer until headers are complete.
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
sequencer()->SetBlockedUntilFlush();
}
- if (VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (VersionHasDataFrameHeader(transport_version())) {
sequencer()->set_level_triggered(true);
}
}
@@ -235,7 +234,7 @@
QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
QuicConnection::ScopedPacketFlusher flusher(spdy_session_->connection());
// Send stream type for server push stream
- if (VersionHasStreamType(session()->connection()->transport_version()) &&
+ if (VersionHasStreamType(transport_version()) &&
type() == WRITE_UNIDIRECTIONAL && send_buffer().stream_offset() == 0) {
char data[sizeof(kServerPushStream)];
QuicDataWriter writer(QUIC_ARRAYSIZE(data), data);
@@ -251,8 +250,7 @@
}
size_t bytes_written =
WriteHeadersImpl(std::move(header_block), fin, std::move(ack_listener));
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
- fin) {
+ if (!VersionUsesQpack(transport_version()) && fin) {
// If HEADERS are sent on the headers stream, then |fin_sent_| needs to be
// set and write side needs to be closed without actually sending a FIN on
// this stream.
@@ -264,9 +262,7 @@
}
void QuicSpdyStream::WriteOrBufferBody(QuicStringPiece data, bool fin) {
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version()) ||
- data.length() == 0) {
+ if (!VersionHasDataFrameHeader(transport_version()) || data.length() == 0) {
WriteOrBufferData(data, fin, nullptr);
return;
}
@@ -300,7 +296,7 @@
return 0;
}
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
// The header block must contain the final offset for this stream, as the
// trailers may be processed out of order at the peer.
const QuicStreamOffset final_offset =
@@ -319,7 +315,7 @@
// If trailers are sent on the headers stream, then |fin_sent_| needs to be
// set without actually sending a FIN on this stream.
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
set_fin_sent(kFin);
// Also, write side of this stream needs to be closed. However, only do
@@ -344,9 +340,7 @@
QuicConsumedData QuicSpdyStream::WriteBodySlices(QuicMemSliceSpan slices,
bool fin) {
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version()) ||
- slices.empty()) {
+ if (!VersionHasDataFrameHeader(transport_version()) || slices.empty()) {
return WriteMemSlices(slices, fin);
}
@@ -382,13 +376,12 @@
size_t QuicSpdyStream::Readv(const struct iovec* iov, size_t iov_len) {
DCHECK(FinishedReadingHeaders());
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (!VersionHasDataFrameHeader(transport_version())) {
return sequencer()->Readv(iov, iov_len);
}
size_t bytes_read = body_buffer_.ReadBody(iov, iov_len);
- if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (VersionUsesQpack(transport_version())) {
// Maybe all DATA frame bytes have been read and some trailing HEADERS had
// already been processed, in which case MarkConsumed() should be called.
MaybeMarkHeadersBytesConsumed();
@@ -399,8 +392,7 @@
int QuicSpdyStream::GetReadableRegions(iovec* iov, size_t iov_len) const {
DCHECK(FinishedReadingHeaders());
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (!VersionHasDataFrameHeader(transport_version())) {
return sequencer()->GetReadableRegions(iov, iov_len);
}
return body_buffer_.PeekBody(iov, iov_len);
@@ -408,14 +400,13 @@
void QuicSpdyStream::MarkConsumed(size_t num_bytes) {
DCHECK(FinishedReadingHeaders());
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (!VersionHasDataFrameHeader(transport_version())) {
sequencer()->MarkConsumed(num_bytes);
return;
}
body_buffer_.MarkBodyConsumed(num_bytes);
- if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (VersionUsesQpack(transport_version())) {
// Maybe all DATA frame bytes have been read and some trailing HEADERS had
// already been processed, in which case MarkConsumed() should be called.
MaybeMarkHeadersBytesConsumed();
@@ -430,8 +421,7 @@
}
bool QuicSpdyStream::HasBytesToRead() const {
- if (!VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (!VersionHasDataFrameHeader(transport_version())) {
return sequencer()->HasBytesToRead();
}
return body_buffer_.HasBytesToRead();
@@ -442,8 +432,7 @@
}
uint64_t QuicSpdyStream::total_body_bytes_read() const {
- if (VersionHasDataFrameHeader(
- spdy_session_->connection()->transport_version())) {
+ if (VersionHasDataFrameHeader(transport_version())) {
return body_buffer_.total_body_bytes_received();
}
return sequencer()->NumBytesConsumed();
@@ -456,7 +445,7 @@
return;
}
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
sequencer()->SetUnblocked();
return;
}
@@ -520,7 +509,7 @@
}
void QuicSpdyStream::OnHeadersTooLarge() {
- if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (VersionUsesQpack(transport_version())) {
// TODO(124216424): Use HTTP_EXCESSIVE_LOAD error code.
std::string error_message =
QuicStrCat("Too large headers received on stream ", id());
@@ -539,7 +528,7 @@
headers_decompressed_ = true;
header_list_ = header_list;
- if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (VersionUsesQpack(transport_version())) {
if (fin) {
OnStreamFrame(
QuicStreamFrame(id(), /* fin = */ true,
@@ -580,8 +569,7 @@
const QuicHeaderList& header_list) {
// TODO(b/134706391): remove |fin| argument.
DCHECK(!trailers_decompressed_);
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
- fin_received()) {
+ if (!VersionUsesQpack(transport_version()) && fin_received()) {
QUIC_DLOG(INFO) << "Received Trailers after FIN, on stream: " << id();
session()->connection()->CloseConnection(
QUIC_INVALID_HEADERS_STREAM_DATA, "Trailers after fin",
@@ -589,8 +577,7 @@
return;
}
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
- !fin) {
+ if (!VersionUsesQpack(transport_version()) && !fin) {
QUIC_DLOG(INFO) << "Trailers must have FIN set, on stream: " << id();
session()->connection()->CloseConnection(
QUIC_INVALID_HEADERS_STREAM_DATA, "Fin missing from trailers",
@@ -599,8 +586,7 @@
}
size_t final_byte_offset = 0;
- const bool expect_final_byte_offset =
- !VersionUsesQpack(spdy_session_->connection()->transport_version());
+ const bool expect_final_byte_offset = !VersionUsesQpack(transport_version());
if (!SpdyUtils::CopyAndValidateTrailers(header_list, expect_final_byte_offset,
&final_byte_offset,
&received_trailers_)) {
@@ -638,13 +624,12 @@
}
void QuicSpdyStream::OnDataAvailable() {
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
// Sequencer must be blocked until headers are consumed.
DCHECK(FinishedReadingHeaders());
}
- if (!VersionHasDataFrameHeader(
- session()->connection()->transport_version())) {
+ if (!VersionHasDataFrameHeader(transport_version())) {
OnBodyAvailable();
return;
}
@@ -757,8 +742,7 @@
}
bool QuicSpdyStream::OnDataFrameStart(Http3FrameLengths frame_lengths) {
- DCHECK(
- VersionHasDataFrameHeader(session()->connection()->transport_version()));
+ DCHECK(VersionHasDataFrameHeader(transport_version()));
if (!headers_decompressed_ || trailers_decompressed_) {
// TODO(b/124216424): Change error code to HTTP_UNEXPECTED_FRAME.
session()->connection()->CloseConnection(
@@ -772,16 +756,14 @@
}
bool QuicSpdyStream::OnDataFramePayload(QuicStringPiece payload) {
- DCHECK(
- VersionHasDataFrameHeader(session()->connection()->transport_version()));
+ DCHECK(VersionHasDataFrameHeader(transport_version()));
body_buffer_.OnDataPayload(payload);
return true;
}
bool QuicSpdyStream::OnDataFrameEnd() {
- DCHECK(
- VersionHasDataFrameHeader(session()->connection()->transport_version()));
+ DCHECK(VersionHasDataFrameHeader(transport_version()));
QUIC_DVLOG(1) << "Reaches the end of a data frame. Total bytes received are "
<< body_buffer_.total_body_bytes_received();
return true;
@@ -823,7 +805,7 @@
}
void QuicSpdyStream::MaybeMarkHeadersBytesConsumed() {
- DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+ DCHECK(VersionUsesQpack(transport_version()));
if (!body_buffer_.HasBytesToRead() && !reading_stopped() &&
headers_bytes_to_be_marked_consumed_ > 0) {
@@ -845,7 +827,7 @@
}
bool QuicSpdyStream::OnHeadersFrameStart(Http3FrameLengths frame_length) {
- DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+ DCHECK(VersionUsesQpack(transport_version()));
DCHECK(!qpack_decoded_headers_accumulator_);
if (trailers_decompressed_) {
@@ -876,7 +858,7 @@
}
bool QuicSpdyStream::OnHeadersFramePayload(QuicStringPiece payload) {
- DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+ DCHECK(VersionUsesQpack(transport_version()));
const bool success = qpack_decoded_headers_accumulator_->Decode(payload);
@@ -895,7 +877,7 @@
}
bool QuicSpdyStream::OnHeadersFrameEnd() {
- DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+ DCHECK(VersionUsesQpack(transport_version()));
auto result = qpack_decoded_headers_accumulator_->EndHeaderBlock();
@@ -931,7 +913,7 @@
spdy::SpdyHeaderBlock header_block,
bool fin,
QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
- if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+ if (!VersionUsesQpack(transport_version())) {
return spdy_session_->WriteHeadersOnHeadersStream(
id(), std::move(header_block), fin, priority(),
std::move(ack_listener));