1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-07-30 14:43:05 +03:00

Remove exception throwing from QuicInteger

Summary: Continuing the theme, removing it from QuicInteger which ends up being in a lot of the write paths.

Reviewed By: kvtsoy

Differential Revision: D72757026

fbshipit-source-id: 99a6ab2caea8fb495b1cb466172611002968e527
This commit is contained in:
Matt Joras
2025-04-10 18:14:11 -07:00
committed by Facebook GitHub Bot
parent 7dbd219831
commit b81c086d09
38 changed files with 1502 additions and 724 deletions

View File

@ -1313,47 +1313,80 @@ void writeCloseCommon(
connection.udpSendPacketLen,
header,
getAckState(connection, pnSpace).largestAckedByPeer.value_or(0));
packetBuilder.encodePacketHeader();
auto encodeResult = packetBuilder.encodePacketHeader();
if (encodeResult.hasError()) {
LOG(ERROR) << "Error encoding packet header: "
<< encodeResult.error().message;
return;
}
packetBuilder.accountForCipherOverhead(aead.getCipherOverhead());
size_t written = 0;
if (!closeDetails) {
written = writeFrame(
auto writeResult = writeFrame(
ConnectionCloseFrame(
QuicErrorCode(TransportErrorCode::NO_ERROR),
std::string("No error")),
packetBuilder);
if (writeResult.hasError()) {
LOG(ERROR) << "Error writing frame: " << writeResult.error().message;
return;
}
written = *writeResult;
} else {
switch (closeDetails->code.type()) {
case QuicErrorCode::Type::ApplicationErrorCode:
written = writeFrame(
case QuicErrorCode::Type::ApplicationErrorCode: {
auto writeResult = writeFrame(
ConnectionCloseFrame(
QuicErrorCode(*closeDetails->code.asApplicationErrorCode()),
closeDetails->message,
quic::FrameType::CONNECTION_CLOSE_APP_ERR),
packetBuilder);
if (writeResult.hasError()) {
LOG(ERROR) << "Error writing frame: " << writeResult.error().message;
return;
}
written = *writeResult;
break;
case QuicErrorCode::Type::TransportErrorCode:
written = writeFrame(
}
case QuicErrorCode::Type::TransportErrorCode: {
auto writeResult = writeFrame(
ConnectionCloseFrame(
QuicErrorCode(*closeDetails->code.asTransportErrorCode()),
closeDetails->message,
quic::FrameType::CONNECTION_CLOSE),
packetBuilder);
if (writeResult.hasError()) {
LOG(ERROR) << "Error writing frame: " << writeResult.error().message;
return;
}
written = *writeResult;
break;
case QuicErrorCode::Type::LocalErrorCode:
written = writeFrame(
}
case QuicErrorCode::Type::LocalErrorCode: {
auto writeResult = writeFrame(
ConnectionCloseFrame(
QuicErrorCode(TransportErrorCode::INTERNAL_ERROR),
std::string("Internal error"),
quic::FrameType::CONNECTION_CLOSE),
packetBuilder);
if (writeResult.hasError()) {
LOG(ERROR) << "Error writing frame: " << writeResult.error().message;
return;
}
written = *writeResult;
break;
}
}
}
if (pnSpace == PacketNumberSpace::Initial &&
connection.nodeType == QuicNodeType::Client) {
while (packetBuilder.remainingSpaceInPkt() > 0) {
writeFrame(PaddingFrame(), packetBuilder);
auto paddingResult = writeFrame(PaddingFrame(), packetBuilder);
if (paddingResult.hasError()) {
LOG(ERROR) << "Error writing padding frame: "
<< paddingResult.error().message;
return;
}
}
}
if (written == 0) {