Move MoqtTrack code into a .cc file.
PiperOrigin-RevId: 647676691
diff --git a/build/source_list.bzl b/build/source_list.bzl
index bbe3b4c..d204605 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1527,6 +1527,7 @@
"quic/moqt/moqt_session_test.cc",
"quic/moqt/moqt_subscribe_windows.cc",
"quic/moqt/moqt_subscribe_windows_test.cc",
+ "quic/moqt/moqt_track.cc",
"quic/moqt/moqt_track_test.cc",
"quic/moqt/test_tools/moqt_simulator_harness.cc",
"quic/moqt/tools/chat_client_bin.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 3429497..3556e72 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1531,6 +1531,7 @@
"src/quiche/quic/moqt/moqt_session_test.cc",
"src/quiche/quic/moqt/moqt_subscribe_windows.cc",
"src/quiche/quic/moqt/moqt_subscribe_windows_test.cc",
+ "src/quiche/quic/moqt/moqt_track.cc",
"src/quiche/quic/moqt/moqt_track_test.cc",
"src/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc",
"src/quiche/quic/moqt/tools/chat_client_bin.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 12fec03..2c75654 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1530,6 +1530,7 @@
"quiche/quic/moqt/moqt_session_test.cc",
"quiche/quic/moqt/moqt_subscribe_windows.cc",
"quiche/quic/moqt/moqt_subscribe_windows_test.cc",
+ "quiche/quic/moqt/moqt_track.cc",
"quiche/quic/moqt/moqt_track_test.cc",
"quiche/quic/moqt/test_tools/moqt_simulator_harness.cc",
"quiche/quic/moqt/tools/chat_client_bin.cc",
diff --git a/quiche/quic/moqt/moqt_track.cc b/quiche/quic/moqt/moqt_track.cc
new file mode 100644
index 0000000..d2644c8
--- /dev/null
+++ b/quiche/quic/moqt/moqt_track.cc
@@ -0,0 +1,82 @@
+// Copyright 2024 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file
+
+#include "quiche/quic/moqt/moqt_track.h"
+
+#include <cstdint>
+
+#include "quiche/quic/moqt/moqt_messages.h"
+
+namespace moqt {
+
+void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group,
+ uint64_t start_object) {
+ QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
+ << "Canceled track got subscription";
+ windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object);
+}
+
+void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group,
+ uint64_t start_object, uint64_t end_group) {
+ QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
+ << "Canceled track got subscription";
+ // The end object might be unknown.
+ auto it = max_object_ids_.find(end_group);
+ if (end_group >= next_sequence_.group) {
+ // Group is not fully published yet, so end object is unknown.
+ windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object,
+ end_group, UINT64_MAX);
+ return;
+ }
+ windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object,
+ end_group, it->second);
+}
+
+void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group,
+ uint64_t start_object, uint64_t end_group,
+ uint64_t end_object) {
+ QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
+ << "Canceled track got subscription";
+ windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object,
+ end_group, end_object);
+}
+
+void LocalTrack::SentSequence(FullSequence sequence, MoqtObjectStatus status) {
+ QUICHE_DCHECK(max_object_ids_.find(sequence.group) == max_object_ids_.end() ||
+ max_object_ids_[sequence.group] < sequence.object);
+ switch (status) {
+ case MoqtObjectStatus::kNormal:
+ case MoqtObjectStatus::kObjectDoesNotExist:
+ if (next_sequence_ <= sequence) {
+ next_sequence_ = sequence.next();
+ }
+ break;
+ case MoqtObjectStatus::kGroupDoesNotExist:
+ max_object_ids_[sequence.group] = 0;
+ break;
+ case MoqtObjectStatus::kEndOfGroup:
+ max_object_ids_[sequence.group] = sequence.object;
+ if (next_sequence_ <= sequence) {
+ next_sequence_ = FullSequence(sequence.group + 1, 0);
+ }
+ break;
+ case MoqtObjectStatus::kEndOfTrack:
+ max_object_ids_[sequence.group] = sequence.object;
+ break;
+ default:
+ QUICHE_DCHECK(false);
+ return;
+ }
+}
+
+bool RemoteTrack::CheckForwardingPreference(
+ MoqtForwardingPreference preference) {
+ if (forwarding_preference_.has_value()) {
+ return forwarding_preference_.value() == preference;
+ }
+ forwarding_preference_ = preference;
+ return true;
+}
+
+} // namespace moqt
diff --git a/quiche/quic/moqt/moqt_track.h b/quiche/quic/moqt/moqt_track.h
index e61dc8b..c9ece3f 100644
--- a/quiche/quic/moqt/moqt_track.h
+++ b/quiche/quic/moqt/moqt_track.h
@@ -69,36 +69,14 @@
}
void AddWindow(uint64_t subscribe_id, uint64_t start_group,
- uint64_t start_object) {
- QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
- << "Canceled track got subscription";
- windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object);
- }
+ uint64_t start_object);
void AddWindow(uint64_t subscribe_id, uint64_t start_group,
- uint64_t start_object, uint64_t end_group) {
- QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
- << "Canceled track got subscription";
- // The end object might be unknown.
- auto it = max_object_ids_.find(end_group);
- if (end_group >= next_sequence_.group) {
- // Group is not fully published yet, so end object is unknown.
- windows_.AddWindow(subscribe_id, next_sequence_, start_group,
- start_object, end_group, UINT64_MAX);
- return;
- }
- windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object,
- end_group, it->second);
- }
+ uint64_t start_object, uint64_t end_group);
void AddWindow(uint64_t subscribe_id, uint64_t start_group,
uint64_t start_object, uint64_t end_group,
- uint64_t end_object) {
- QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_)
- << "Canceled track got subscription";
- windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object,
- end_group, end_object);
- }
+ uint64_t end_object);
void DeleteWindow(uint64_t subscribe_id) {
windows_.RemoveWindow(subscribe_id);
@@ -110,34 +88,7 @@
// Updates next_sequence_ if |sequence| is larger. Updates max_object_ids_
// if relevant.
- void SentSequence(FullSequence sequence, MoqtObjectStatus status) {
- QUICHE_DCHECK(max_object_ids_.find(sequence.group) ==
- max_object_ids_.end() ||
- max_object_ids_[sequence.group] < sequence.object);
- switch (status) {
- case MoqtObjectStatus::kNormal:
- case MoqtObjectStatus::kObjectDoesNotExist:
- if (next_sequence_ <= sequence) {
- next_sequence_ = sequence.next();
- }
- break;
- case MoqtObjectStatus::kGroupDoesNotExist:
- max_object_ids_[sequence.group] = 0;
- break;
- case MoqtObjectStatus::kEndOfGroup:
- max_object_ids_[sequence.group] = sequence.object;
- if (next_sequence_ <= sequence) {
- next_sequence_ = FullSequence(sequence.group + 1, 0);
- }
- break;
- case MoqtObjectStatus::kEndOfTrack:
- max_object_ids_[sequence.group] = sequence.object;
- break;
- default:
- QUICHE_DCHECK(false);
- return;
- }
- }
+ void SentSequence(FullSequence sequence, MoqtObjectStatus status);
bool HasSubscriber() const { return !windows_.IsEmpty(); }
@@ -213,13 +164,7 @@
// forwarding preference to the value indicated by the incoming encoding.
// Otherwise, returns true if the incoming object does not violate the rule
// that the preference is consistent.
- bool CheckForwardingPreference(MoqtForwardingPreference preference) {
- if (forwarding_preference_.has_value()) {
- return forwarding_preference_.value() == preference;
- }
- forwarding_preference_ = preference;
- return true;
- }
+ bool CheckForwardingPreference(MoqtForwardingPreference preference);
private:
// TODO: There is no accounting for the number of outstanding subscribes,