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));