Skip to content

Commit b1cedb9

Browse files
sandarshmeta-codesync[bot]
authored andcommitted
Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL}
Summary: For draft-16, Unannounce and AnnounceCancel messages now use RequestID instead of TrackNamespace, with version-gated parsing/writing and separate maps for v15 vs v16+. Reviewed By: sharmafb Differential Revision: D90817300 fbshipit-source-id: 1730cbd2928da9599a6b65712f19728a2f254fed
1 parent e8a7208 commit b1cedb9

6 files changed

Lines changed: 326 additions & 125 deletions

File tree

moxygen/MoQFramer.cpp

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,11 +2273,25 @@ folly::Expected<Unannounce, ErrorCode> MoQFrameParser::parseUnannounce(
22732273
folly::io::Cursor& cursor,
22742274
size_t length) const noexcept {
22752275
Unannounce unannounce;
2276-
auto res = parseFixedTuple(cursor, length);
2277-
if (!res) {
2278-
return folly::makeUnexpected(res.error());
2276+
2277+
if (getDraftMajorVersion(*version_) >= 16) {
2278+
// v16+: Parse Request ID
2279+
auto requestID = quic::follyutils::decodeQuicInteger(cursor, length);
2280+
if (!requestID) {
2281+
XLOG(DBG4) << "parseUnannounce: UNDERFLOW on requestID";
2282+
return folly::makeUnexpected(ErrorCode::PARSE_UNDERFLOW);
2283+
}
2284+
length -= requestID->second;
2285+
unannounce.requestID = RequestID(requestID->first);
2286+
} else {
2287+
// v15 and below: Parse TrackNamespace
2288+
auto res = parseFixedTuple(cursor, length);
2289+
if (!res) {
2290+
return folly::makeUnexpected(res.error());
2291+
}
2292+
unannounce.trackNamespace = TrackNamespace(std::move(res.value()));
22792293
}
2280-
unannounce.trackNamespace = TrackNamespace(std::move(res.value()));
2294+
22812295
if (length > 0) {
22822296
return folly::makeUnexpected(ErrorCode::PROTOCOL_VIOLATION);
22832297
}
@@ -2288,11 +2302,24 @@ folly::Expected<AnnounceCancel, ErrorCode> MoQFrameParser::parseAnnounceCancel(
22882302
folly::io::Cursor& cursor,
22892303
size_t length) const noexcept {
22902304
AnnounceCancel announceCancel;
2291-
auto res = parseFixedTuple(cursor, length);
2292-
if (!res) {
2293-
return folly::makeUnexpected(res.error());
2305+
2306+
if (getDraftMajorVersion(*version_) >= 16) {
2307+
// v16+: Parse Request ID
2308+
auto requestID = quic::follyutils::decodeQuicInteger(cursor, length);
2309+
if (!requestID) {
2310+
XLOG(DBG4) << "parseAnnounceCancel: UNDERFLOW on requestID";
2311+
return folly::makeUnexpected(ErrorCode::PARSE_UNDERFLOW);
2312+
}
2313+
length -= requestID->second;
2314+
announceCancel.requestID = RequestID(requestID->first);
2315+
} else {
2316+
// v15 and below: Parse TrackNamespace
2317+
auto res = parseFixedTuple(cursor, length);
2318+
if (!res) {
2319+
return folly::makeUnexpected(res.error());
2320+
}
2321+
announceCancel.trackNamespace = TrackNamespace(std::move(res.value()));
22942322
}
2295-
announceCancel.trackNamespace = TrackNamespace(std::move(res.value()));
22962323

22972324
auto errorCode = quic::follyutils::decodeQuicInteger(cursor, length);
22982325
if (!errorCode) {
@@ -4637,7 +4664,17 @@ WriteResult MoQFrameWriter::writeUnannounce(
46374664
size_t size = 0;
46384665
bool error = false;
46394666
auto sizePtr = writeFrameHeader(writeBuf, FrameType::UNANNOUNCE, error);
4640-
writeTrackNamespace(writeBuf, unannounce.trackNamespace, size, error);
4667+
4668+
if (getDraftMajorVersion(*version_) >= 16) {
4669+
// v16+: Write Request ID
4670+
CHECK(unannounce.requestID.hasValue())
4671+
<< "RequestID required for v16+ Unannounce";
4672+
writeVarint(writeBuf, unannounce.requestID->value, size, error);
4673+
} else {
4674+
// v15 and below: Write TrackNamespace
4675+
writeTrackNamespace(writeBuf, unannounce.trackNamespace, size, error);
4676+
}
4677+
46414678
writeSize(sizePtr, size, error, *version_);
46424679
if (error) {
46434680
return folly::makeUnexpected(quic::TransportErrorCode::INTERNAL_ERROR);
@@ -4653,7 +4690,17 @@ WriteResult MoQFrameWriter::writeAnnounceCancel(
46534690
size_t size = 0;
46544691
bool error = false;
46554692
auto sizePtr = writeFrameHeader(writeBuf, FrameType::ANNOUNCE_CANCEL, error);
4656-
writeTrackNamespace(writeBuf, announceCancel.trackNamespace, size, error);
4693+
4694+
if (getDraftMajorVersion(*version_) >= 16) {
4695+
// v16+: Write Request ID
4696+
CHECK(announceCancel.requestID.hasValue())
4697+
<< "RequestID required for v16+ AnnounceCancel";
4698+
writeVarint(writeBuf, announceCancel.requestID->value, size, error);
4699+
} else {
4700+
// v15 and below: Write TrackNamespace
4701+
writeTrackNamespace(writeBuf, announceCancel.trackNamespace, size, error);
4702+
}
4703+
46574704
writeVarint(
46584705
writeBuf, folly::to_underlying(announceCancel.errorCode), size, error);
46594706
writeFixedString(writeBuf, announceCancel.reasonPhrase, size, error);

moxygen/MoQFramer.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,11 +1085,13 @@ struct Announce {
10851085
// AnnounceError is now an alias for RequestError - see below
10861086

10871087
struct Unannounce {
1088-
TrackNamespace trackNamespace;
1088+
TrackNamespace trackNamespace; // Used in v15 and below
1089+
folly::Optional<RequestID> requestID; // Used in v16+
10891090
};
10901091

10911092
struct AnnounceCancel {
1092-
TrackNamespace trackNamespace;
1093+
TrackNamespace trackNamespace; // Used in v15 and below
1094+
folly::Optional<RequestID> requestID; // Used in v16+
10931095
RequestErrorCode errorCode;
10941096
std::string reasonPhrase;
10951097
};

0 commit comments

Comments
 (0)