Skip to content

Commit c8e87da

Browse files
Aman Sharmameta-codesync[bot]
authored andcommitted
Update MOQTFetch* structures
Summary: In this commit, I'm updating the MOQTFetch, MOQTFetchOk, MOQTFetchError, and MOQTFetchCancel structures to be in line with the specification. Reviewed By: sandarsh Differential Revision: D88694518 fbshipit-source-id: 7efabc89b319ce414204052dff3a0aeb5dd8d44d
1 parent 8d15b49 commit c8e87da

File tree

3 files changed

+115
-86
lines changed

3 files changed

+115
-86
lines changed

moxygen/mlog/MLogTypes.cpp

Lines changed: 60 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -147,51 +147,62 @@ folly::dynamic MOQTUnsubscribe::toDynamic() const {
147147
return obj;
148148
}
149149

150-
folly::dynamic MOQTFetch::toDynamic() const {
150+
folly::dynamic MOQTStandaloneFetch::toDynamic() const {
151151
folly::dynamic obj = folly::dynamic::object;
152-
obj["type"] = type;
153-
obj["subscribeId"] = std::to_string(subscribeId);
154-
obj["subscriberPriority"] = std::to_string(subscriberPriority);
155-
obj["groupOrder"] = std::to_string(groupOrder);
156-
obj["fetchType"] = std::to_string(fetchType);
157-
auto trackNamespaceStr = parseTrackNamespace(trackNamespace);
158-
obj["trackNamespace"] =
159-
folly::dynamic::array(trackNamespaceStr.begin(), trackNamespaceStr.end());
160-
if (trackName.hasValue()) {
161-
obj["trackName"] = parseTrackName(trackName.value());
162-
}
163-
if (startGroup.hasValue()) {
164-
obj["startGroup"] = std::to_string(startGroup.value());
165-
}
166-
if (startObject.hasValue()) {
167-
obj["startObject"] = std::to_string(startObject.value());
168-
}
169-
if (endGroup.hasValue()) {
170-
obj["endGroup"] = std::to_string(endGroup.value());
152+
std::vector<std::string> trackNamespaceStr;
153+
for (const auto& ns : trackNamespace) {
154+
if (ns.type == MOQTByteStringType::STRING_VALUE) {
155+
trackNamespaceStr.push_back(ns.value);
156+
}
171157
}
172-
if (endObject.hasValue()) {
173-
obj["endObject"] = std::to_string(endObject.value());
158+
obj["track_namespace"] =
159+
folly::dynamic::array(trackNamespaceStr.begin(), trackNamespaceStr.end());
160+
if (trackName.type == MOQTByteStringType::STRING_VALUE) {
161+
obj["track_name"] = trackName.value;
174162
}
175-
if (joiningSubscribeId.hasValue()) {
176-
obj["joiningSubscribeId"] = std::to_string(joiningSubscribeId.value());
163+
obj["start_location"] = startLocation.toDynamic();
164+
obj["end_location"] = endLocation.toDynamic();
165+
return obj;
166+
}
167+
168+
folly::dynamic MOQTJoiningFetch::toDynamic() const {
169+
folly::dynamic obj = folly::dynamic::object;
170+
obj["joining_request_id"] = joiningRequestId;
171+
obj["joining_start"] = joiningStart;
172+
return obj;
173+
}
174+
175+
folly::dynamic MOQTFetch::toDynamic() const {
176+
folly::dynamic obj = folly::dynamic::object;
177+
obj["type"] = type;
178+
obj["request_id"] = requestId;
179+
obj["subscriber_priority"] = subscriberPriority;
180+
obj["group_order"] = groupOrder;
181+
obj["fetch_type"] = fetchType;
182+
183+
if (standaloneFetch.hasValue()) {
184+
obj["standalone_fetch"] = standaloneFetch->toDynamic();
177185
}
178-
if (precedingGroupOffset.hasValue()) {
179-
obj["precedingGroupOffset"] = std::to_string(precedingGroupOffset.value());
186+
187+
if (joiningFetch.hasValue()) {
188+
obj["joining_fetch"] = joiningFetch->toDynamic();
180189
}
181-
obj["numberOfParameters"] = std::to_string(numberOfParameters);
182-
std::vector<folly::dynamic> paramObjects;
183-
paramObjects.reserve(parameters.size());
184-
for (auto& param : parameters) {
185-
paramObjects.push_back(param.toDynamic());
190+
191+
if (!parameters.empty()) {
192+
std::vector<folly::dynamic> paramObjects;
193+
paramObjects.reserve(parameters.size());
194+
for (auto& param : parameters) {
195+
paramObjects.push_back(param.toDynamic());
196+
}
197+
obj["parameters"] = folly::dynamic::array(paramObjects);
186198
}
187-
obj["parameters"] = folly::dynamic::array(paramObjects);
188199
return obj;
189200
}
190201

191202
folly::dynamic MOQTFetchCancel::toDynamic() const {
192203
folly::dynamic obj = folly::dynamic::object;
193204
obj["type"] = type;
194-
obj["subscribeId"] = std::to_string(subscribeId);
205+
obj["request_id"] = requestId;
195206
return obj;
196207
}
197208

@@ -326,31 +337,33 @@ folly::dynamic MOQTSubscribeError::toDynamic() const {
326337
folly::dynamic MOQTFetchOk::toDynamic() const {
327338
folly::dynamic obj = folly::dynamic::object;
328339
obj["type"] = type;
329-
obj["subscribeId"] = std::to_string(subscribeId);
330-
obj["groupOrder"] = std::to_string(groupOrder);
331-
obj["endOfTrack"] = std::to_string(endOfTrack);
332-
obj["largestGroupId"] = std::to_string(largestGroupId);
333-
obj["largestObjectId"] = std::to_string(largestObjectId);
334-
obj["numberOfParameters"] = std::to_string(numberOfParameters);
335-
std::vector<folly::dynamic> paramObjects;
336-
paramObjects.reserve(subscribeParameters.size());
337-
for (auto& param : subscribeParameters) {
338-
paramObjects.push_back(param.toDynamic());
340+
obj["request_id"] = requestId;
341+
obj["group_order"] = groupOrder;
342+
obj["end_of_track"] = endOfTrack;
343+
obj["end_location"] = endLocation.toDynamic();
344+
obj["number_of_parameters"] = numberOfParameters;
345+
346+
if (numberOfParameters > 0) {
347+
std::vector<folly::dynamic> paramObjects;
348+
paramObjects.reserve(parameters.size());
349+
for (auto& param : parameters) {
350+
paramObjects.push_back(param.toDynamic());
351+
}
352+
obj["parameters"] = folly::dynamic::array(paramObjects);
339353
}
340-
obj["subscribeParameters"] = folly::dynamic::array(paramObjects);
341354
return obj;
342355
}
343356

344357
folly::dynamic MOQTFetchError::toDynamic() const {
345358
folly::dynamic obj = folly::dynamic::object;
346359
obj["type"] = type;
347-
obj["subscribeId"] = std::to_string(subscribeId);
348-
obj["errorCode"] = std::to_string(errorCode);
360+
obj["request_id"] = requestId;
361+
obj["error_code"] = errorCode;
349362
if (reason.hasValue()) {
350363
obj["reason"] = reason.value();
351364
}
352365
if (reasonBytes.hasValue()) {
353-
obj["reasonBytes"] = reasonBytes.value();
366+
obj["reason_bytes"] = reasonBytes.value();
354367
}
355368
return obj;
356369
}

moxygen/mlog/MLogTypes.h

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -180,25 +180,34 @@ class MOQTUnsubscribe : public MOQTBaseControlMessage {
180180
uint64_t subscribeId{0};
181181
};
182182

183+
struct MOQTStandaloneFetch {
184+
std::vector<MOQTByteString> trackNamespace;
185+
MOQTByteString trackName;
186+
MOQTLocation startLocation;
187+
MOQTLocation endLocation;
188+
189+
folly::dynamic toDynamic() const;
190+
};
191+
192+
struct MOQTJoiningFetch {
193+
uint64_t joiningRequestId{0};
194+
uint64_t joiningStart{0};
195+
196+
folly::dynamic toDynamic() const;
197+
};
198+
183199
class MOQTFetch : public MOQTBaseControlMessage {
184200
public:
185201
MOQTFetch() {
186202
type = "fetch";
187203
}
188204
folly::dynamic toDynamic() const override;
189-
uint64_t subscribeId{0};
205+
uint64_t requestId{0};
190206
uint8_t subscriberPriority{};
191207
uint8_t groupOrder{};
192-
uint64_t fetchType{};
193-
std::vector<MOQTByteString> trackNamespace;
194-
folly::Optional<MOQTByteString> trackName;
195-
folly::Optional<uint64_t> startGroup;
196-
folly::Optional<uint64_t> startObject;
197-
folly::Optional<uint64_t> endGroup;
198-
folly::Optional<uint64_t> endObject;
199-
folly::Optional<uint64_t> joiningSubscribeId;
200-
folly::Optional<uint64_t> precedingGroupOffset;
201-
uint64_t numberOfParameters{};
208+
std::string fetchType;
209+
folly::Optional<MOQTStandaloneFetch> standaloneFetch;
210+
folly::Optional<MOQTJoiningFetch> joiningFetch;
202211
std::vector<MOQTParameter> parameters;
203212
};
204213

@@ -208,7 +217,7 @@ class MOQTFetchCancel : public MOQTBaseControlMessage {
208217
type = "fetch_cancel";
209218
}
210219
folly::dynamic toDynamic() const override;
211-
uint64_t subscribeId{0};
220+
uint64_t requestId{0};
212221
};
213222

214223
class MOQTAnnounceOk : public MOQTBaseControlMessage {
@@ -318,13 +327,12 @@ class MOQTFetchOk : public MOQTBaseControlMessage {
318327
type = "fetch_ok";
319328
}
320329
folly::dynamic toDynamic() const override;
321-
uint64_t subscribeId{0};
330+
uint64_t requestId{0};
322331
uint8_t groupOrder{};
323332
uint8_t endOfTrack{};
324-
uint64_t largestGroupId{};
325-
uint64_t largestObjectId{};
333+
MOQTLocation endLocation;
326334
uint64_t numberOfParameters{};
327-
std::vector<MOQTParameter> subscribeParameters;
335+
std::vector<MOQTParameter> parameters;
328336
};
329337

330338
class MOQTFetchError : public MOQTBaseControlMessage {
@@ -333,7 +341,7 @@ class MOQTFetchError : public MOQTBaseControlMessage {
333341
type = "fetch_error";
334342
}
335343
folly::dynamic toDynamic() const override;
336-
uint64_t subscribeId{0};
344+
uint64_t requestId{0};
337345
uint64_t errorCode{};
338346
folly::Optional<std::string> reason;
339347
folly::Optional<std::string> reasonBytes;

moxygen/mlog/MLogger.cpp

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -281,33 +281,41 @@ void MLogger::logFetch(
281281
const MOQTByteStringType& type,
282282
ControlMessageType controlType) {
283283
auto baseMsg = std::make_unique<MOQTFetch>();
284-
baseMsg->subscribeId = req.requestID.value;
284+
baseMsg->requestId = req.requestID.value;
285285
baseMsg->subscriberPriority = req.priority;
286286
baseMsg->groupOrder = static_cast<uint8_t>(req.groupOrder);
287287

288288
auto [standalone, joining] = fetchType(req);
289289
if (joining) {
290-
baseMsg->fetchType = static_cast<uint64_t>(joining->fetchType);
291-
baseMsg->joiningSubscribeId =
290+
if (joining->fetchType == FetchType::RELATIVE_JOINING) {
291+
baseMsg->fetchType = "relative_joining";
292+
} else {
293+
baseMsg->fetchType = "absolute_joining";
294+
}
295+
MOQTJoiningFetch joiningFetchMsg;
296+
joiningFetchMsg.joiningRequestId =
292297
std::get<JoiningFetch>(req.args).joiningRequestID.value;
293-
baseMsg->precedingGroupOffset =
298+
joiningFetchMsg.joiningStart =
294299
std::get<JoiningFetch>(req.args).joiningStart;
300+
baseMsg->joiningFetch = std::move(joiningFetchMsg);
295301
} else if (standalone) {
296-
baseMsg->fetchType = static_cast<uint64_t>(FetchType::STANDALONE);
297-
baseMsg->startGroup = std::get<StandaloneFetch>(req.args).start.group;
298-
baseMsg->startObject = std::get<StandaloneFetch>(req.args).start.object;
299-
baseMsg->endGroup = std::get<StandaloneFetch>(req.args).end.group;
300-
baseMsg->endObject = std::get<StandaloneFetch>(req.args).end.object;
301-
}
302-
303-
baseMsg->trackNamespace = convertTrackNamespaceToByteStringFormat(
304-
req.fullTrackName.trackNamespace.trackNamespace, type);
305-
if (req.fullTrackName.trackName != "") {
306-
baseMsg->trackName =
302+
baseMsg->fetchType = "standalone";
303+
MOQTStandaloneFetch standaloneFetchMsg;
304+
standaloneFetchMsg.trackNamespace = convertTrackNamespaceToByteStringFormat(
305+
req.fullTrackName.trackNamespace.trackNamespace, type);
306+
standaloneFetchMsg.trackName =
307307
convertTrackNameToByteStringFormat(req.fullTrackName.trackName);
308+
standaloneFetchMsg.startLocation.group =
309+
std::get<StandaloneFetch>(req.args).start.group;
310+
standaloneFetchMsg.startLocation.object =
311+
std::get<StandaloneFetch>(req.args).start.object;
312+
standaloneFetchMsg.endLocation.group =
313+
std::get<StandaloneFetch>(req.args).end.group;
314+
standaloneFetchMsg.endLocation.object =
315+
std::get<StandaloneFetch>(req.args).end.object;
316+
baseMsg->standaloneFetch = std::move(standaloneFetchMsg);
308317
}
309318

310-
baseMsg->numberOfParameters = req.params.size();
311319
baseMsg->parameters = convertTrackParamsToMoQTParams(req.params);
312320

313321
logControlMessage(
@@ -318,7 +326,7 @@ void MLogger::logFetchCancel(
318326
const FetchCancel& req,
319327
ControlMessageType controlType) {
320328
auto baseMsg = std::make_unique<MOQTFetchCancel>();
321-
baseMsg->subscribeId = req.requestID.value;
329+
baseMsg->requestId = req.requestID.value;
322330

323331
logControlMessage(
324332
controlType, kFirstBidiStreamId, folly::none, std::move(baseMsg));
@@ -473,13 +481,13 @@ void MLogger::logSubscribeError(
473481

474482
void MLogger::logFetchOk(const FetchOk& req, ControlMessageType controlType) {
475483
auto baseMsg = std::make_unique<MOQTFetchOk>();
476-
baseMsg->subscribeId = req.requestID.value;
484+
baseMsg->requestId = req.requestID.value;
477485
baseMsg->groupOrder = static_cast<uint8_t>(req.groupOrder);
478486
baseMsg->endOfTrack = req.endOfTrack;
479-
baseMsg->largestGroupId = req.endLocation.group;
480-
baseMsg->largestObjectId = req.endLocation.object;
487+
baseMsg->endLocation.group = req.endLocation.group;
488+
baseMsg->endLocation.object = req.endLocation.object;
481489
baseMsg->numberOfParameters = req.params.size();
482-
baseMsg->subscribeParameters = convertTrackParamsToMoQTParams(req.params);
490+
baseMsg->parameters = convertTrackParamsToMoQTParams(req.params);
483491

484492
logControlMessage(
485493
controlType, kFirstBidiStreamId, folly::none, std::move(baseMsg));
@@ -489,7 +497,7 @@ void MLogger::logFetchError(
489497
const FetchError& req,
490498
ControlMessageType controlType) {
491499
auto baseMsg = std::make_unique<MOQTFetchError>();
492-
baseMsg->subscribeId = req.requestID.value;
500+
baseMsg->requestId = req.requestID.value;
493501
baseMsg->errorCode = static_cast<uint64_t>(req.errorCode);
494502

495503
if (isHexstring(req.reasonPhrase)) {

0 commit comments

Comments
 (0)