remove num_expected_unidirectional_static_streams_ from QuicSession. gfe-relnote: no behavior change. not protected. PiperOrigin-RevId: 309085887 Change-Id: Iddcdb676c27e50e61654b41be754350f201a018a
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc index 1baa8b8..186e104 100644 --- a/quic/core/http/end_to_end_test.cc +++ b/quic/core/http/end_to_end_test.cc
@@ -1749,7 +1749,7 @@ client_session->connection()->transport_version()) ? QuicSessionPeer::v99_streamid_manager(client_session) ->max_outgoing_unidirectional_streams() - - client_session->num_expected_unidirectional_static_streams() + kHttp3StaticUnidirectionalStreamCount : QuicSessionPeer::GetStreamIdManager(client_session) ->max_open_outgoing_streams(); EXPECT_EQ(kServerMaxDynamicStreams, @@ -1770,7 +1770,7 @@ server_session->connection()->transport_version()) ? QuicSessionPeer::v99_streamid_manager(server_session) ->max_outgoing_unidirectional_streams() - - server_session->num_expected_unidirectional_static_streams() + kHttp3StaticUnidirectionalStreamCount : QuicSessionPeer::GetStreamIdManager(server_session) ->max_open_outgoing_streams(); EXPECT_EQ(kClientMaxDynamicStreams,
diff --git a/quic/core/http/http_constants.h b/quic/core/http/http_constants.h index fbf3069..17afe1b 100644 --- a/quic/core/http/http_constants.h +++ b/quic/core/http/http_constants.h
@@ -20,6 +20,9 @@ const uint64_t kQpackEncoderStream = 0x02; const uint64_t kQpackDecoderStream = 0x03; +// This includes control stream, QPACK encoder stream, and QPACK decoder stream. +const QuicStreamCount kHttp3StaticUnidirectionalStreamCount = 3; + // HTTP/3 and QPACK settings identifiers. // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#settings-parameters // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#configuration
diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc index ce0cf9f..9ea6128 100644 --- a/quic/core/http/quic_spdy_client_session_test.cc +++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -165,8 +165,7 @@ QuicConfig config = DefaultQuicConfig(); if (VersionHasIetfQuicFrames(connection_->transport_version())) { config.SetMaxUnidirectionalStreamsToSend( - server_max_incoming_streams + - session_->num_expected_unidirectional_static_streams()); + server_max_incoming_streams + kHttp3StaticUnidirectionalStreamCount); config.SetMaxBidirectionalStreamsToSend(server_max_incoming_streams); } else { config.SetMaxBidirectionalStreamsToSend(server_max_incoming_streams);
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc index c5ed028..d00bf9a 100644 --- a/quic/core/http/quic_spdy_session.cc +++ b/quic/core/http/quic_spdy_session.cc
@@ -376,7 +376,9 @@ config, supported_versions, /*num_expected_unidirectional_static_streams = */ - VersionUsesHttp3(connection->transport_version()) ? 3 : 0), + VersionUsesHttp3(connection->transport_version()) + ? kHttp3StaticUnidirectionalStreamCount + : 0), send_control_stream_(nullptr), receive_control_stream_(nullptr), qpack_encoder_receive_stream_(nullptr), @@ -448,8 +450,6 @@ headers_stream_ = headers_stream.get(); ActivateStream(std::move(headers_stream)); } else { - ConfigureMaxUnidirectionalStreamsToSend( - config()->GetMaxUnidirectionalStreamsToSend()); qpack_encoder_ = std::make_unique<QpackEncoder>(this); qpack_decoder_ = std::make_unique<QpackDecoder>(qpack_maximum_dynamic_table_capacity_,
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc index 7bc452f..55930e1 100644 --- a/quic/core/http/quic_spdy_session_test.cc +++ b/quic/core/http/quic_spdy_session_test.cc
@@ -346,8 +346,7 @@ kInitialSessionFlowControlWindowForTest); if (VersionUsesHttp3(transport_version())) { QuicConfigPeer::SetReceivedMaxUnidirectionalStreams( - session_.config(), - session_.num_expected_unidirectional_static_streams()); + session_.config(), kHttp3StaticUnidirectionalStreamCount); } QuicConfigPeer::SetReceivedInitialSessionFlowControlWindow( session_.config(), kMinimumFlowControlSendWindow); @@ -1602,7 +1601,8 @@ EXPECT_CALL( *connection_, - CloseConnection(_, "New unidirectional stream limit is too low.", _)); + CloseConnection( + _, "new unidirectional limit 2 decreases the current limit: 3", _)); session_.OnConfigNegotiated(); }
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc index 43932bf..99d1ff4 100644 --- a/quic/core/quic_session.cc +++ b/quic/core/quic_session.cc
@@ -100,8 +100,6 @@ supported_versions_(supported_versions), use_http2_priority_write_scheduler_(false), is_configured_(false), - num_expected_unidirectional_static_streams_( - num_expected_unidirectional_static_streams), enable_round_robin_scheduling_(false), deprecate_draining_streams_( GetQuicReloadableFlag(quic_deprecate_draining_streams)), @@ -114,6 +112,11 @@ connection_->version().handshake_protocol == PROTOCOL_TLS1_3) { config_.SetStatelessResetTokenToSend(GetStatelessResetToken()); } + if (VersionHasIetfQuicFrames(transport_version())) { + config_.SetMaxUnidirectionalStreamsToSend( + config_.GetMaxUnidirectionalStreamsToSend() + + num_expected_unidirectional_static_streams); + } if (break_close_loop_) { QUIC_RELOADABLE_FLAG_COUNT(quic_break_session_stream_close_loop); } @@ -1144,21 +1147,8 @@ if (config_.HasReceivedMaxUnidirectionalStreams()) { max_streams = config_.ReceivedMaxUnidirectionalStreams(); } - // TODO(b/153726130): remove this check and - // num_expected_unidirectional_static_streams_. - if (max_streams < num_expected_unidirectional_static_streams_) { - QUIC_DLOG(ERROR) << "Received unidirectional stream limit of " - << max_streams << " < " - << num_expected_unidirectional_static_streams_; - connection_->CloseConnection( - QUIC_HTTP_STREAM_LIMIT_TOO_LOW, - "New unidirectional stream limit is too low.", - ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET); - return; - } - if (perspective_ == Perspective::IS_CLIENT && - max_streams < - v99_streamid_manager_.max_outgoing_unidirectional_streams()) { + if (max_streams < + v99_streamid_manager_.max_outgoing_unidirectional_streams()) { connection_->CloseConnection( QUIC_MAX_STREAMS_ERROR, quiche::QuicheStrCat( @@ -1655,14 +1645,6 @@ stream_id_manager_.ActivateStream( /*is_incoming=*/IsIncomingStream(stream_id)); } - - if (VersionHasIetfQuicFrames(transport_version()) && - !QuicUtils::IsBidirectionalStreamId(stream_id) && is_static) { - DCHECK_LE(num_incoming_static_streams_, - num_expected_unidirectional_static_streams_); - DCHECK_LE(num_outgoing_static_streams_, - num_expected_unidirectional_static_streams_); - } } QuicStreamId QuicSession::GetNextOutgoingBidirectionalStreamId() {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h index 1825322..a4bec84 100644 --- a/quic/core/quic_session.h +++ b/quic/core/quic_session.h
@@ -459,21 +459,6 @@ bool is_configured() const { return is_configured_; } - QuicStreamCount num_expected_unidirectional_static_streams() const { - return num_expected_unidirectional_static_streams_; - } - - // Set the number of streams that the peer is allowed to open. - void ConfigureMaxBidirectionalStreamsToSend(QuicStreamCount max_stream) { - DCHECK(VersionHasIetfQuicFrames(transport_version())); - config_.SetMaxBidirectionalStreamsToSend(max_stream); - } - void ConfigureMaxUnidirectionalStreamsToSend(QuicStreamCount max_stream) { - DCHECK(VersionHasIetfQuicFrames(transport_version())); - config_.SetMaxUnidirectionalStreamsToSend( - max_stream + num_expected_unidirectional_static_streams_); - } - // Called to neuter crypto data of encryption |level|. void NeuterCryptoDataOfEncryptionLevel(EncryptionLevel level); @@ -846,9 +831,6 @@ // configured and is ready for general operation. bool is_configured_; - // The number of expected static streams. - QuicStreamCount num_expected_unidirectional_static_streams_; - // If true, enables round robin scheduling. bool enable_round_robin_scheduling_;
diff --git a/quic/qbone/qbone_session_base.cc b/quic/qbone/qbone_session_base.cc index 522e136..81aeda8 100644 --- a/quic/qbone/qbone_session_base.cc +++ b/quic/qbone/qbone_session_base.cc
@@ -44,11 +44,9 @@ const uint32_t max_streams = (std::numeric_limits<uint32_t>::max() / kMaxAvailableStreamsMultiplier) - 1; + this->config()->SetMaxBidirectionalStreamsToSend(max_streams); if (VersionHasIetfQuicFrames(transport_version())) { - ConfigureMaxBidirectionalStreamsToSend(max_streams); - ConfigureMaxUnidirectionalStreamsToSend(max_streams); - } else { - this->config()->SetMaxBidirectionalStreamsToSend(max_streams); + this->config()->SetMaxUnidirectionalStreamsToSend(max_streams); } }