15#include <shared_mutex>
37 explicit stream_manager(
bool is_server, uint64_t initial_max_stream_data = 65536);
97 [[nodiscard]]
auto has_stream(uint64_t stream_id)
const -> bool;
102 [[nodiscard]]
auto stream_ids() const -> std::vector<uint64_t>;
278 std::map<uint64_t, std::unique_ptr<stream>>
streams_;
282 [[nodiscard]]
auto is_local_stream(uint64_t stream_id)
const noexcept -> bool;
Manages QUIC streams within a connection.
auto remove_closed_streams() -> size_t
Remove closed/terminal streams.
auto stream_ids() const -> std::vector< uint64_t >
Get all active stream IDs.
auto has_stream(uint64_t stream_id) const -> bool
Check if a stream exists.
uint64_t initial_max_stream_data_
void close_all_streams(uint64_t error_code)
Close all streams with an error code.
auto peer_max_streams_uni() const noexcept -> uint64_t
Get peer's maximum unidirectional streams (limits our creation)
auto peer_max_streams_bidi() const noexcept -> uint64_t
Get peer's maximum bidirectional streams (limits our creation)
uint64_t local_max_streams_bidi_
auto get_stream(uint64_t stream_id) -> stream *
Get a stream by ID.
auto local_max_streams_uni() const noexcept -> uint64_t
Get our maximum unidirectional streams (advertised to peer)
auto local_max_streams_bidi() const noexcept -> uint64_t
Get our maximum bidirectional streams (advertised to peer)
auto create_bidirectional_stream() -> Result< uint64_t >
Create a new locally-initiated bidirectional stream.
uint64_t highest_peer_bidi_id_
auto streams_needing_flow_control_update() -> std::vector< stream * >
Get streams that need MAX_STREAM_DATA updates.
auto local_bidi_streams_count() const noexcept -> uint64_t
Get count of locally-initiated bidirectional streams.
stream_manager(const stream_manager &)=delete
~stream_manager()=default
uint64_t peer_max_streams_uni_
stream_manager(bool is_server, uint64_t initial_max_stream_data=65536)
Construct a stream manager.
auto streams_with_pending_data() -> std::vector< stream * >
Get streams with pending data to send.
void set_peer_max_streams_uni(uint64_t max)
Set maximum unidirectional streams peer can initiate.
auto operator=(const stream_manager &) -> stream_manager &=delete
auto create_unidirectional_stream() -> Result< uint64_t >
Create a new locally-initiated unidirectional stream.
auto peer_uni_streams_count() const noexcept -> uint64_t
Get count of peer-initiated unidirectional streams.
void set_local_max_streams_uni(uint64_t max)
Set our maximum unidirectional streams (advertised to peer)
std::shared_mutex streams_mutex_
uint64_t local_max_streams_uni_
auto can_accept_peer_stream(uint64_t stream_id) const -> bool
void set_local_max_streams_bidi(uint64_t max)
Set our maximum bidirectional streams (advertised to peer)
void reset()
Reset manager state (for connection close)
auto stream_count() const -> size_t
Get number of active streams.
uint64_t peer_max_streams_bidi_
void set_peer_max_streams_bidi(uint64_t max)
Set maximum bidirectional streams peer can initiate.
auto get_or_create_stream(uint64_t stream_id) -> Result< stream * >
Get or create a stream for a peer-initiated stream ID.
void for_each_stream(const std::function< void(stream &)> &callback)
Iterate over all streams.
auto is_local_stream(uint64_t stream_id) const noexcept -> bool
auto can_create_local_stream(bool bidirectional) const -> bool
auto local_uni_streams_count() const noexcept -> uint64_t
Get count of locally-initiated unidirectional streams.
auto peer_bidi_streams_count() const noexcept -> uint64_t
Get count of peer-initiated bidirectional streams.
stream_manager(stream_manager &&)=delete
auto validate_stream_id(uint64_t stream_id) const -> VoidResult
uint64_t next_local_uni_id_
auto operator=(stream_manager &&) -> stream_manager &=delete
std::map< uint64_t, std::unique_ptr< stream > > streams_
uint64_t highest_peer_uni_id_
uint64_t next_local_bidi_id_
QUIC stream implementation (RFC 9000 Sections 2-4)
Result< std::monostate > VoidResult
Network-specific error and result type definitions.