mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-07 22:46:22 +03:00
QuicSocket::setDSRPacketizationRequestSender API
Summary: This assigns a DSRPacketizationRequestSender to a QUIC stream, and let it own it. Reviewed By: mjoras Differential Revision: D27668523 fbshipit-source-id: 4beba6ddf247801368c3e1c24a0a4956490d45cd
This commit is contained in:
committed by
Facebook GitHub Bot
parent
c0cc396363
commit
aa59f9ef32
@@ -2005,6 +2005,9 @@ QuicSocket::WriteResult QuicTransportBase::writeBufMeta(
|
||||
if (!stream->writable()) {
|
||||
return folly::makeUnexpected(LocalErrorCode::STREAM_CLOSED);
|
||||
}
|
||||
if (!stream->dsrSender) {
|
||||
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||
}
|
||||
if (stream->currentWriteOffset == 0 && stream->writeBuffer.empty()) {
|
||||
// If nothing has been written to writeBuffer ever, meta writing isn't
|
||||
// allowed.
|
||||
@@ -3176,4 +3179,56 @@ void QuicTransportBase::onTransportKnobs(Buf knobBlob) {
|
||||
knobBlob->length());
|
||||
}
|
||||
|
||||
QuicSocket::WriteResult QuicTransportBase::setDSRPacketizationRequestSender(
|
||||
StreamId id,
|
||||
std::unique_ptr<DSRPacketizationRequestSender> sender) {
|
||||
if (closeState_ != CloseState::OPEN) {
|
||||
return folly::makeUnexpected(LocalErrorCode::CONNECTION_CLOSED);
|
||||
}
|
||||
if (isReceivingStream(conn_->nodeType, id)) {
|
||||
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||
}
|
||||
FOLLY_MAYBE_UNUSED auto self = sharedGuard();
|
||||
try {
|
||||
// Check whether stream exists before calling getStream to avoid
|
||||
// creating a peer stream if it does not exist yet.
|
||||
if (!conn_->streamManager->streamExists(id)) {
|
||||
return folly::makeUnexpected(LocalErrorCode::STREAM_NOT_EXISTS);
|
||||
}
|
||||
auto stream = conn_->streamManager->getStream(id);
|
||||
if (!stream->writable()) {
|
||||
return folly::makeUnexpected(LocalErrorCode::STREAM_CLOSED);
|
||||
}
|
||||
if (stream->dsrSender != nullptr) {
|
||||
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||
}
|
||||
stream->dsrSender = std::move(sender);
|
||||
// Fow now, no appLimited or appIdle update here since we are not writing
|
||||
// either BufferMetas yet. The first BufferMeta write will update it.
|
||||
} catch (const QuicTransportException& ex) {
|
||||
VLOG(4) << __func__ << " streamId=" << id << " " << ex.what() << " "
|
||||
<< *this;
|
||||
exceptionCloseWhat_ = ex.what();
|
||||
closeImpl(std::make_pair(
|
||||
QuicErrorCode(ex.errorCode()), std::string("writeChain() error")));
|
||||
return folly::makeUnexpected(LocalErrorCode::TRANSPORT_ERROR);
|
||||
} catch (const QuicInternalException& ex) {
|
||||
VLOG(4) << __func__ << " streamId=" << id << " " << ex.what() << " "
|
||||
<< *this;
|
||||
exceptionCloseWhat_ = ex.what();
|
||||
closeImpl(std::make_pair(
|
||||
QuicErrorCode(ex.errorCode()), std::string("writeChain() error")));
|
||||
return folly::makeUnexpected(ex.errorCode());
|
||||
} catch (const std::exception& ex) {
|
||||
VLOG(4) << __func__ << " streamId=" << id << " " << ex.what() << " "
|
||||
<< *this;
|
||||
exceptionCloseWhat_ = ex.what();
|
||||
closeImpl(std::make_pair(
|
||||
QuicErrorCode(TransportErrorCode::INTERNAL_ERROR),
|
||||
std::string("writeChain() error")));
|
||||
return folly::makeUnexpected(LocalErrorCode::INTERNAL_ERROR);
|
||||
}
|
||||
return folly::unit;
|
||||
}
|
||||
|
||||
} // namespace quic
|
||||
|
||||
Reference in New Issue
Block a user