mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-07-30 14:43:05 +03:00
Migrate folly::Expected to quic::Expected
Summary: This migrates the quic code to use quic::Expected instead of folly::Expected. quic::Expected is a vendored wrapper for expected-lite, which itself matches std::expected. std::expected is not available to us, but once it is, we would be able to further simplify to the std version. This migration is almost entirely mechanical. --- > Generated by [Confucius Code Assist (CCA)](https://www.internalfb.com/wiki/Confucius/Analect/Shared_Analects/Confucius_Code_Assist_(CCA)/) [Session](https://www.internalfb.com/confucius?session_id=7044a18e-4d22-11f0-afeb-97de80927172&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=7044a18e-4d22-11f0-afeb-97de80927172&tab=Trace) --- > Generated by [RACER](https://www.internalfb.com/wiki/RACER_(Risk-Aware_Code_Editing_and_Refactoring)/), powered by [Confucius](https://www.internalfb.com/wiki/Confucius/Analect/Shared_Analects/Confucius_Code_Assist_(CCA)/) [Session](https://www.internalfb.com/confucius?session_id=1fea6620-4d30-11f0-a206-ad0241db9ec9&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=1fea6620-4d30-11f0-a206-ad0241db9ec9&tab=Trace) [Session](https://www.internalfb.com/confucius?session_id=2bdbabba-505a-11f0-a21b-fb3d40195e00&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=2bdbabba-505a-11f0-a21b-fb3d40195e00&tab=Trace) [Session](https://www.internalfb.com/confucius?session_id=eb689fd2-5114-11f0-ade8-99c0fe2f80f2&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=eb689fd2-5114-11f0-ade8-99c0fe2f80f2&tab=Trace) [Session](https://www.internalfb.com/confucius?session_id=9bc2dcec-51f8-11f0-8604-7bc1f5225a86&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=9bc2dcec-51f8-11f0-8604-7bc1f5225a86&tab=Trace) [Session](https://www.internalfb.com/confucius?session_id=46b187ea-5cdd-11f0-9bab-7b6b886e8a09&tab=Chat), [Trace](https://www.internalfb.com/confucius?session_id=46b187ea-5cdd-11f0-9bab-7b6b886e8a09&tab=Trace) Reviewed By: kvtsoy Differential Revision: D76488955 fbshipit-source-id: 92b9cbeac85a28722a6180464b47d84696b1e81b
This commit is contained in:
committed by
Facebook GitHub Bot
parent
6fdd238e97
commit
4601c4bdae
@ -218,7 +218,7 @@ FrameScheduler::FrameScheduler(
|
||||
QuicConnectionStateBase& conn)
|
||||
: name_(name), conn_(conn) {}
|
||||
|
||||
folly::Expected<SchedulingResult, QuicError>
|
||||
quic::Expected<SchedulingResult, QuicError>
|
||||
FrameScheduler::scheduleFramesForPacket(
|
||||
PacketBuilderInterface&& builder,
|
||||
uint32_t writableBytes) {
|
||||
@ -228,16 +228,16 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
bool initialPacket =
|
||||
longHeader && longHeader->getHeaderType() == LongHeader::Types::Initial;
|
||||
auto encodeRes = builder.encodePacketHeader();
|
||||
if (encodeRes.hasError()) {
|
||||
return folly::makeUnexpected(encodeRes.error());
|
||||
if (!encodeRes.has_value()) {
|
||||
return quic::make_unexpected(encodeRes.error());
|
||||
}
|
||||
// Add fixed padding at start of short header packets if configured
|
||||
if (shortHeader && conn_.transportSettings.fixedShortHeaderPadding > 0) {
|
||||
for (size_t i = 0; i < conn_.transportSettings.fixedShortHeaderPadding;
|
||||
i++) {
|
||||
auto writeRes = writeFrame(PaddingFrame(), builder);
|
||||
if (writeRes.hasError()) {
|
||||
return folly::makeUnexpected(writeRes.error());
|
||||
if (!writeRes.has_value()) {
|
||||
return quic::make_unexpected(writeRes.error());
|
||||
}
|
||||
}
|
||||
shortHeaderPadding = conn_.transportSettings.fixedShortHeaderPadding;
|
||||
@ -253,15 +253,15 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
bool rstWritten = false;
|
||||
if (cryptoStreamScheduler_ && cryptoStreamScheduler_->hasData()) {
|
||||
auto cryptoDataRes = cryptoStreamScheduler_->writeCryptoData(wrapper);
|
||||
if (cryptoDataRes.hasError()) {
|
||||
return folly::makeUnexpected(cryptoDataRes.error());
|
||||
if (!cryptoDataRes.has_value()) {
|
||||
return quic::make_unexpected(cryptoDataRes.error());
|
||||
}
|
||||
cryptoDataWritten = cryptoDataRes.value();
|
||||
}
|
||||
if (rstScheduler_ && rstScheduler_->hasPendingRsts()) {
|
||||
auto rstWrittenRes = rstScheduler_->writeRsts(wrapper);
|
||||
if (rstWrittenRes.hasError()) {
|
||||
return folly::makeUnexpected(rstWrittenRes.error());
|
||||
if (!rstWrittenRes.has_value()) {
|
||||
return quic::make_unexpected(rstWrittenRes.error());
|
||||
}
|
||||
rstWritten = rstWrittenRes.value();
|
||||
}
|
||||
@ -271,8 +271,8 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
// If packet has non ack data, it is subject to congestion control. We
|
||||
// need to use the wrapper/
|
||||
auto writeAcksRes = ackScheduler_->writeNextAcks(wrapper);
|
||||
if (writeAcksRes.hasError()) {
|
||||
return folly::makeUnexpected(writeAcksRes.error());
|
||||
if (!writeAcksRes.has_value()) {
|
||||
return quic::make_unexpected(writeAcksRes.error());
|
||||
}
|
||||
} else {
|
||||
// If we start with writing acks, we will let the ack scheduler write
|
||||
@ -281,8 +281,8 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
// controller. Otherwise, we will give other schedulers an opportunity to
|
||||
// write up to writable bytes.
|
||||
auto writeAcksRes = ackScheduler_->writeNextAcks(builder);
|
||||
if (writeAcksRes.hasError()) {
|
||||
return folly::makeUnexpected(writeAcksRes.error());
|
||||
if (!writeAcksRes.has_value()) {
|
||||
return quic::make_unexpected(writeAcksRes.error());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -296,14 +296,14 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
if (windowUpdateScheduler_ &&
|
||||
windowUpdateScheduler_->hasPendingWindowUpdates()) {
|
||||
auto result = windowUpdateScheduler_->writeWindowUpdates(wrapper);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
}
|
||||
if (blockedScheduler_ && blockedScheduler_->hasPendingBlockedFrames()) {
|
||||
auto result = blockedScheduler_->writeBlockedFrames(wrapper);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
}
|
||||
// Simple frames should be scheduled before stream frames and retx frames
|
||||
@ -320,15 +320,15 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
}
|
||||
if (streamFrameScheduler_ && streamFrameScheduler_->hasPendingData()) {
|
||||
auto result = streamFrameScheduler_->writeStreams(wrapper);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
}
|
||||
if (datagramFrameScheduler_ &&
|
||||
datagramFrameScheduler_->hasPendingDatagramFrames()) {
|
||||
auto datagramRes = datagramFrameScheduler_->writeDatagramFrames(wrapper);
|
||||
if (datagramRes.hasError()) {
|
||||
return folly::makeUnexpected(datagramRes.error());
|
||||
if (!datagramRes.has_value()) {
|
||||
return quic::make_unexpected(datagramRes.error());
|
||||
}
|
||||
}
|
||||
|
||||
@ -337,8 +337,8 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
// This is the initial packet, we need to fill er up.
|
||||
while (builder.remainingSpaceInPkt() > 0) {
|
||||
auto writeRes = writeFrame(PaddingFrame(), builder);
|
||||
if (writeRes.hasError()) {
|
||||
return folly::makeUnexpected(writeRes.error());
|
||||
if (!writeRes.has_value()) {
|
||||
return quic::make_unexpected(writeRes.error());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -348,8 +348,8 @@ FrameScheduler::scheduleFramesForPacket(
|
||||
size_t paddingIncrement = wrapper.remainingSpaceInPkt() % paddingModulo;
|
||||
for (size_t i = 0; i < paddingIncrement; i++) {
|
||||
auto writeRes = writeFrame(PaddingFrame(), builder);
|
||||
if (writeRes.hasError()) {
|
||||
return folly::makeUnexpected(writeRes.error());
|
||||
if (!writeRes.has_value()) {
|
||||
return quic::make_unexpected(writeRes.error());
|
||||
}
|
||||
}
|
||||
shortHeaderPadding += paddingIncrement;
|
||||
@ -389,7 +389,7 @@ folly::StringPiece FrameScheduler::name() const {
|
||||
return name_;
|
||||
}
|
||||
|
||||
folly::Expected<bool, QuicError> StreamFrameScheduler::writeStreamLossBuffers(
|
||||
quic::Expected<bool, QuicError> StreamFrameScheduler::writeStreamLossBuffers(
|
||||
PacketBuilderInterface& builder,
|
||||
QuicStreamState& stream) {
|
||||
bool wroteStreamFrame = false;
|
||||
@ -406,8 +406,8 @@ folly::Expected<bool, QuicError> StreamFrameScheduler::writeStreamLossBuffers(
|
||||
buffer->eof,
|
||||
std::nullopt /* skipLenHint */,
|
||||
stream.groupId);
|
||||
if (res.hasError()) {
|
||||
return folly::makeUnexpected(res.error());
|
||||
if (!res.has_value()) {
|
||||
return quic::make_unexpected(res.error());
|
||||
}
|
||||
auto dataLen = *res;
|
||||
if (dataLen) {
|
||||
@ -428,7 +428,7 @@ folly::Expected<bool, QuicError> StreamFrameScheduler::writeStreamLossBuffers(
|
||||
StreamFrameScheduler::StreamFrameScheduler(QuicConnectionStateBase& conn)
|
||||
: conn_(conn) {}
|
||||
|
||||
folly::Expected<StreamFrameScheduler::StreamWriteResult, QuicError>
|
||||
quic::Expected<StreamFrameScheduler::StreamWriteResult, QuicError>
|
||||
StreamFrameScheduler::writeSingleStream(
|
||||
PacketBuilderInterface& builder,
|
||||
QuicStreamState& stream,
|
||||
@ -436,8 +436,8 @@ StreamFrameScheduler::writeSingleStream(
|
||||
StreamWriteResult result = StreamWriteResult::NOT_LIMITED;
|
||||
if (!stream.lossBuffer.empty()) {
|
||||
auto writeResult = writeStreamLossBuffers(builder, stream);
|
||||
if (writeResult.hasError()) {
|
||||
return folly::makeUnexpected(writeResult.error());
|
||||
if (!writeResult.has_value()) {
|
||||
return quic::make_unexpected(writeResult.error());
|
||||
}
|
||||
if (!writeResult.value()) {
|
||||
return StreamWriteResult::PACKET_FULL;
|
||||
@ -446,8 +446,8 @@ StreamFrameScheduler::writeSingleStream(
|
||||
if (stream.hasWritableData(true)) {
|
||||
if (connWritableBytes > 0 || stream.hasWritableData(false)) {
|
||||
auto writeResult = writeStreamFrame(builder, stream, connWritableBytes);
|
||||
if (writeResult.hasError()) {
|
||||
return folly::makeUnexpected(writeResult.error());
|
||||
if (!writeResult.has_value()) {
|
||||
return quic::make_unexpected(writeResult.error());
|
||||
}
|
||||
if (!writeResult.value()) {
|
||||
return StreamWriteResult::PACKET_FULL;
|
||||
@ -461,7 +461,7 @@ StreamFrameScheduler::writeSingleStream(
|
||||
return result;
|
||||
}
|
||||
|
||||
folly::Expected<StreamId, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
quic::Expected<StreamId, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
PacketBuilderInterface& builder,
|
||||
const std::set<StreamId>& writableStreams,
|
||||
StreamId nextScheduledStream,
|
||||
@ -477,8 +477,8 @@ folly::Expected<StreamId, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
auto stream = conn_.streamManager->findStream(*writableStreamItr);
|
||||
CHECK(stream);
|
||||
auto writeResult = writeSingleStream(builder, *stream, connWritableBytes);
|
||||
if (writeResult.hasError()) {
|
||||
return folly::makeUnexpected(writeResult.error());
|
||||
if (!writeResult.has_value()) {
|
||||
return quic::make_unexpected(writeResult.error());
|
||||
}
|
||||
if (writeResult.value() == StreamWriteResult::PACKET_FULL) {
|
||||
break;
|
||||
@ -491,8 +491,7 @@ folly::Expected<StreamId, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
return *writableStreamItr;
|
||||
}
|
||||
|
||||
folly::Expected<folly::Unit, QuicError>
|
||||
StreamFrameScheduler::writeStreamsHelper(
|
||||
quic::Expected<void, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
PacketBuilderInterface& builder,
|
||||
deprecated::PriorityQueue& writableStreams,
|
||||
uint64_t& connWritableBytes,
|
||||
@ -513,13 +512,13 @@ StreamFrameScheduler::writeStreamsHelper(
|
||||
auto stream = CHECK_NOTNULL(conn_.streamManager->findStream(streamId));
|
||||
if (!stream->hasSchedulableData() && stream->hasSchedulableDsr()) {
|
||||
// We hit a DSR stream
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
CHECK(stream) << "streamId=" << streamId
|
||||
<< "inc=" << uint64_t(level.incremental);
|
||||
auto writeResult = writeSingleStream(builder, *stream, connWritableBytes);
|
||||
if (writeResult.hasError()) {
|
||||
return folly::makeUnexpected(writeResult.error());
|
||||
if (!writeResult.has_value()) {
|
||||
return quic::make_unexpected(writeResult.error());
|
||||
}
|
||||
if (writeResult.value() == StreamWriteResult::PACKET_FULL) {
|
||||
break;
|
||||
@ -531,15 +530,14 @@ StreamFrameScheduler::writeStreamsHelper(
|
||||
bool forceNext = remainingSpaceAfter > 0;
|
||||
level.iterator->next(forceNext);
|
||||
if (streamPerPacket) {
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
} while (!level.iterator->end());
|
||||
}
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
|
||||
folly::Expected<folly::Unit, QuicError>
|
||||
StreamFrameScheduler::writeStreamsHelper(
|
||||
quic::Expected<void, QuicError> StreamFrameScheduler::writeStreamsHelper(
|
||||
PacketBuilderInterface& builder,
|
||||
PriorityQueue& writableStreams,
|
||||
uint64_t& connWritableBytes,
|
||||
@ -558,14 +556,14 @@ StreamFrameScheduler::writeStreamsHelper(
|
||||
auto stream = CHECK_NOTNULL(conn_.streamManager->findStream(streamId));
|
||||
if (!stream->hasSchedulableData() && stream->hasSchedulableDsr()) {
|
||||
// We hit a DSR stream
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
CHECK(stream) << "streamId=" << streamId;
|
||||
// TODO: this is counting STREAM frame overhead against the stream itself
|
||||
auto lastWriteBytes = builder.remainingSpaceInPkt();
|
||||
auto writeResult = writeSingleStream(builder, *stream, connWritableBytes);
|
||||
if (writeResult.hasError()) {
|
||||
return folly::makeUnexpected(writeResult.error());
|
||||
if (!writeResult.has_value()) {
|
||||
return quic::make_unexpected(writeResult.error());
|
||||
}
|
||||
if (writeResult.value() == StreamWriteResult::PACKET_FULL) {
|
||||
break;
|
||||
@ -585,13 +583,13 @@ StreamFrameScheduler::writeStreamsHelper(
|
||||
writableStreams.consume(lastWriteBytes);
|
||||
}
|
||||
if (streamPerPacket) {
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
}
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
|
||||
folly::Expected<folly::Unit, QuicError> StreamFrameScheduler::writeStreams(
|
||||
quic::Expected<void, QuicError> StreamFrameScheduler::writeStreams(
|
||||
PacketBuilderInterface& builder) {
|
||||
DCHECK(conn_.streamManager->hasWritable());
|
||||
uint64_t connWritableBytes = getSendConnFlowControlBytesWire(conn_);
|
||||
@ -604,8 +602,8 @@ folly::Expected<folly::Unit, QuicError> StreamFrameScheduler::writeStreams(
|
||||
conn_.schedulingState.nextScheduledControlStream,
|
||||
connWritableBytes,
|
||||
conn_.transportSettings.streamFramePerPacket);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
conn_.schedulingState.nextScheduledControlStream = result.value();
|
||||
}
|
||||
@ -618,8 +616,8 @@ folly::Expected<folly::Unit, QuicError> StreamFrameScheduler::writeStreams(
|
||||
*oldWriteQueue,
|
||||
connWritableBytes,
|
||||
conn_.transportSettings.streamFramePerPacket);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
auto streamId = oldWriteQueue->getNextScheduledStream();
|
||||
nextStream = conn_.streamManager->findStream(streamId);
|
||||
@ -632,8 +630,8 @@ folly::Expected<folly::Unit, QuicError> StreamFrameScheduler::writeStreams(
|
||||
writeQueue,
|
||||
connWritableBytes,
|
||||
conn_.transportSettings.streamFramePerPacket);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
if (!writeQueue.empty()) {
|
||||
auto id = writeQueue.peekNextScheduledID();
|
||||
@ -650,7 +648,7 @@ folly::Expected<folly::Unit, QuicError> StreamFrameScheduler::writeStreams(
|
||||
if (nextStream && !nextStream->hasSchedulableData()) {
|
||||
nextStreamDsr_ = true;
|
||||
}
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
|
||||
bool StreamFrameScheduler::hasPendingData() const {
|
||||
@ -660,7 +658,7 @@ bool StreamFrameScheduler::hasPendingData() const {
|
||||
getSendConnFlowControlBytesWire(conn_) > 0));
|
||||
}
|
||||
|
||||
folly::Expected<bool, QuicError> StreamFrameScheduler::writeStreamFrame(
|
||||
quic::Expected<bool, QuicError> StreamFrameScheduler::writeStreamFrame(
|
||||
PacketBuilderInterface& builder,
|
||||
QuicStreamState& stream,
|
||||
uint64_t& connWritableBytes) {
|
||||
@ -688,8 +686,8 @@ folly::Expected<bool, QuicError> StreamFrameScheduler::writeStreamFrame(
|
||||
canWriteFin,
|
||||
std::nullopt /* skipLenHint */,
|
||||
stream.groupId);
|
||||
if (res.hasError()) {
|
||||
return folly::makeUnexpected(res.error());
|
||||
if (!res.has_value()) {
|
||||
return quic::make_unexpected(res.error());
|
||||
}
|
||||
auto dataLen = *res;
|
||||
if (!dataLen) {
|
||||
@ -712,7 +710,7 @@ bool RstStreamScheduler::hasPendingRsts() const {
|
||||
return !conn_.pendingEvents.resets.empty();
|
||||
}
|
||||
|
||||
folly::Expected<bool, QuicError> RstStreamScheduler::writeRsts(
|
||||
quic::Expected<bool, QuicError> RstStreamScheduler::writeRsts(
|
||||
PacketBuilderInterface& builder) {
|
||||
bool rstWritten = false;
|
||||
for (const auto& resetStream : conn_.pendingEvents.resets) {
|
||||
@ -729,8 +727,8 @@ folly::Expected<bool, QuicError> RstStreamScheduler::writeRsts(
|
||||
// it in this implementation because it dramatically simplifies flow
|
||||
// control accounting.
|
||||
auto bytesWrittenResult = writeFrame(resetStream.second, builder);
|
||||
if (bytesWrittenResult.hasError()) {
|
||||
return folly::makeUnexpected(bytesWrittenResult.error());
|
||||
if (!bytesWrittenResult.has_value()) {
|
||||
return quic::make_unexpected(bytesWrittenResult.error());
|
||||
}
|
||||
if (!bytesWrittenResult.value()) {
|
||||
break;
|
||||
@ -777,7 +775,7 @@ bool PingFrameScheduler::hasPingFrame() const {
|
||||
bool PingFrameScheduler::writePing(PacketBuilderInterface& builder) {
|
||||
auto writeFrameResult = writeFrame(PingFrame(), builder);
|
||||
// We shouldn't ever error on a PING.
|
||||
CHECK(!writeFrameResult.hasError());
|
||||
CHECK(writeFrameResult.has_value());
|
||||
return writeFrameResult.value() != 0;
|
||||
}
|
||||
|
||||
@ -788,7 +786,7 @@ bool DatagramFrameScheduler::hasPendingDatagramFrames() const {
|
||||
return !conn_.datagramState.writeBuffer.empty();
|
||||
}
|
||||
|
||||
folly::Expected<bool, QuicError> DatagramFrameScheduler::writeDatagramFrames(
|
||||
quic::Expected<bool, QuicError> DatagramFrameScheduler::writeDatagramFrames(
|
||||
PacketBuilderInterface& builder) {
|
||||
bool sent = false;
|
||||
for (size_t i = 0; i <= conn_.datagramState.writeBuffer.size(); ++i) {
|
||||
@ -797,21 +795,21 @@ folly::Expected<bool, QuicError> DatagramFrameScheduler::writeDatagramFrames(
|
||||
uint64_t spaceLeft = builder.remainingSpaceInPkt();
|
||||
QuicInteger frameTypeQuicInt(static_cast<uint8_t>(FrameType::DATAGRAM_LEN));
|
||||
auto frameTypeSize = frameTypeQuicInt.getSize();
|
||||
if (frameTypeSize.hasError()) {
|
||||
return folly::makeUnexpected(frameTypeSize.error());
|
||||
if (!frameTypeSize.has_value()) {
|
||||
return quic::make_unexpected(frameTypeSize.error());
|
||||
}
|
||||
QuicInteger datagramLenInt(len);
|
||||
auto datagramLenSize = datagramLenInt.getSize();
|
||||
if (datagramLenSize.hasError()) {
|
||||
return folly::makeUnexpected(datagramLenSize.error());
|
||||
if (!datagramLenSize.has_value()) {
|
||||
return quic::make_unexpected(datagramLenSize.error());
|
||||
}
|
||||
uint64_t datagramFrameLength =
|
||||
frameTypeSize.value() + len + datagramLenSize.value();
|
||||
if (datagramFrameLength <= spaceLeft) {
|
||||
auto datagramFrame = DatagramFrame(len, payload.move());
|
||||
auto res = writeFrame(datagramFrame, builder);
|
||||
if (res.hasError()) {
|
||||
return folly::makeUnexpected(res.error());
|
||||
if (!res.has_value()) {
|
||||
return quic::make_unexpected(res.error());
|
||||
}
|
||||
// Must always succeed since we have already checked that there is enough
|
||||
// space to write the frame
|
||||
@ -836,14 +834,14 @@ bool WindowUpdateScheduler::hasPendingWindowUpdates() const {
|
||||
conn_.pendingEvents.connWindowUpdate;
|
||||
}
|
||||
|
||||
folly::Expected<folly::Unit, QuicError>
|
||||
WindowUpdateScheduler::writeWindowUpdates(PacketBuilderInterface& builder) {
|
||||
quic::Expected<void, QuicError> WindowUpdateScheduler::writeWindowUpdates(
|
||||
PacketBuilderInterface& builder) {
|
||||
if (conn_.pendingEvents.connWindowUpdate) {
|
||||
auto maxDataFrame = generateMaxDataFrame(conn_);
|
||||
auto maximumData = maxDataFrame.maximumData;
|
||||
auto bytesResult = writeFrame(std::move(maxDataFrame), builder);
|
||||
if (bytesResult.hasError()) {
|
||||
return folly::makeUnexpected(bytesResult.error());
|
||||
if (!bytesResult.has_value()) {
|
||||
return quic::make_unexpected(bytesResult.error());
|
||||
}
|
||||
if (bytesResult.value()) {
|
||||
VLOG(4) << "Wrote max_data=" << maximumData << " " << conn_;
|
||||
@ -857,8 +855,8 @@ WindowUpdateScheduler::writeWindowUpdates(PacketBuilderInterface& builder) {
|
||||
auto maxStreamDataFrame = generateMaxStreamDataFrame(*stream);
|
||||
auto maximumData = maxStreamDataFrame.maximumData;
|
||||
auto bytesResult = writeFrame(std::move(maxStreamDataFrame), builder);
|
||||
if (bytesResult.hasError()) {
|
||||
return folly::makeUnexpected(bytesResult.error());
|
||||
if (!bytesResult.has_value()) {
|
||||
return quic::make_unexpected(bytesResult.error());
|
||||
}
|
||||
if (!bytesResult.value()) {
|
||||
break;
|
||||
@ -866,7 +864,7 @@ WindowUpdateScheduler::writeWindowUpdates(PacketBuilderInterface& builder) {
|
||||
VLOG(4) << "Wrote max_stream_data stream=" << stream->id
|
||||
<< " maximumData=" << maximumData << " " << conn_;
|
||||
}
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
|
||||
BlockedScheduler::BlockedScheduler(const QuicConnectionStateBase& conn)
|
||||
@ -877,33 +875,33 @@ bool BlockedScheduler::hasPendingBlockedFrames() const {
|
||||
conn_.pendingEvents.sendDataBlocked;
|
||||
}
|
||||
|
||||
folly::Expected<folly::Unit, QuicError> BlockedScheduler::writeBlockedFrames(
|
||||
quic::Expected<void, QuicError> BlockedScheduler::writeBlockedFrames(
|
||||
PacketBuilderInterface& builder) {
|
||||
if (conn_.pendingEvents.sendDataBlocked) {
|
||||
// Connection is write blocked due to connection level flow control.
|
||||
DataBlockedFrame blockedFrame(
|
||||
conn_.flowControlState.peerAdvertisedMaxOffset);
|
||||
auto result = writeFrame(blockedFrame, builder);
|
||||
if (result.hasError()) {
|
||||
return folly::makeUnexpected(result.error());
|
||||
if (!result.has_value()) {
|
||||
return quic::make_unexpected(result.error());
|
||||
}
|
||||
if (!result.value()) {
|
||||
// If there is not enough room to write data blocked frame in the
|
||||
// current packet, we won't be able to write stream blocked frames either
|
||||
// so just return.
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
}
|
||||
for (const auto& blockedStream : conn_.streamManager->blockedStreams()) {
|
||||
auto bytesWrittenResult = writeFrame(blockedStream.second, builder);
|
||||
if (bytesWrittenResult.hasError()) {
|
||||
return folly::makeUnexpected(bytesWrittenResult.error());
|
||||
if (!bytesWrittenResult.has_value()) {
|
||||
return quic::make_unexpected(bytesWrittenResult.error());
|
||||
}
|
||||
if (!bytesWrittenResult.value()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return folly::unit;
|
||||
return {};
|
||||
}
|
||||
|
||||
CryptoStreamScheduler::CryptoStreamScheduler(
|
||||
@ -911,7 +909,7 @@ CryptoStreamScheduler::CryptoStreamScheduler(
|
||||
const QuicCryptoStream& cryptoStream)
|
||||
: conn_(conn), cryptoStream_(cryptoStream) {}
|
||||
|
||||
folly::Expected<bool, QuicError> CryptoStreamScheduler::writeCryptoData(
|
||||
quic::Expected<bool, QuicError> CryptoStreamScheduler::writeCryptoData(
|
||||
PacketBuilderInterface& builder) {
|
||||
bool cryptoDataWritten = false;
|
||||
uint64_t writableData = cryptoStream_.pendingWrites.chainLength();
|
||||
@ -920,8 +918,8 @@ folly::Expected<bool, QuicError> CryptoStreamScheduler::writeCryptoData(
|
||||
// will always take precedence over the crypto data.
|
||||
for (const auto& buffer : cryptoStream_.lossBuffer) {
|
||||
auto res = writeCryptoFrame(buffer.offset, buffer.data, builder);
|
||||
if (res.hasError()) {
|
||||
return folly::makeUnexpected(res.error());
|
||||
if (!res.has_value()) {
|
||||
return quic::make_unexpected(res.error());
|
||||
}
|
||||
if (!res.value()) {
|
||||
return cryptoDataWritten;
|
||||
@ -934,8 +932,8 @@ folly::Expected<bool, QuicError> CryptoStreamScheduler::writeCryptoData(
|
||||
if (writableData != 0) {
|
||||
auto res = writeCryptoFrame(
|
||||
cryptoStream_.currentWriteOffset, cryptoStream_.pendingWrites, builder);
|
||||
if (res.hasError()) {
|
||||
return folly::makeUnexpected(res.error());
|
||||
if (!res.has_value()) {
|
||||
return quic::make_unexpected(res.error());
|
||||
}
|
||||
if (res.value()) {
|
||||
VLOG(4) << "Wrote crypto frame"
|
||||
@ -964,7 +962,7 @@ bool ImmediateAckFrameScheduler::writeImmediateAckFrame(
|
||||
PacketBuilderInterface& builder) {
|
||||
auto result = writeFrame(ImmediateAckFrame(), builder);
|
||||
// We shouldn't ever error on an IMMEDIATE_ACK.
|
||||
CHECK(!result.hasError());
|
||||
CHECK(result.has_value());
|
||||
return result.value() != 0;
|
||||
}
|
||||
|
||||
@ -983,7 +981,7 @@ bool CloningScheduler::hasData() const {
|
||||
conn_.outstandings.numOutstanding() > conn_.outstandings.dsrCount;
|
||||
}
|
||||
|
||||
folly::Expected<SchedulingResult, QuicError>
|
||||
quic::Expected<SchedulingResult, QuicError>
|
||||
CloningScheduler::scheduleFramesForPacket(
|
||||
PacketBuilderInterface&& builder,
|
||||
uint32_t writableBytes) {
|
||||
@ -1078,8 +1076,8 @@ CloningScheduler::scheduleFramesForPacket(
|
||||
|
||||
internalBuilder->accountForCipherOverhead(cipherOverhead_);
|
||||
auto encodeRes = internalBuilder->encodePacketHeader();
|
||||
if (encodeRes.hasError()) {
|
||||
return folly::makeUnexpected(encodeRes.error());
|
||||
if (!encodeRes.has_value()) {
|
||||
return quic::make_unexpected(encodeRes.error());
|
||||
}
|
||||
PacketRebuilder rebuilder(*internalBuilder, conn_);
|
||||
|
||||
@ -1094,8 +1092,8 @@ CloningScheduler::scheduleFramesForPacket(
|
||||
|
||||
// Rebuilder will write the rest of frames
|
||||
auto rebuildResultExpected = rebuilder.rebuildFromPacket(outstandingPacket);
|
||||
if (rebuildResultExpected.hasError()) {
|
||||
return folly::makeUnexpected(rebuildResultExpected.error());
|
||||
if (!rebuildResultExpected.has_value()) {
|
||||
return quic::make_unexpected(rebuildResultExpected.error());
|
||||
}
|
||||
if (rebuildResultExpected.value()) {
|
||||
return SchedulingResult(
|
||||
|
Reference in New Issue
Block a user