Move some non-message-related data structures out of moqt_messages.h

This is a precursor to allowing greater application control of session parameters.

PiperOrigin-RevId: 903583565
diff --git a/quiche/quic/moqt/moqt_messages.cc b/quiche/quic/moqt/moqt_messages.cc
index 013b1f2..7281cf8 100644
--- a/quiche/quic/moqt/moqt_messages.cc
+++ b/quiche/quic/moqt/moqt_messages.cc
@@ -4,42 +4,17 @@
 
 #include "quiche/quic/moqt/moqt_messages.h"
 
-#include <array>
 #include <cstdint>
 #include <string>
 
-#include "absl/algorithm/container.h"
 #include "absl/strings/str_cat.h"
-#include "quiche/quic/core/quic_time.h"
-#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
+#include "quiche/quic/moqt/moqt_types.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 
 namespace moqt {
 
-void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
-  if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
-    out.path = path;
-    out.authority = authority;
-  }
-  if (max_request_id != kDefaultMaxRequestId) {
-    out.max_request_id = max_request_id;
-  }
-  if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
-    out.max_auth_token_cache_size = max_auth_token_cache_size;
-  }
-  if (support_object_acks != kDefaultSupportObjectAcks) {
-    out.support_object_acks = support_object_acks;
-  }
-  if (!moqt_implementation.empty()) {
-    out.moqt_implementation = moqt_implementation;
-  }
-  for (const AuthToken& token : authorization_token) {
-    out.authorization_tokens.push_back(token);
-  }
-}
-
 MoqtObjectStatus IntegerToObjectStatus(uint64_t integer) {
   if (integer >=
       static_cast<uint64_t>(MoqtObjectStatus::kInvalidObjectStatus)) {
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index c956c8f..3c7552f 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -7,20 +7,14 @@
 #ifndef QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
 #define QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
 
-#include <algorithm>
-#include <bit>
 #include <cstddef>
 #include <cstdint>
 #include <initializer_list>
 #include <optional>
 #include <string>
-#include <utility>
 #include <variant>
-#include <vector>
 
-#include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
-#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
@@ -29,7 +23,6 @@
 #include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_types.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/common/quiche_endian.h"
 
 namespace moqt {
 
@@ -37,53 +30,6 @@
   return quic::ParsedQuicVersionVector{quic::ParsedQuicVersion::RFCv1()};
 }
 
-inline constexpr absl::string_view kDraft16 = "moqt-16";
-inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
-inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
-
-inline constexpr absl::string_view kImplementationName =
-    "Google QUICHE MOQT draft 16";
-inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
-struct QUICHE_EXPORT MoqtSessionParameters {
-  // TODO: support multiple versions.
-  MoqtSessionParameters() = default;
-  explicit MoqtSessionParameters(quic::Perspective perspective)
-      : perspective(perspective), using_webtrans(true) {}
-  MoqtSessionParameters(quic::Perspective perspective, std::string path,
-                        std::string authority)
-      : perspective(perspective),
-        using_webtrans(false),
-        path(std::move(path)),
-        authority(std::move(authority)) {}
-  MoqtSessionParameters(quic::Perspective perspective, std::string path,
-                        std::string authority, uint64_t max_request_id)
-      : perspective(perspective),
-        using_webtrans(true),
-        path(std::move(path)),
-        max_request_id(max_request_id),
-        authority(std::move(authority)) {}
-  MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
-      : perspective(perspective), max_request_id(max_request_id) {}
-  bool operator==(const MoqtSessionParameters& other) const = default;
-
-  std::string version = std::string(kDefaultMoqtVersion);
-  bool deliver_partial_objects = false;
-  quic::Perspective perspective = quic::Perspective::IS_SERVER;
-  bool using_webtrans = true;
-  std::string path;
-  uint64_t max_request_id = kDefaultInitialMaxRequestId;
-  uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
-  bool support_object_acks = false;
-  // TODO(martinduke): Turn authorization_token into structured data.
-  std::vector<AuthToken> authorization_token;
-  std::string authority;
-  std::string moqt_implementation;
-
-  // Takes the relevant fields from this object and populates |out| if not the
-  // protocol default value.
-  void ToSetupParameters(SetupParameters& out) const;
-};
-
 // The maximum length of a message, excluding any OBJECT payload. This prevents
 // DoS attack via forcing the parser to buffer a large message (OBJECT payloads
 // are not buffered by the parser).
@@ -279,25 +225,6 @@
   kObjectAck = 0x3184,
 };
 
-// A tuple uniquely identifying a WebTransport data stream associated with a
-// subscription. By convention, if a DataStreamIndex is necessary for a datagram
-// track, `subgroup` is set to zero.
-struct DataStreamIndex {
-  uint64_t group = 0;
-  uint64_t subgroup = 0;
-
-  DataStreamIndex() = default;
-  DataStreamIndex(uint64_t group, uint64_t subgroup)
-      : group(group), subgroup(subgroup) {}
-
-  auto operator<=>(const DataStreamIndex&) const = default;
-
-  template <typename H>
-  friend H AbslHashValue(H h, const DataStreamIndex& index) {
-    return H::combine(std::move(h), index.group, index.subgroup);
-  }
-};
-
 struct SubgroupPriority {
   uint8_t publisher_priority = 0xf0;
   uint64_t subgroup_id = 0;
@@ -506,13 +433,6 @@
   std::string new_session_uri;
 };
 
-enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
-  kPublish = 0x00,
-  kNamespace = 0x01,
-  kBoth = 0x02,
-};
-static constexpr uint64_t kMaxSubscribeOption = 0x02;
-
 struct QUICHE_EXPORT MoqtSubscribeNamespace {
   uint64_t request_id;
   TrackNamespace track_namespace_prefix;
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 10522fa..c5c2ab8 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -2594,4 +2594,26 @@
       message.delta_from_deadline);
 }
 
+void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
+  if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
+    out.path = path;
+    out.authority = authority;
+  }
+  if (max_request_id != kDefaultMaxRequestId) {
+    out.max_request_id = max_request_id;
+  }
+  if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
+    out.max_auth_token_cache_size = max_auth_token_cache_size;
+  }
+  if (support_object_acks != kDefaultSupportObjectAcks) {
+    out.support_object_acks = support_object_acks;
+  }
+  if (!moqt_implementation.empty()) {
+    out.moqt_implementation = moqt_implementation;
+  }
+  for (const AuthToken& token : authorization_token) {
+    out.authorization_tokens.push_back(token);
+  }
+}
+
 }  // namespace moqt
diff --git a/quiche/quic/moqt/moqt_session_interface.h b/quiche/quic/moqt/moqt_session_interface.h
index 91a68c5..1df78b3 100644
--- a/quiche/quic/moqt/moqt_session_interface.h
+++ b/quiche/quic/moqt/moqt_session_interface.h
@@ -8,23 +8,74 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
+#include <string>
+#include <utility>
 #include <variant>
+#include <vector>
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/moqt/moqt_error.h"
 #include "quiche/quic/moqt/moqt_fetch_task.h"
 #include "quiche/quic/moqt/moqt_key_value_pair.h"
-#include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_names.h"
 #include "quiche/quic/moqt/moqt_object.h"
-#include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_session_callbacks.h"
+#include "quiche/quic/moqt/moqt_types.h"
+#include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_weak_ptr.h"
 
 namespace moqt {
 
+inline constexpr absl::string_view kDraft16 = "moqt-16";
+inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
+inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
+
+inline constexpr absl::string_view kImplementationName =
+    "Google QUICHE MOQT draft 16";
+inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
+struct QUICHE_EXPORT MoqtSessionParameters {
+  // TODO: support multiple versions.
+  MoqtSessionParameters() = default;
+  explicit MoqtSessionParameters(quic::Perspective perspective)
+      : perspective(perspective), using_webtrans(true) {}
+  MoqtSessionParameters(quic::Perspective perspective, std::string path,
+                        std::string authority)
+      : perspective(perspective),
+        using_webtrans(false),
+        path(std::move(path)),
+        authority(std::move(authority)) {}
+  MoqtSessionParameters(quic::Perspective perspective, std::string path,
+                        std::string authority, uint64_t max_request_id)
+      : perspective(perspective),
+        using_webtrans(true),
+        path(std::move(path)),
+        max_request_id(max_request_id),
+        authority(std::move(authority)) {}
+  MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
+      : perspective(perspective), max_request_id(max_request_id) {}
+  bool operator==(const MoqtSessionParameters& other) const = default;
+
+  std::string version = std::string(kDefaultMoqtVersion);
+  bool deliver_partial_objects = false;
+  quic::Perspective perspective = quic::Perspective::IS_SERVER;
+  bool using_webtrans = true;
+  std::string path;
+  uint64_t max_request_id = kDefaultInitialMaxRequestId;
+  uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
+  bool support_object_acks = false;
+  // TODO(martinduke): Turn authorization_token into structured data.
+  std::vector<AuthToken> authorization_token;
+  std::string authority;
+  std::string moqt_implementation;
+
+  // Takes the relevant fields from this object and populates |out| if not the
+  // protocol default value.
+  void ToSetupParameters(SetupParameters& out) const;
+};
+
 using MoqtObjectAckFunction =
     quiche::MultiUseCallback<void(uint64_t group_id, uint64_t object_id,
                                   quic::QuicTimeDelta delta_from_deadline)>;
diff --git a/quiche/quic/moqt/moqt_types.h b/quiche/quic/moqt/moqt_types.h
index 4698a3c..32f38d6 100644
--- a/quiche/quic/moqt/moqt_types.h
+++ b/quiche/quic/moqt/moqt_types.h
@@ -60,6 +60,32 @@
   kInvalidObjectStatus = 0x5,
 };
 
+// A tuple uniquely identifying a WebTransport data stream associated with a
+// subscription. By convention, if a DataStreamIndex is necessary for a datagram
+// track, `subgroup` is set to zero.
+struct DataStreamIndex {
+  uint64_t group = 0;
+  uint64_t subgroup = 0;
+
+  DataStreamIndex() = default;
+  DataStreamIndex(uint64_t group, uint64_t subgroup)
+      : group(group), subgroup(subgroup) {}
+
+  auto operator<=>(const DataStreamIndex&) const = default;
+
+  template <typename H>
+  friend H AbslHashValue(H h, const DataStreamIndex& index) {
+    return H::combine(std::move(h), index.group, index.subgroup);
+  }
+};
+
+enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
+  kPublish = 0x00,
+  kNamespace = 0x01,
+  kBoth = 0x02,
+};
+static constexpr uint64_t kMaxSubscribeOption = 0x02;
+
 }  // namespace moqt
 
 #endif  // QUICHE_QUIC_MOQT_MOQT_TYPES_H_