Skip to content

Commit c8ff6dc

Browse files
martindukecopybara-github
authored andcommitted
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
1 parent 1ff5238 commit c8ff6dc

5 files changed

Lines changed: 102 additions & 108 deletions

File tree

quiche/quic/moqt/moqt_messages.cc

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,17 @@
44

55
#include "quiche/quic/moqt/moqt_messages.h"
66

7-
#include <array>
87
#include <cstdint>
98
#include <string>
109

11-
#include "absl/algorithm/container.h"
1210
#include "absl/strings/str_cat.h"
13-
#include "quiche/quic/core/quic_time.h"
14-
#include "quiche/quic/core/quic_types.h"
1511
#include "quiche/quic/moqt/moqt_error.h"
1612
#include "quiche/quic/moqt/moqt_key_value_pair.h"
13+
#include "quiche/quic/moqt/moqt_types.h"
1714
#include "quiche/quic/platform/api/quic_bug_tracker.h"
1815

1916
namespace moqt {
2017

21-
void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
22-
if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
23-
out.path = path;
24-
out.authority = authority;
25-
}
26-
if (max_request_id != kDefaultMaxRequestId) {
27-
out.max_request_id = max_request_id;
28-
}
29-
if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
30-
out.max_auth_token_cache_size = max_auth_token_cache_size;
31-
}
32-
if (support_object_acks != kDefaultSupportObjectAcks) {
33-
out.support_object_acks = support_object_acks;
34-
}
35-
if (!moqt_implementation.empty()) {
36-
out.moqt_implementation = moqt_implementation;
37-
}
38-
for (const AuthToken& token : authorization_token) {
39-
out.authorization_tokens.push_back(token);
40-
}
41-
}
42-
4318
MoqtObjectStatus IntegerToObjectStatus(uint64_t integer) {
4419
if (integer >=
4520
static_cast<uint64_t>(MoqtObjectStatus::kInvalidObjectStatus)) {

quiche/quic/moqt/moqt_messages.h

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,14 @@
77
#ifndef QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
88
#define QUICHE_QUIC_MOQT_MOQT_MESSAGES_H_
99

10-
#include <algorithm>
11-
#include <bit>
1210
#include <cstddef>
1311
#include <cstdint>
1412
#include <initializer_list>
1513
#include <optional>
1614
#include <string>
17-
#include <utility>
1815
#include <variant>
19-
#include <vector>
2016

21-
#include "absl/strings/string_view.h"
2217
#include "quiche/quic/core/quic_time.h"
23-
#include "quiche/quic/core/quic_types.h"
2418
#include "quiche/quic/core/quic_versions.h"
2519
#include "quiche/quic/moqt/moqt_error.h"
2620
#include "quiche/quic/moqt/moqt_key_value_pair.h"
@@ -29,61 +23,13 @@
2923
#include "quiche/quic/moqt/moqt_priority.h"
3024
#include "quiche/quic/moqt/moqt_types.h"
3125
#include "quiche/common/platform/api/quiche_export.h"
32-
#include "quiche/common/quiche_endian.h"
3326

3427
namespace moqt {
3528

3629
inline constexpr quic::ParsedQuicVersionVector GetMoqtSupportedQuicVersions() {
3730
return quic::ParsedQuicVersionVector{quic::ParsedQuicVersion::RFCv1()};
3831
}
3932

40-
inline constexpr absl::string_view kDraft16 = "moqt-16";
41-
inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
42-
inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
43-
44-
inline constexpr absl::string_view kImplementationName =
45-
"Google QUICHE MOQT draft 16";
46-
inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
47-
struct QUICHE_EXPORT MoqtSessionParameters {
48-
// TODO: support multiple versions.
49-
MoqtSessionParameters() = default;
50-
explicit MoqtSessionParameters(quic::Perspective perspective)
51-
: perspective(perspective), using_webtrans(true) {}
52-
MoqtSessionParameters(quic::Perspective perspective, std::string path,
53-
std::string authority)
54-
: perspective(perspective),
55-
using_webtrans(false),
56-
path(std::move(path)),
57-
authority(std::move(authority)) {}
58-
MoqtSessionParameters(quic::Perspective perspective, std::string path,
59-
std::string authority, uint64_t max_request_id)
60-
: perspective(perspective),
61-
using_webtrans(true),
62-
path(std::move(path)),
63-
max_request_id(max_request_id),
64-
authority(std::move(authority)) {}
65-
MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
66-
: perspective(perspective), max_request_id(max_request_id) {}
67-
bool operator==(const MoqtSessionParameters& other) const = default;
68-
69-
std::string version = std::string(kDefaultMoqtVersion);
70-
bool deliver_partial_objects = false;
71-
quic::Perspective perspective = quic::Perspective::IS_SERVER;
72-
bool using_webtrans = true;
73-
std::string path;
74-
uint64_t max_request_id = kDefaultInitialMaxRequestId;
75-
uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
76-
bool support_object_acks = false;
77-
// TODO(martinduke): Turn authorization_token into structured data.
78-
std::vector<AuthToken> authorization_token;
79-
std::string authority;
80-
std::string moqt_implementation;
81-
82-
// Takes the relevant fields from this object and populates |out| if not the
83-
// protocol default value.
84-
void ToSetupParameters(SetupParameters& out) const;
85-
};
86-
8733
// The maximum length of a message, excluding any OBJECT payload. This prevents
8834
// DoS attack via forcing the parser to buffer a large message (OBJECT payloads
8935
// are not buffered by the parser).
@@ -279,25 +225,6 @@ enum class QUICHE_EXPORT MoqtMessageType : uint64_t {
279225
kObjectAck = 0x3184,
280226
};
281227

282-
// A tuple uniquely identifying a WebTransport data stream associated with a
283-
// subscription. By convention, if a DataStreamIndex is necessary for a datagram
284-
// track, `subgroup` is set to zero.
285-
struct DataStreamIndex {
286-
uint64_t group = 0;
287-
uint64_t subgroup = 0;
288-
289-
DataStreamIndex() = default;
290-
DataStreamIndex(uint64_t group, uint64_t subgroup)
291-
: group(group), subgroup(subgroup) {}
292-
293-
auto operator<=>(const DataStreamIndex&) const = default;
294-
295-
template <typename H>
296-
friend H AbslHashValue(H h, const DataStreamIndex& index) {
297-
return H::combine(std::move(h), index.group, index.subgroup);
298-
}
299-
};
300-
301228
struct SubgroupPriority {
302229
uint8_t publisher_priority = 0xf0;
303230
uint64_t subgroup_id = 0;
@@ -506,13 +433,6 @@ struct QUICHE_EXPORT MoqtGoAway {
506433
std::string new_session_uri;
507434
};
508435

509-
enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
510-
kPublish = 0x00,
511-
kNamespace = 0x01,
512-
kBoth = 0x02,
513-
};
514-
static constexpr uint64_t kMaxSubscribeOption = 0x02;
515-
516436
struct QUICHE_EXPORT MoqtSubscribeNamespace {
517437
uint64_t request_id;
518438
TrackNamespace track_namespace_prefix;

quiche/quic/moqt/moqt_session.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2594,4 +2594,26 @@ void MoqtSession::PublishedSubscription::ProcessObjectAck(
25942594
message.delta_from_deadline);
25952595
}
25962596

2597+
void MoqtSessionParameters::ToSetupParameters(SetupParameters& out) const {
2598+
if (perspective == quic::Perspective::IS_CLIENT && !using_webtrans) {
2599+
out.path = path;
2600+
out.authority = authority;
2601+
}
2602+
if (max_request_id != kDefaultMaxRequestId) {
2603+
out.max_request_id = max_request_id;
2604+
}
2605+
if (max_auth_token_cache_size != kDefaultMaxAuthTokenCacheSize) {
2606+
out.max_auth_token_cache_size = max_auth_token_cache_size;
2607+
}
2608+
if (support_object_acks != kDefaultSupportObjectAcks) {
2609+
out.support_object_acks = support_object_acks;
2610+
}
2611+
if (!moqt_implementation.empty()) {
2612+
out.moqt_implementation = moqt_implementation;
2613+
}
2614+
for (const AuthToken& token : authorization_token) {
2615+
out.authorization_tokens.push_back(token);
2616+
}
2617+
}
2618+
25972619
} // namespace moqt

quiche/quic/moqt/moqt_session_interface.h

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,74 @@
88
#include <cstdint>
99
#include <memory>
1010
#include <optional>
11+
#include <string>
12+
#include <utility>
1113
#include <variant>
14+
#include <vector>
1215

1316
#include "absl/strings/string_view.h"
1417
#include "quiche/quic/core/quic_time.h"
18+
#include "quiche/quic/core/quic_types.h"
1519
#include "quiche/quic/moqt/moqt_error.h"
1620
#include "quiche/quic/moqt/moqt_fetch_task.h"
1721
#include "quiche/quic/moqt/moqt_key_value_pair.h"
18-
#include "quiche/quic/moqt/moqt_messages.h"
1922
#include "quiche/quic/moqt/moqt_names.h"
2023
#include "quiche/quic/moqt/moqt_object.h"
21-
#include "quiche/quic/moqt/moqt_priority.h"
2224
#include "quiche/quic/moqt/moqt_session_callbacks.h"
25+
#include "quiche/quic/moqt/moqt_types.h"
26+
#include "quiche/common/platform/api/quiche_export.h"
2327
#include "quiche/common/quiche_callbacks.h"
2428
#include "quiche/common/quiche_weak_ptr.h"
2529

2630
namespace moqt {
2731

32+
inline constexpr absl::string_view kDraft16 = "moqt-16";
33+
inline constexpr absl::string_view kDefaultMoqtVersion = kDraft16;
34+
inline constexpr absl::string_view kUnrecognizedVersionForTests = "moqt-15";
35+
36+
inline constexpr absl::string_view kImplementationName =
37+
"Google QUICHE MOQT draft 16";
38+
inline constexpr uint64_t kDefaultInitialMaxRequestId = 100;
39+
struct QUICHE_EXPORT MoqtSessionParameters {
40+
// TODO: support multiple versions.
41+
MoqtSessionParameters() = default;
42+
explicit MoqtSessionParameters(quic::Perspective perspective)
43+
: perspective(perspective), using_webtrans(true) {}
44+
MoqtSessionParameters(quic::Perspective perspective, std::string path,
45+
std::string authority)
46+
: perspective(perspective),
47+
using_webtrans(false),
48+
path(std::move(path)),
49+
authority(std::move(authority)) {}
50+
MoqtSessionParameters(quic::Perspective perspective, std::string path,
51+
std::string authority, uint64_t max_request_id)
52+
: perspective(perspective),
53+
using_webtrans(true),
54+
path(std::move(path)),
55+
max_request_id(max_request_id),
56+
authority(std::move(authority)) {}
57+
MoqtSessionParameters(quic::Perspective perspective, uint64_t max_request_id)
58+
: perspective(perspective), max_request_id(max_request_id) {}
59+
bool operator==(const MoqtSessionParameters& other) const = default;
60+
61+
std::string version = std::string(kDefaultMoqtVersion);
62+
bool deliver_partial_objects = false;
63+
quic::Perspective perspective = quic::Perspective::IS_SERVER;
64+
bool using_webtrans = true;
65+
std::string path;
66+
uint64_t max_request_id = kDefaultInitialMaxRequestId;
67+
uint64_t max_auth_token_cache_size = kDefaultMaxAuthTokenCacheSize;
68+
bool support_object_acks = false;
69+
// TODO(martinduke): Turn authorization_token into structured data.
70+
std::vector<AuthToken> authorization_token;
71+
std::string authority;
72+
std::string moqt_implementation;
73+
74+
// Takes the relevant fields from this object and populates |out| if not the
75+
// protocol default value.
76+
void ToSetupParameters(SetupParameters& out) const;
77+
};
78+
2879
using MoqtObjectAckFunction =
2980
quiche::MultiUseCallback<void(uint64_t group_id, uint64_t object_id,
3081
quic::QuicTimeDelta delta_from_deadline)>;

quiche/quic/moqt/moqt_types.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,32 @@ enum class QUICHE_EXPORT MoqtObjectStatus : uint64_t {
6060
kInvalidObjectStatus = 0x5,
6161
};
6262

63+
// A tuple uniquely identifying a WebTransport data stream associated with a
64+
// subscription. By convention, if a DataStreamIndex is necessary for a datagram
65+
// track, `subgroup` is set to zero.
66+
struct DataStreamIndex {
67+
uint64_t group = 0;
68+
uint64_t subgroup = 0;
69+
70+
DataStreamIndex() = default;
71+
DataStreamIndex(uint64_t group, uint64_t subgroup)
72+
: group(group), subgroup(subgroup) {}
73+
74+
auto operator<=>(const DataStreamIndex&) const = default;
75+
76+
template <typename H>
77+
friend H AbslHashValue(H h, const DataStreamIndex& index) {
78+
return H::combine(std::move(h), index.group, index.subgroup);
79+
}
80+
};
81+
82+
enum class QUICHE_EXPORT SubscribeNamespaceOption : uint64_t {
83+
kPublish = 0x00,
84+
kNamespace = 0x01,
85+
kBoth = 0x02,
86+
};
87+
static constexpr uint64_t kMaxSubscribeOption = 0x02;
88+
6389
} // namespace moqt
6490

6591
#endif // QUICHE_QUIC_MOQT_MOQT_TYPES_H_

0 commit comments

Comments
 (0)