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:
committed by
Facebook GitHub Bot
parent
67794c5022
commit
568f19c17d
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user