| doc_id | NET-API-004 |
|---|---|
| doc_title | QUIC API Reference |
| doc_version | 1.0.0 |
| doc_date | 2026-04-04 |
| doc_status | Released |
| project | network_system |
| category | API |
SSOT: This document is the single source of truth for QUIC API Reference.
namespace network_system::coreA QUIC client that provides reliable, multiplexed communication.
explicit messaging_quic_client(std::string_view client_id);Parameters:
client_id: A string identifier for logging/debugging
Example:
auto client = std::make_shared<messaging_quic_client>("my_client");[[nodiscard]] auto start_client(std::string_view host,
unsigned short port) -> VoidResult;
[[nodiscard]] auto start_client(std::string_view host,
unsigned short port,
const quic_client_config& config) -> VoidResult;Starts the client and connects to the QUIC server.
Parameters:
host: Server hostname or IP addressport: Server port numberconfig: Optional QUIC client configuration
Returns: VoidResult indicating success or error
Errors:
already_exists: Client is already runninginvalid_argument: Host is emptyinternal_error: Other failures
Example:
quic_client_config config;
config.verify_server = false;
config.max_idle_timeout_ms = 60000;
auto result = client->start_client("example.com", 443, config);
if (result.is_err()) {
std::cerr << "Failed: " << result.error().message << "\n";
}[[nodiscard]] auto stop_client() -> VoidResult;Stops the client and closes the connection.
Returns: VoidResult indicating success or error
auto wait_for_stop() -> void;Blocks until stop_client() is complete.
[[nodiscard]] auto is_connected() const noexcept -> bool;Check if connected to the server.
Returns: true if connected
[[nodiscard]] auto is_handshake_complete() const noexcept -> bool;Check if TLS handshake is complete.
Returns: true if handshake is done
[[nodiscard]] auto send_packet(std::vector<uint8_t>&& data) -> VoidResult;Send binary data on the default stream.
Parameters:
data: Data to send (moved for efficiency)
Returns: VoidResult indicating success or error
Errors:
connection_closed: Not connectedinvalid_argument: Data is emptysend_failed: Other failures
[[nodiscard]] auto send_packet(std::string_view data) -> VoidResult;Send string data on the default stream.
Parameters:
data: String to send
Returns: VoidResult indicating success or error
[[nodiscard]] auto create_stream() -> Result<uint64_t>;Create a new bidirectional stream.
Returns: Stream ID or error
Example:
auto stream_result = client->create_stream();
if (stream_result.is_ok()) {
uint64_t stream_id = stream_result.value();
client->send_on_stream(stream_id, {'d', 'a', 't', 'a'});
}[[nodiscard]] auto create_unidirectional_stream() -> Result<uint64_t>;Create a new unidirectional stream.
Returns: Stream ID or error
[[nodiscard]] auto send_on_stream(uint64_t stream_id,
std::vector<uint8_t>&& data,
bool fin = false) -> VoidResult;Send data on a specific stream.
Parameters:
stream_id: Target stream IDdata: Data to send (moved for efficiency)fin: True if this is the final data on the stream
Returns: VoidResult indicating success or error
[[nodiscard]] auto close_stream(uint64_t stream_id) -> VoidResult;Close a stream.
Parameters:
stream_id: Stream to close
Returns: VoidResult indicating success or error
auto set_receive_callback(
std::function<void(const std::vector<uint8_t>&)> callback) -> void;Set callback for received data on the default stream.
Example:
client->set_receive_callback([](const std::vector<uint8_t>& data) {
std::cout << "Received: " << data.size() << " bytes\n";
});auto set_stream_receive_callback(
std::function<void(uint64_t stream_id,
const std::vector<uint8_t>& data,
bool fin)> callback) -> void;Set callback for stream data reception (all streams).
Example:
client->set_stream_receive_callback(
[](uint64_t stream_id, const auto& data, bool fin) {
std::cout << "Stream " << stream_id << ": "
<< data.size() << " bytes (fin=" << fin << ")\n";
});auto set_connected_callback(std::function<void()> callback) -> void;Set callback when connection is established.
auto set_disconnected_callback(std::function<void()> callback) -> void;Set callback when disconnected.
auto set_error_callback(std::function<void(std::error_code)> callback) -> void;Set callback for errors.
auto set_alpn_protocols(const std::vector<std::string>& protocols) -> void;Set ALPN protocols for negotiation.
Example:
client->set_alpn_protocols({"h3", "h3-29"});[[nodiscard]] auto alpn_protocol() const -> std::optional<std::string>;Get the negotiated ALPN protocol.
Returns: Protocol string if negotiated, empty optional otherwise
[[nodiscard]] auto stats() const -> quic_connection_stats;Get connection statistics.
A QUIC server that manages incoming client connections.
explicit messaging_quic_server(std::string_view server_id);Parameters:
server_id: A string identifier for logging/debugging
[[nodiscard]] auto start_server(unsigned short port) -> VoidResult;
[[nodiscard]] auto start_server(unsigned short port,
const quic_server_config& config) -> VoidResult;Start the server on the specified port.
Parameters:
port: UDP port to listen onconfig: Optional server configuration with TLS settings
Returns: VoidResult indicating success or error
Errors:
server_already_running: Already runningbind_failed: Port binding failedinternal_error: Other failures
[[nodiscard]] auto stop_server() -> VoidResult;Stop the server and close all connections.
auto wait_for_stop() -> void;Block until the server stops.
[[nodiscard]] auto is_running() const noexcept -> bool;Check if the server is running.
[[nodiscard]] auto sessions() const
-> std::vector<std::shared_ptr<session::quic_session>>;Get all active sessions.
[[nodiscard]] auto get_session(const std::string& session_id)
-> std::shared_ptr<session::quic_session>;Get a session by its ID.
Returns: Session pointer or nullptr if not found
[[nodiscard]] auto session_count() const -> size_t;Get the number of active sessions.
[[nodiscard]] auto disconnect_session(const std::string& session_id,
uint64_t error_code = 0) -> VoidResult;Disconnect a specific session.
Parameters:
session_id: Session to disconnecterror_code: Application error code (0 for no error)
auto disconnect_all(uint64_t error_code = 0) -> void;Disconnect all active sessions.
[[nodiscard]] auto broadcast(std::vector<uint8_t>&& data) -> VoidResult;Send data to all connected clients.
Example:
std::vector<uint8_t> message = {'H', 'e', 'l', 'l', 'o'};
server->broadcast(std::move(message));[[nodiscard]] auto multicast(const std::vector<std::string>& session_ids,
std::vector<uint8_t>&& data) -> VoidResult;Send data to specific sessions.
auto set_connection_callback(
std::function<void(std::shared_ptr<session::quic_session>)> callback) -> void;Set callback when a new client connects.
auto set_disconnection_callback(
std::function<void(std::shared_ptr<session::quic_session>)> callback) -> void;Set callback when a client disconnects.
auto set_receive_callback(
std::function<void(std::shared_ptr<session::quic_session>,
const std::vector<uint8_t>&)> callback) -> void;Set callback for received data from any session.
auto set_stream_receive_callback(
std::function<void(std::shared_ptr<session::quic_session>,
uint64_t stream_id,
const std::vector<uint8_t>&,
bool fin)> callback) -> void;Set callback for stream data from any session.
auto set_error_callback(std::function<void(std::error_code)> callback) -> void;Set callback for server errors.
struct quic_client_config {
std::optional<std::string> ca_cert_file; // CA cert for server verification
std::optional<std::string> client_cert_file; // Client cert for mutual TLS
std::optional<std::string> client_key_file; // Client key for mutual TLS
bool verify_server{true}; // Verify server certificate
std::vector<std::string> alpn_protocols; // ALPN protocols
uint64_t max_idle_timeout_ms{30000}; // Max idle timeout
uint64_t initial_max_data{1048576}; // Initial max data (1 MB)
uint64_t initial_max_stream_data{65536}; // Initial max stream data (64 KB)
uint64_t initial_max_streams_bidi{100}; // Max bidirectional streams
uint64_t initial_max_streams_uni{100}; // Max unidirectional streams
bool enable_early_data{false}; // Enable 0-RTT
std::optional<std::vector<uint8_t>> session_ticket; // Session ticket for 0-RTT
};struct quic_server_config {
std::string cert_file; // Server certificate (required)
std::string key_file; // Server private key (required)
std::optional<std::string> ca_cert_file; // CA cert for client verification
bool require_client_cert{false}; // Require client certificate
std::vector<std::string> alpn_protocols; // ALPN protocols
uint64_t max_idle_timeout_ms{30000}; // Max idle timeout
uint64_t initial_max_data{1048576}; // Initial max data
uint64_t initial_max_stream_data{65536}; // Initial max stream data
uint64_t initial_max_streams_bidi{100}; // Max bidirectional streams
uint64_t initial_max_streams_uni{100}; // Max unidirectional streams
size_t max_connections{10000}; // Max concurrent connections
bool enable_retry{true}; // Enable retry for DoS protection
std::vector<uint8_t> retry_key; // Key for retry token validation
};struct quic_connection_stats {
uint64_t bytes_sent{0}; // Total bytes sent
uint64_t bytes_received{0}; // Total bytes received
uint64_t packets_sent{0}; // Total packets sent
uint64_t packets_received{0}; // Total packets received
uint64_t packets_lost{0}; // Total packets lost
std::chrono::microseconds smoothed_rtt{0}; // Smoothed RTT
std::chrono::microseconds min_rtt{0}; // Minimum RTT
size_t cwnd{0}; // Congestion window size
};Represents a QUIC session (connection) on the server side.
[[nodiscard]] auto session_id() const -> std::string;Get the session identifier.
[[nodiscard]] auto remote_endpoint() const -> asio::ip::udp::endpoint;Get the remote endpoint (client address).
[[nodiscard]] auto send(std::vector<uint8_t>&& data) -> VoidResult;Send data to this client.
[[nodiscard]] auto send_on_stream(uint64_t stream_id,
std::vector<uint8_t>&& data,
bool fin = false) -> VoidResult;Send data on a specific stream.
auto close(uint64_t error_code = 0) -> void;Close this session.
[[nodiscard]] auto stats() const -> quic_connection_stats;Get session statistics.