[qbone] Return vector of connection IDs when `QboneSessionGetIpRangeRequest.num_preallocated_cids` is set.

PiperOrigin-RevId: 995880201
diff --git a/quiche/quic/core/connection_id_generator.h b/quiche/quic/core/connection_id_generator.h
index 33ecedc..fc58c05 100644
--- a/quiche/quic/core/connection_id_generator.h
+++ b/quiche/quic/core/connection_id_generator.h
@@ -5,6 +5,10 @@
 #ifndef QUICHE_QUIC_CORE_CONNECTION_ID_GENERATOR_H_
 #define QUICHE_QUIC_CORE_CONNECTION_ID_GENERATOR_H_
 
+#include <cstdint>
+#include <optional>
+#include <vector>
+
 #include "quiche/quic/core/quic_connection_id.h"
 #include "quiche/quic/core/quic_versions.h"
 
@@ -23,6 +27,12 @@
   // and consider replacing it. Returns empty if not replaced.
   virtual std::optional<QuicConnectionId> MaybeReplaceConnectionId(
       const QuicConnectionId& original, const ParsedQuicVersion& version) = 0;
+  // Generate a vector of |num_connection_ids| connection IDs from an existing
+  // connection ID. Returns empty vector on failure or if unsupported.
+  virtual std::vector<QuicConnectionId> GenerateNextConnectionIds(
+      const QuicConnectionId& /*original*/, int /*num_connection_ids*/) {
+    return {};
+  }
   // Returns the length of a connection ID generated by this generator with the
   // specified first byte.
   virtual uint8_t ConnectionIdLength(uint8_t first_byte) const = 0;
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index 1bbb824..e778916 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -1540,6 +1540,10 @@
   // participation guidance.
   bool ShouldEnableSpinBit() const;
 
+  ConnectionIdGeneratorInterface& connection_id_generator() const {
+    return connection_id_generator_;
+  }
+
  protected:
   // Calls cancel() on all the alarms owned by this connection.
   void CancelAllAlarms();
@@ -1598,10 +1602,6 @@
     return defer_send_in_response_to_packets_;
   }
 
-  ConnectionIdGeneratorInterface& connection_id_generator() const {
-    return connection_id_generator_;
-  }
-
  private:
   friend class test::QuicConnectionPeer;
 
diff --git a/quiche/quic/test_tools/mock_connection_id_generator.h b/quiche/quic/test_tools/mock_connection_id_generator.h
index 4ea34b9..17d5c77 100644
--- a/quiche/quic/test_tools/mock_connection_id_generator.h
+++ b/quiche/quic/test_tools/mock_connection_id_generator.h
@@ -5,6 +5,10 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_MOCK_CONNECTION_ID_GENERATOR_H_
 #define QUICHE_QUIC_TEST_TOOLS_MOCK_CONNECTION_ID_GENERATOR_H_
 
+#include <cstdint>
+#include <optional>
+#include <vector>
+
 #include "quiche/quic/core/connection_id_generator.h"
 #include "quiche/quic/platform/api/quic_test.h"
 
@@ -21,6 +25,10 @@
                const quic::ParsedQuicVersion& version),
               (override));
 
+  MOCK_METHOD(std::vector<quic::QuicConnectionId>, GenerateNextConnectionIds,
+              (const quic::QuicConnectionId& original, int num_connection_ids),
+              (override));
+
   MOCK_METHOD(uint8_t, ConnectionIdLength, (uint8_t first_byte),
               (const, override));
 };