Fix LegacyQuicStreamIdManager when CRYPTO frames are used

gfe-relnote: LegacyQuicStreamIdManager refactor protected by QUIC_VERSION_99
PiperOrigin-RevId: 255327682
Change-Id: I561dbf10e61d8733188e67ad4f3becfd449d38f6
diff --git a/quic/core/legacy_quic_stream_id_manager.cc b/quic/core/legacy_quic_stream_id_manager.cc
index 447f16d..a7ec123 100644
--- a/quic/core/legacy_quic_stream_id_manager.cc
+++ b/quic/core/legacy_quic_stream_id_manager.cc
@@ -26,9 +26,8 @@
           session->perspective() == Perspective::IS_SERVER
               ? (QuicVersionUsesCryptoFrames(
                      session->connection()->transport_version())
-                     ? QuicUtils::GetFirstBidirectionalStreamId(
-                           session->connection()->transport_version(),
-                           Perspective::IS_CLIENT)
+                     ? QuicUtils::GetInvalidStreamId(
+                           session->connection()->transport_version())
                      : QuicUtils::GetCryptoStreamId(
                            session->connection()->transport_version()))
               : QuicUtils::GetInvalidStreamId(
@@ -83,6 +82,11 @@
   // only alternately-numbered streams.
   size_t additional_available_streams =
       (stream_id - largest_peer_created_stream_id_) / 2 - 1;
+  if (largest_peer_created_stream_id_ ==
+      QuicUtils::GetInvalidStreamId(
+          session_->connection()->transport_version())) {
+    additional_available_streams = (stream_id + 1) / 2 - 1;
+  }
   size_t new_num_available_streams =
       GetNumAvailableStreams() + additional_available_streams;
   if (new_num_available_streams > MaxAvailableStreams()) {
@@ -99,8 +103,15 @@
         ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
     return false;
   }
-  for (QuicStreamId id = largest_peer_created_stream_id_ + 2; id < stream_id;
-       id += 2) {
+  QuicStreamId first_available_stream = largest_peer_created_stream_id_ + 2;
+  if (largest_peer_created_stream_id_ ==
+      QuicUtils::GetInvalidStreamId(
+          session_->connection()->transport_version())) {
+    first_available_stream = QuicUtils::GetFirstBidirectionalStreamId(
+        session_->connection()->transport_version(),
+        QuicUtils::InvertPerspective(session_->perspective()));
+  }
+  for (QuicStreamId id = first_available_stream; id < stream_id; id += 2) {
     available_streams_.insert(id);
   }
   largest_peer_created_stream_id_ = stream_id;