quic/state/QuicStreamUtilities.cpp (41 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include <quic/state/QuicStreamUtilities.h>
namespace quic {
bool isServerStream(StreamId stream) {
return stream & 0b01;
}
bool isClientStream(StreamId stream) {
return (stream & 0b01) == 0;
}
bool isUnidirectionalStream(StreamId stream) {
return stream & 0b10;
}
bool isBidirectionalStream(StreamId stream) {
return !isUnidirectionalStream(stream);
}
StreamDirectionality getStreamDirectionality(StreamId stream) {
return isUnidirectionalStream(stream) ? StreamDirectionality::Unidirectional
: StreamDirectionality::Bidirectional;
}
bool isSendingStream(QuicNodeType nodeType, StreamId stream) {
return isUnidirectionalStream(stream) &&
((nodeType == QuicNodeType::Client && isClientStream(stream)) ||
(nodeType == QuicNodeType::Server && isServerStream(stream)));
}
bool isReceivingStream(QuicNodeType nodeType, StreamId stream) {
return isUnidirectionalStream(stream) &&
((nodeType == QuicNodeType::Client && isServerStream(stream)) ||
(nodeType == QuicNodeType::Server && isClientStream(stream)));
}
bool isLocalStream(QuicNodeType nodeType, StreamId stream) {
return (nodeType == QuicNodeType::Client && isClientStream(stream)) ||
(nodeType == QuicNodeType::Server && isServerStream(stream));
}
bool isRemoteStream(QuicNodeType nodeType, StreamId stream) {
return (nodeType == QuicNodeType::Client && isServerStream(stream)) ||
(nodeType == QuicNodeType::Server && isClientStream(stream));
}
StreamInitiator getStreamInitiator(QuicNodeType nodeType, StreamId stream) {
return isLocalStream(nodeType, stream) ? StreamInitiator::Local
: StreamInitiator::Remote;
}
} // namespace quic