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