33#ifndef NETWORK_USE_EXPERIMENTAL
34#define NETWORK_USE_EXPERIMENTAL
36#include "kcenon/network/internal/experimental/quic_client.h"
37#include "kcenon/network/internal/interfaces/i_quic_server.h"
70 :
public std::enable_shared_from_this<quic_session>
79 quic_session(std::shared_ptr<internal::quic_socket> socket,
99 [[nodiscard]]
auto session_id() const -> const std::
string&;
111 [[nodiscard]] auto
is_active() const noexcept ->
bool;
143 [[nodiscard]] auto
stats() const -> core::quic_connection_stats;
154 std::function<
void(const std::vector<uint8_t>&)> callback) ->
void;
161 std::function<
void(uint64_t, const std::vector<uint8_t>&,
bool)>
191 const protocols::quic::connection_id& conn_id) const ->
bool;
203 [[nodiscard]] auto
id() const -> std::string_view
override {
224 [[nodiscard]]
auto send(std::vector<uint8_t>&& data) ->
VoidResult override;
232 auto result =
close(0);
263 std::vector<uint8_t>&& data,
281 std::span<const uint8_t> data,
284 auto on_error(std::error_code ec) -> void;
286 auto on_close(uint64_t error_code,
const std::string& reason) -> void;
295 std::shared_ptr<internal::quic_socket>
socket_;
303 std::function<void(uint64_t,
const std::vector<uint8_t>&,
bool)>
Interface for a QUIC session on the server side.
Represents a single QUIC client session on the server side.
std::function< void()> close_callback_
auto close() -> void override
Closes the session (interface version).
auto close_stream(uint64_t stream_id) -> VoidResult override
Closes a stream (interface version).
auto matches_connection_id(const protocols::quic::connection_id &conn_id) const -> bool
Check if this session matches a connection ID.
auto set_receive_callback(std::function< void(const std::vector< uint8_t > &)> callback) -> void
Set callback for received data on the default stream.
auto on_error(std::error_code ec) -> void
auto handle_packet(std::span< const uint8_t > data) -> void
Handle incoming packet (called by server).
auto create_stream() -> Result< uint64_t > override
Creates a new bidirectional stream (interface version).
std::function< void(const std::vector< uint8_t > &)> receive_callback_
quic_session(const quic_session &)=delete
auto set_stream_receive_callback(std::function< void(uint64_t, const std::vector< uint8_t > &, bool)> callback) -> void
Set callback for stream data reception.
std::atomic< bool > is_active_
quic_session(std::shared_ptr< internal::quic_socket > socket, std::string_view session_id)
Constructs a QUIC session with an existing socket.
auto send_on_stream(uint64_t stream_id, std::vector< uint8_t > &&data, bool fin=false) -> VoidResult override
Sends data on a specific stream (interface version).
std::mutex callback_mutex_
~quic_session() noexcept
Destructor; closes the session if still active.
std::function< void(uint64_t, const std::vector< uint8_t > &, bool)> stream_receive_callback_
auto create_unidirectional_stream() -> Result< uint64_t > override
Creates a new unidirectional stream (interface version).
auto on_stream_data(uint64_t stream_id, std::span< const uint8_t > data, bool fin) -> void
auto session_id() const -> const std::string &
Get the unique session identifier.
auto is_connected() const -> bool override
Checks if the session is currently connected (interface version).
uint64_t default_stream_id_
auto start_session() -> void
Start receiving data (called by server).
auto remote_endpoint() const -> asio::ip::udp::endpoint
Get the remote endpoint address.
auto is_active() const noexcept -> bool
Check if the session is currently active.
auto send(std::string_view data) -> VoidResult
Send string data on the default stream.
quic_session & operator=(const quic_session &)=delete
std::shared_ptr< internal::quic_socket > socket_
auto stats() const -> core::quic_connection_stats
Get connection statistics.
auto set_close_callback(std::function< void()> callback) -> void
Set callback when session closes.
auto on_close(uint64_t error_code, const std::string &reason) -> void
QUIC connection identifier type.
Network-specific error and result type definitions.