mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-07 22:46:22 +03:00
Allow specifying error code in setReadCallback
Summary: We have an API behavior where setReadCalback will issue a StopSending on behalf of the app. This is useful but has confusing semantics as it always defaults to GenericApplicationError::NO_ERROR. Instead let the error be specified as part of the API. Reviewed By: yangchi, lnicco Differential Revision: D23055196 fbshipit-source-id: 755f4122bf445016c9b5adb23c3090fc23173eb9
This commit is contained in:
committed by
Facebook GitHub Bot
parent
acf0d30c16
commit
81756e3d13
@@ -650,7 +650,8 @@ QuicTransportBase::setStreamFlowControlWindow(
|
||||
|
||||
folly::Expected<folly::Unit, LocalErrorCode> QuicTransportBase::setReadCallback(
|
||||
StreamId id,
|
||||
ReadCallback* cb) {
|
||||
ReadCallback* cb,
|
||||
folly::Optional<ApplicationErrorCode> err) {
|
||||
if (isSendingStream(conn_->nodeType, id)) {
|
||||
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||
}
|
||||
@@ -660,12 +661,15 @@ folly::Expected<folly::Unit, LocalErrorCode> QuicTransportBase::setReadCallback(
|
||||
if (!conn_->streamManager->streamExists(id)) {
|
||||
return folly::makeUnexpected(LocalErrorCode::STREAM_NOT_EXISTS);
|
||||
}
|
||||
return setReadCallbackInternal(id, cb);
|
||||
return setReadCallbackInternal(id, cb, err);
|
||||
}
|
||||
|
||||
void QuicTransportBase::unsetAllReadCallbacks() {
|
||||
for (auto& streamCallbackPair : readCallbacks_) {
|
||||
setReadCallbackInternal(streamCallbackPair.first, nullptr);
|
||||
setReadCallbackInternal(
|
||||
streamCallbackPair.first,
|
||||
nullptr,
|
||||
GenericApplicationErrorCode::NO_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -685,7 +689,8 @@ void QuicTransportBase::unsetAllDeliveryCallbacks() {
|
||||
folly::Expected<folly::Unit, LocalErrorCode>
|
||||
QuicTransportBase::setReadCallbackInternal(
|
||||
StreamId id,
|
||||
ReadCallback* cb) noexcept {
|
||||
ReadCallback* cb,
|
||||
folly::Optional<ApplicationErrorCode> err) noexcept {
|
||||
VLOG(4) << "Setting setReadCallback for stream=" << id << " cb=" << cb << " "
|
||||
<< *this;
|
||||
auto readCbIt = readCallbacks_.find(id);
|
||||
@@ -702,8 +707,8 @@ QuicTransportBase::setReadCallbackInternal(
|
||||
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||
} else {
|
||||
readCb = cb;
|
||||
if (readCb == nullptr) {
|
||||
return stopSending(id, GenericApplicationErrorCode::NO_ERROR);
|
||||
if (readCb == nullptr && err) {
|
||||
return stopSending(id, err.value());
|
||||
}
|
||||
}
|
||||
updateReadLooper();
|
||||
|
||||
Reference in New Issue
Block a user