Switch the hard-coded limit on number of connections in the QuicBufferedPacketStore
to a protocol flag.

Protected by FLAGS_quic_buffered_connections_limit.

PiperOrigin-RevId: 976329428
diff --git a/quiche/common/quiche_protocol_flags_list.h b/quiche/common/quiche_protocol_flags_list.h
index 41438b7..0372f35 100644
--- a/quiche/common/quiche_protocol_flags_list.h
+++ b/quiche/common/quiche_protocol_flags_list.h
@@ -286,4 +286,8 @@
     "If QuicConnection::GetUnackedMapInitialCapacity() already specifies a "
     "number, the larger of two applies.")
 
+QUICHE_PROTOCOL_FLAG(
+    uint32_t, quic_buffered_connections_limit, 100,
+    "Limit on the number of connections in the buffered packet store.")
+
 #endif
diff --git a/quiche/quic/core/quic_buffered_packet_store.cc b/quiche/quic/core/quic_buffered_packet_store.cc
index 59b6679..64d843b 100644
--- a/quiche/quic/core/quic_buffered_packet_store.cc
+++ b/quiche/quic/core/quic_buffered_packet_store.cc
@@ -47,12 +47,6 @@
 using BufferedPacketList = QuicBufferedPacketStore::BufferedPacketList;
 using EnqueuePacketResult = QuicBufferedPacketStore::EnqueuePacketResult;
 
-// Max number of connections this store can keep track.
-static const size_t kDefaultMaxConnectionsInStore = 100;
-// Up to half of the capacity can be used for storing non-CHLO packets.
-static const size_t kMaxConnectionsWithoutCHLO =
-    kDefaultMaxConnectionsInStore / 2;
-
 namespace {
 
 // This alarm removes expired entries in map each time this alarm fires.
@@ -535,7 +529,7 @@
 
 bool QuicBufferedPacketStore::ShouldNotBufferPacket(bool is_chlo) const {
   const bool is_store_full =
-      num_buffered_sessions_ >= kDefaultMaxConnectionsInStore;
+      num_buffered_sessions_ >= GetQuicFlag(quic_buffered_connections_limit);
 
   if (is_chlo) {
     return is_store_full;
@@ -547,8 +541,8 @@
       << ", num_connections_with_chlo: " << num_buffered_sessions_with_chlo_;
   size_t num_connections_without_chlo =
       num_buffered_sessions_ - num_buffered_sessions_with_chlo_;
-  bool reach_non_chlo_limit =
-      num_connections_without_chlo >= kMaxConnectionsWithoutCHLO;
+  bool reach_non_chlo_limit = num_connections_without_chlo >=
+                              GetQuicFlag(quic_buffered_connections_limit) / 2;
 
   return is_store_full || reach_non_chlo_limit;
 }
diff --git a/quiche/quic/core/quic_buffered_packet_store_test.cc b/quiche/quic/core/quic_buffered_packet_store_test.cc
index 9490506..01bb4f5 100644
--- a/quiche/quic/core/quic_buffered_packet_store_test.cc
+++ b/quiche/quic/core/quic_buffered_packet_store_test.cc
@@ -45,13 +45,13 @@
 #include "quiche/common/quiche_endian.h"
 
 namespace quic {
-static const size_t kDefaultMaxConnectionsInStore = 100;
-static const size_t kMaxConnectionsWithoutCHLO =
-    kDefaultMaxConnectionsInStore / 2;
-
 namespace test {
 namespace {
 
+const size_t kDefaultMaxConnectionsInStore =
+    GetQuicFlag(quic_buffered_connections_limit);
+const size_t kMaxConnectionsWithoutCHLO = kDefaultMaxConnectionsInStore / 2;
+
 const std::optional<ParsedClientHello> kNoParsedChlo;
 const std::optional<ParsedClientHello> kDefaultParsedChlo =
     std::make_optional<ParsedClientHello>();
diff --git a/quiche/quic/core/quic_dispatcher_test.cc b/quiche/quic/core/quic_dispatcher_test.cc
index 9e83738..2877395 100644
--- a/quiche/quic/core/quic_dispatcher_test.cc
+++ b/quiche/quic/core/quic_dispatcher_test.cc
@@ -83,9 +83,6 @@
 using testing::WithArg;
 using testing::WithoutArgs;
 
-static const size_t kDefaultMaxConnectionsInStore = 100;
-static const size_t kMaxConnectionsWithoutCHLO =
-    kDefaultMaxConnectionsInStore / 2;
 static const int16_t kMaxNumSessionsToCreate = 16;
 
 namespace quic {
@@ -95,6 +92,10 @@
 const QuicConnectionId kReturnConnectionId{
     {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}};
 
+const size_t kDefaultMaxConnectionsInStore =
+    GetQuicFlag(quic_buffered_connections_limit);
+const size_t kMaxConnectionsWithoutCHLO = kDefaultMaxConnectionsInStore / 2;
+
 class TestQuicSpdyServerSession : public QuicServerSessionBase {
  public:
   TestQuicSpdyServerSession(const QuicConfig& config,