Prevent IETF QUIC Frame transmission prior to config
A number of IETF QUIC fames, including MAX_STREAMS and STREAMS_BLOCKED, should not be sent prior to having the session configured.
gfe-relnote: N/A IETF QUIC, protected via V99 flag.
PiperOrigin-RevId: 269611696
Change-Id: Ibed580f9bff8f716f3f78481022b5c929f5634ef
diff --git a/quic/test_tools/quic_session_peer.cc b/quic/test_tools/quic_session_peer.cc
index 22ccb28..001f1ca 100644
--- a/quic/test_tools/quic_session_peer.cc
+++ b/quic/test_tools/quic_session_peer.cc
@@ -241,5 +241,10 @@
return it == session->pending_stream_map_.end() ? nullptr : it->second.get();
}
+// static
+void QuicSessionPeer::set_is_configured(QuicSession* session, bool value) {
+ session->is_configured_ = value;
+}
+
} // namespace test
} // namespace quic
diff --git a/quic/test_tools/quic_session_peer.h b/quic/test_tools/quic_session_peer.h
index 79338fc..eed3bdd 100644
--- a/quic/test_tools/quic_session_peer.h
+++ b/quic/test_tools/quic_session_peer.h
@@ -86,6 +86,7 @@
bool close_write_side_only);
static PendingStream* GetPendingStream(QuicSession* session,
QuicStreamId stream_id);
+ static void set_is_configured(QuicSession* session, bool value);
};
} // namespace test
diff --git a/quic/test_tools/quic_stream_id_manager_peer.cc b/quic/test_tools/quic_stream_id_manager_peer.cc
index 3ce5f1f..6c08ece 100644
--- a/quic/test_tools/quic_stream_id_manager_peer.cc
+++ b/quic/test_tools/quic_stream_id_manager_peer.cc
@@ -20,10 +20,23 @@
}
// static
+void QuicStreamIdManagerPeer::set_outgoing_max_streams(
+ QuicStreamIdManager* stream_id_manager,
+ QuicStreamCount count) {
+ stream_id_manager->outgoing_max_streams_ = count;
+}
+
+// static
QuicStreamId QuicStreamIdManagerPeer::GetFirstIncomingStreamId(
QuicStreamIdManager* stream_id_manager) {
return stream_id_manager->GetFirstIncomingStreamId();
}
+// static
+bool QuicStreamIdManagerPeer::get_unidirectional(
+ QuicStreamIdManager* stream_id_manager) {
+ return stream_id_manager->unidirectional_;
+}
+
} // namespace test
} // namespace quic
diff --git a/quic/test_tools/quic_stream_id_manager_peer.h b/quic/test_tools/quic_stream_id_manager_peer.h
index cc78aee..4c97512 100644
--- a/quic/test_tools/quic_stream_id_manager_peer.h
+++ b/quic/test_tools/quic_stream_id_manager_peer.h
@@ -22,9 +22,13 @@
static void set_incoming_actual_max_streams(
QuicStreamIdManager* stream_id_manager,
QuicStreamCount count);
+ static void set_outgoing_max_streams(QuicStreamIdManager* stream_id_manager,
+ QuicStreamCount count);
static QuicStreamId GetFirstIncomingStreamId(
QuicStreamIdManager* stream_id_manager);
+
+ static bool get_unidirectional(QuicStreamIdManager* stream_id_manager);
};
} // namespace test
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 8ba9615..ba5e1cd 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -632,6 +632,12 @@
MOCK_CONST_METHOD0(IsCryptoHandshakeConfirmed, bool());
MOCK_CONST_METHOD0(ShouldKeepConnectionAlive, bool());
MOCK_METHOD2(SendStopSending, void(uint16_t code, QuicStreamId stream_id));
+#ifdef undefined
+ MOCK_METHOD2(SendMaxStreams,
+ void(QuicStreamCount stream_count, bool unidirectional));
+ MOCK_METHOD2(SendStreamsBlocked,
+ void(QuicStreamCount stream_count, bool unidirectional));
+#endif
MOCK_METHOD1(OnCryptoHandshakeEvent, void(QuicSession::CryptoHandshakeEvent));
MOCK_CONST_METHOD0(GetAlpnsToOffer, std::vector<std::string>());
MOCK_CONST_METHOD1(SelectAlpn,