31#include <shared_mutex>
35#include <system_error>
41#if KCENON_WITH_COMMON_SYSTEM
42 #include <kcenon/common/interfaces/monitoring_interface.h>
143 :
public std::enable_shared_from_this<messaging_quic_server>
153 const std::vector<uint8_t>&)>;
157 const std::vector<uint8_t>&,
210 [[nodiscard]] auto
server_id() const -> const std::
string&;
221 -> std::vector<std::shared_ptr<session::quic_session>>;
228 [[nodiscard]] auto
get_session(const std::
string& session_id)
229 -> std::shared_ptr<session::quic_session>;
244 uint64_t error_code = 0)
270 [[nodiscard]] auto
multicast(const std::vector<std::
string>& session_ids,
283 [[nodiscard]] auto
is_running() const ->
bool override;
398#if KCENON_WITH_COMMON_SYSTEM
403 auto set_monitor(kcenon::common::interfaces::IMonitor* monitor) -> void;
409 auto get_monitor() const ->
kcenon::common::interfaces::IMonitor*;
433 const asio::ip::udp::endpoint& from) -> void;
437 const asio::ip::udp::endpoint& endpoint)
438 -> std::shared_ptr<session::quic_session>;
470 const std::vector<uint8_t>& data) -> void;
481 const std::vector<uint8_t>& data,
511 std::unique_ptr<asio::executor_work_guard<asio::io_context::executor_type>>
521 std::map<std::string, std::shared_ptr<session::quic_session>>
sessions_;
536#if KCENON_WITH_COMMON_SYSTEM
537 kcenon::common::interfaces::IMonitor* monitor_ =
nullptr;
538 std::atomic<uint64_t> messages_received_{0};
539 std::atomic<uint64_t> messages_sent_{0};
540 std::atomic<uint64_t> connection_errors_{0};
Thread-safe callback registration and invocation manager.
A QUIC server that manages incoming client connections.
auto cleanup_dead_sessions() -> void
auto invoke_error_callback(std::error_code ec) -> void
Invokes the error callback.
auto is_running() const -> bool override
Checks if the server is currently running.
std::function< void(std::error_code)> error_callback_t
Callback type for errors.
auto on_session_close(const std::string &session_id) -> void
utils::lifecycle_manager lifecycle_
auto stop_server() -> VoidResult
Stops the server and releases all resources.
auto disconnect_all(uint64_t error_code=0) -> void
Disconnect all active sessions.
messaging_quic_server(std::string_view server_id)
Constructs a QUIC server with a given identifier.
auto sessions() const -> std::vector< std::shared_ptr< session::quic_session > >
Get all active sessions.
std::unique_ptr< asio::ip::udp::socket > udp_socket_
auto stop() -> VoidResult override
Stops the QUIC server.
auto disconnect_session(const std::string &session_id, uint64_t error_code=0) -> VoidResult
Disconnect a specific session.
asio::ip::udp::endpoint recv_endpoint_
auto broadcast(std::vector< uint8_t > &&data) -> VoidResult
Send data to all connected clients.
auto handle_packet(std::span< const uint8_t > data, const asio::ip::udp::endpoint &from) -> void
auto invoke_connection_callback(std::shared_ptr< session::quic_session > session) -> void
Invokes the connection callback.
auto start(uint16_t port) -> VoidResult override
Starts the QUIC server on the specified port.
auto set_stream_receive_callback(stream_receive_callback_t callback) -> void
Sets the callback for stream data reception (legacy version).
auto start_receive() -> void
std::shared_mutex sessions_mutex_
std::unique_ptr< asio::executor_work_guard< asio::io_context::executor_type > > work_guard_
std::array< uint8_t, 65536 > recv_buffer_
auto set_receive_callback(interfaces::i_quic_server::receive_callback_t callback) -> void override
Sets the callback for received data on default stream (interface version).
auto set_connection_callback(interfaces::i_quic_server::connection_callback_t callback) -> void override
Sets the callback for new connections (interface version).
auto session_count() const -> size_t
Get the number of active sessions.
auto start_server(unsigned short port) -> VoidResult
Start the server with default configuration.
std::atomic< uint64_t > session_counter_
std::function< void(std::shared_ptr< session::quic_session >, uint64_t, const std::vector< uint8_t > &, bool)> stream_receive_callback_t
Callback type for stream data (session, stream_id, data, fin)
auto do_start_impl(unsigned short port) -> VoidResult
QUIC-specific implementation of server start.
auto invoke_receive_callback(std::shared_ptr< session::quic_session > session, const std::vector< uint8_t > &data) -> void
Invokes the receive callback.
std::function< void(std::shared_ptr< session::quic_session >, const std::vector< uint8_t > &)> receive_callback_t
Callback type for received data (session, data)
auto generate_session_id() -> std::string
interfaces::i_quic_server::error_callback_t interface_error_cb_
quic_server_config config_
auto invoke_disconnection_callback(std::shared_ptr< session::quic_session > session) -> void
Invokes the disconnection callback.
std::function< void(std::shared_ptr< session::quic_session >)> disconnection_callback_t
Callback type for disconnections.
auto wait_for_stop() -> void override
Blocks until stop() is called.
std::map< std::string, std::shared_ptr< session::quic_session > > sessions_
std::shared_ptr< integration::thread_pool_interface > thread_pool_
auto get_session(const std::string &session_id) -> std::shared_ptr< session::quic_session >
Get a session by its ID.
std::future< void > io_context_future_
std::unique_ptr< asio::io_context > io_context_
~messaging_quic_server() noexcept override
Destructor; automatically calls stop_server() if running.
auto start_cleanup_timer() -> void
auto set_disconnection_callback(interfaces::i_quic_server::disconnection_callback_t callback) -> void override
Sets the callback for disconnections (interface version).
auto connection_count() const -> size_t override
Gets the number of active QUIC connections (interface version).
auto server_id() const -> const std::string &
Returns the server identifier.
auto do_stop_impl() -> VoidResult
QUIC-specific implementation of server stop.
auto find_or_create_session(const protocols::quic::connection_id &dcid, const asio::ip::udp::endpoint &endpoint) -> std::shared_ptr< session::quic_session >
auto invoke_stream_receive_callback(std::shared_ptr< session::quic_session > session, uint64_t stream_id, const std::vector< uint8_t > &data, bool fin) -> void
Invokes the stream receive callback.
auto set_stream_callback(interfaces::i_quic_server::stream_callback_t callback) -> void override
Sets the callback for stream data (interface version).
std::unique_ptr< asio::steady_timer > cleanup_timer_
auto set_error_callback(interfaces::i_quic_server::error_callback_t callback) -> void override
Sets the callback for errors (interface version).
auto multicast(const std::vector< std::string > &session_ids, std::vector< uint8_t > &&data) -> VoidResult
Send data to specific sessions.
std::function< void(std::shared_ptr< session::quic_session >)> connection_callback_t
Callback type for new connections.
Interface for QUIC server components.
std::function< void( std::string_view, uint64_t, const std::vector< uint8_t > &, bool)> stream_callback_t
Callback type for stream data (session_id, stream_id, data, is_fin)
std::function< void(std::string_view, std::error_code)> error_callback_t
Callback type for errors (session_id, error)
QUIC Connection ID (RFC 9000 Section 5.1)
Thread-safe lifecycle state management for network components.
QUIC connection identifier type.
Feature flags for network_system.
Macros and utilities for marking experimental APIs.
#define NETWORK_REQUIRE_EXPERIMENTAL
Enforces opt-in for experimental APIs at compile time.
Component lifecycle management (start, stop, restart).
Result< std::monostate > VoidResult
quic_server_callback
Callback indices for messaging_quic_server.
Global context for shared network system resources.
Network-specific error and result type definitions.
Configuration options for QUIC server.
std::string key_file
Path to server private key file (PEM format, required)
uint64_t max_idle_timeout_ms
Maximum idle timeout in milliseconds (default: 30 seconds)
uint64_t initial_max_stream_data
Initial maximum data per stream (default: 64 KB)
std::string cert_file
Path to server certificate file (PEM format, required)
std::optional< std::string > ca_cert_file
Path to CA certificate file for client verification (optional)
std::vector< std::string > alpn_protocols
ALPN protocols to negotiate.
uint64_t initial_max_streams_bidi
Initial maximum bidirectional streams (default: 100)
size_t max_connections
Maximum number of concurrent connections (default: 10000)
uint64_t initial_max_data
Initial maximum data that can be sent (default: 1 MB)
uint64_t initial_max_streams_uni
Initial maximum unidirectional streams (default: 100)
bool require_client_cert
Whether to require client certificate (mutual TLS)
std::vector< uint8_t > retry_key
Key for retry token validation (auto-generated if empty)
bool enable_retry
Enable retry token for DoS protection (default: true)
Thread system integration interface for network_system.