Add flag to QuicSession indicating that it has been configured This CL adds a flag to QuicSession that indicates when the QuicSession has been configured. This needed for follow-on work where IETF QUIC is limited as to the frames that can be sent _until_ the transport config has been performed. QuicSession test has been modified to A) artificially perform a configuration and B) check at test termination that it has been configured. gfe-relnote: N/A not significant. Other changes all to tests. PiperOrigin-RevId: 264362154 Change-Id: I1467cd4ed4531c01950d3fb938637e8633de815e
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc index 5486e64..fd3d489 100644 --- a/quic/core/quic_session.cc +++ b/quic/core/quic_session.cc
@@ -89,7 +89,8 @@ last_message_id_(0), closed_streams_clean_up_alarm_(nullptr), supported_versions_(supported_versions), - use_http2_priority_write_scheduler_(false) { + use_http2_priority_write_scheduler_(false), + is_configured_(false) { closed_streams_clean_up_alarm_ = QuicWrapUnique<QuicAlarm>(connection_->alarm_factory()->CreateAlarm( new ClosedStreamsCleanUpDelegate(this))); @@ -1051,6 +1052,7 @@ OnNewSessionFlowControlWindow( config_.ReceivedInitialSessionFlowControlWindowBytes()); } + is_configured_ = true; } void QuicSession::AdjustInitialFlowControlWindows(size_t stream_window) {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h index 6ab56f9..8216bbd 100644 --- a/quic/core/quic_session.h +++ b/quic/core/quic_session.h
@@ -431,6 +431,8 @@ return use_http2_priority_write_scheduler_; } + bool is_configured() const { return is_configured_; } + protected: using StreamMap = QuicSmallMap<QuicStreamId, std::unique_ptr<QuicStream>, 10>; @@ -724,6 +726,10 @@ // If true, write_blocked_streams_ uses HTTP2 (tree-style) priority write // scheduler. bool use_http2_priority_write_scheduler_; + + // Initialized to false. Set to true when the session has been properly + // configured and is ready for general operation. + bool is_configured_; }; } // namespace quic
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc index 9111ee4..3a6db56 100644 --- a/quic/core/quic_session_test.cc +++ b/quic/core/quic_session_test.cc
@@ -153,7 +153,10 @@ QuicMakeUnique<NullEncrypter>(connection->perspective())); } - ~TestSession() override { delete connection(); } + ~TestSession() override { + EXPECT_TRUE(is_configured()); + delete connection(); + } TestCryptoStream* GetMutableCryptoStream() override { return &crypto_stream_; @@ -329,7 +332,13 @@ kInitialStreamFlowControlWindowForTest); session_.config()->SetInitialSessionFlowControlWindowToSend( kInitialSessionFlowControlWindowForTest); + + QuicConfigPeer::SetReceivedMaxIncomingBidirectionalStreams( + session_.config(), kDefaultMaxStreamsPerConnection); + QuicConfigPeer::SetReceivedMaxIncomingUnidirectionalStreams( + session_.config(), kDefaultMaxStreamsPerConnection); connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1)); + session_.OnConfigNegotiated(); TestCryptoStream* crypto_stream = session_.GetMutableCryptoStream(); EXPECT_CALL(*crypto_stream, HasPendingRetransmission()) .Times(testing::AnyNumber());
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc index 8865a1d..ca6d441 100644 --- a/quic/core/quic_stream_id_manager.cc +++ b/quic/core/quic_stream_id_manager.cc
@@ -221,7 +221,8 @@ // TODO(fkastenholz): Should we close the connection? QUIC_BUG_IF(outgoing_stream_count_ >= outgoing_max_streams_) << "Attempt to allocate a new outgoing stream that would exceed the " - "limit"; + "limit (" + << outgoing_max_streams_ << ")"; QuicStreamId id = next_outgoing_stream_id_; next_outgoing_stream_id_ += QuicUtils::StreamIdDelta(transport_version()); outgoing_stream_count_++;