1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-06 22:22:38 +03:00

Change onReadData() to return an error

Summary:
All according to plan: https://fburl.com/gdoc/pebccgi1
Changing function definitions to return errors while still throwing.

Reviewed By: sharmafb

Differential Revision: D69567329

fbshipit-source-id: 5d40ee32fe185d5674785632a9a13e4cef996988
This commit is contained in:
Konstantin Tsoy
2025-02-14 19:21:05 -08:00
committed by Facebook GitHub Bot
parent 6a8f9bcb6b
commit d98c90c48d
8 changed files with 25 additions and 13 deletions

View File

@@ -126,7 +126,12 @@ void QuicTransportBaseLite::onNetworkData(
auto packets = std::move(networkData).movePackets(); auto packets = std::move(networkData).movePackets();
for (auto& packet : packets) { for (auto& packet : packets) {
onReadData(peer, std::move(packet)); auto res = onReadData(peer, std::move(packet));
if (res.hasError()) {
VLOG(4) << __func__ << " " << res.error().message << " " << *this;
exceptionCloseWhat_ = res.error().message;
return closeImpl(res.error());
}
if (conn_->peerConnectionError) { if (conn_->peerConnectionError) {
closeImpl(QuicError( closeImpl(QuicError(
QuicErrorCode(TransportErrorCode::NO_ERROR), "Peer closed")); QuicErrorCode(TransportErrorCode::NO_ERROR), "Peer closed"));

View File

@@ -43,7 +43,7 @@ class QuicTransportBaseLite : virtual public QuicSocketLite,
* The sub-class may throw an exception if there was an error in processing * The sub-class may throw an exception if there was an error in processing
* the packet in which case the connection will be closed. * the packet in which case the connection will be closed.
*/ */
virtual void onReadData( virtual folly::Expected<folly::Unit, QuicError> onReadData(
const folly::SocketAddress& peer, const folly::SocketAddress& peer,
ReceivedUdpPacket&& udpPacket) = 0; ReceivedUdpPacket&& udpPacket) = 0;

View File

@@ -283,10 +283,11 @@ class TestQuicTransport
return lossTimeout_.getTimerCallbackTimeRemaining(); return lossTimeout_.getTimerCallbackTimeRemaining();
} }
void onReadData(const folly::SocketAddress&, ReceivedUdpPacket&& udpPacket) folly::Expected<folly::Unit, QuicError> onReadData(
override { const folly::SocketAddress&,
ReceivedUdpPacket&& udpPacket) override {
if (udpPacket.buf.empty()) { if (udpPacket.buf.empty()) {
return; return folly::unit;
} }
folly::io::Cursor cursor(udpPacket.buf.front()); folly::io::Cursor cursor(udpPacket.buf.front());
while (!cursor.isAtEnd()) { while (!cursor.isAtEnd()) {
@@ -332,6 +333,7 @@ class TestQuicTransport
conn_->streamManager->updatePeekableStreams(*stream); conn_->streamManager->updatePeekableStreams(*stream);
} }
} }
return folly::unit;
} }
void writeData() override { void writeData() override {

View File

@@ -85,9 +85,11 @@ class TestQuicTransport
return writeLooper_->isPacingScheduled(); return writeLooper_->isPacingScheduled();
} }
void onReadData( folly::Expected<folly::Unit, QuicError> onReadData(
const folly::SocketAddress& /* peer */, const folly::SocketAddress& /* peer */,
ReceivedUdpPacket&& /* udpPacket */) noexcept override {} ReceivedUdpPacket&& /* udpPacket */) noexcept override {
return folly::unit;
}
void writeData() override { void writeData() override {
if (closed) { if (closed) {

View File

@@ -835,7 +835,7 @@ void QuicClientTransportLite::processUdpPacketData(
} }
} }
void QuicClientTransportLite::onReadData( folly::Expected<folly::Unit, QuicError> QuicClientTransportLite::onReadData(
const folly::SocketAddress& peer, const folly::SocketAddress& peer,
ReceivedUdpPacket&& udpPacket) { ReceivedUdpPacket&& udpPacket) {
if (closeState_ == CloseState::CLOSED) { if (closeState_ == CloseState::CLOSED) {
@@ -845,7 +845,7 @@ void QuicClientTransportLite::onReadData(
if (conn_->qLogger) { if (conn_->qLogger) {
conn_->qLogger->addPacketDrop(0, kAlreadyClosed); conn_->qLogger->addPacketDrop(0, kAlreadyClosed);
} }
return; return folly::unit;
} }
bool waitingForFirstPacket = !hasReceivedUdpPackets(*conn_); bool waitingForFirstPacket = !hasReceivedUdpPackets(*conn_);
processUdpPacket(peer, std::move(udpPacket)); processUdpPacket(peer, std::move(udpPacket));
@@ -873,6 +873,7 @@ void QuicClientTransportLite::onReadData(
} }
maybeSendTransportKnobs(); maybeSendTransportKnobs();
return folly::unit;
} }
QuicSocketLite::WriteResult QuicClientTransportLite::writeBufMeta( QuicSocketLite::WriteResult QuicClientTransportLite::writeBufMeta(

View File

@@ -156,7 +156,7 @@ class QuicClientTransportLite
bool hasZeroRttWriteCipher() const; bool hasZeroRttWriteCipher() const;
// From QuicTransportBase // From QuicTransportBase
void onReadData( folly::Expected<folly::Unit, QuicError> onReadData(
const folly::SocketAddress& peer, const folly::SocketAddress& peer,
ReceivedUdpPacket&& udpPacket) override; ReceivedUdpPacket&& udpPacket) override;
void writeData() override; void writeData() override;

View File

@@ -156,7 +156,7 @@ void QuicServerTransport::setServerConnectionIdRejector(
} }
} }
void QuicServerTransport::onReadData( folly::Expected<folly::Unit, QuicError> QuicServerTransport::onReadData(
const folly::SocketAddress& peer, const folly::SocketAddress& peer,
ReceivedUdpPacket&& udpPacket) { ReceivedUdpPacket&& udpPacket) {
ServerEvents::ReadData readData; ServerEvents::ReadData readData;
@@ -170,7 +170,7 @@ void QuicServerTransport::onReadData(
processPendingData(true); processPendingData(true);
if (closeState_ == CloseState::CLOSED) { if (closeState_ == CloseState::CLOSED) {
return; return folly::unit;
} }
if (!notifiedRouting_ && routingCb_ && conn_->serverConnectionId) { if (!notifiedRouting_ && routingCb_ && conn_->serverConnectionId) {
notifiedRouting_ = true; notifiedRouting_ = true;
@@ -202,6 +202,8 @@ void QuicServerTransport::onReadData(
maybeIssueConnectionIds(); maybeIssueConnectionIds();
maybeNotifyTransportReady(); maybeNotifyTransportReady();
maybeUpdateCongestionControllerFromTicket(); maybeUpdateCongestionControllerFromTicket();
return folly::unit;
} }
void QuicServerTransport::accept() { void QuicServerTransport::accept() {

View File

@@ -137,7 +137,7 @@ class QuicServerTransport
void verifiedClientAddress(); void verifiedClientAddress();
// From QuicTransportBase // From QuicTransportBase
void onReadData( folly::Expected<folly::Unit, QuicError> onReadData(
const folly::SocketAddress& peer, const folly::SocketAddress& peer,
ReceivedUdpPacket&& udpPacket) override; ReceivedUdpPacket&& udpPacket) override;
void writeData() override; void writeData() override;