1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00

Add reliable reset functionality to QuicWriteCodec

Summary: In this diff, I'm writing functionality to enable us to write RESET_STREAM_AT frames. You can find the format of the RST_STREAM_AT frame in the [RFC](https://datatracker.ietf.org/doc/html/draft-ietf-quic-reliable-stream-reset-06#name-reset_stream_at-frame).

Reviewed By: jbeshay

Differential Revision: D64907958

fbshipit-source-id: 55e82278ebd0649dc33c82b472be80893af02509
This commit is contained in:
Aman Sharma
2024-11-18 13:06:34 -08:00
committed by Facebook GitHub Bot
parent 67794c5022
commit 568f19c17d
4 changed files with 58 additions and 7 deletions

View File

@@ -814,18 +814,28 @@ size_t writeFrame(QuicWriteFrame&& frame, PacketBuilderInterface& builder) {
}
case QuicWriteFrame::Type::RstStreamFrame: {
RstStreamFrame& rstStreamFrame = *frame.asRstStreamFrame();
QuicInteger intFrameType(static_cast<uint8_t>(FrameType::RST_STREAM));
QuicInteger intFrameType(static_cast<uint8_t>(
rstStreamFrame.reliableSize ? FrameType::RST_STREAM_AT
: FrameType::RST_STREAM));
QuicInteger streamId(rstStreamFrame.streamId);
QuicInteger offset(rstStreamFrame.finalSize);
QuicInteger finalSize(rstStreamFrame.finalSize);
QuicInteger errorCode(static_cast<uint64_t>(rstStreamFrame.errorCode));
folly::Optional<QuicInteger> maybeReliableSize = folly::none;
size_t errorSize = errorCode.getSize();
auto rstStreamFrameSize = intFrameType.getSize() + errorSize +
streamId.getSize() + offset.getSize();
streamId.getSize() + finalSize.getSize();
if (rstStreamFrame.reliableSize) {
maybeReliableSize = QuicInteger(*rstStreamFrame.reliableSize);
rstStreamFrameSize += maybeReliableSize->getSize();
}
if (packetSpaceCheck(spaceLeft, rstStreamFrameSize)) {
builder.write(intFrameType);
builder.write(streamId);
builder.write(errorCode);
builder.write(offset);
builder.write(finalSize);
if (maybeReliableSize) {
builder.write(*maybeReliableSize);
}
builder.appendFrame(std::move(rstStreamFrame));
return rstStreamFrameSize;
}