Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::protocol::quic Namespace Reference

Classes

struct  quic_config
 Configuration options for QUIC connections. More...
 

Functions

auto create_connection (const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
 Creates a QUIC connection (not yet connected)
 
auto connect (const unified::endpoint_info &endpoint, const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
 Creates and connects a QUIC connection in one call.
 
auto connect (std::string_view url, const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
 Creates and connects a QUIC connection using URL format.
 
auto create_listener (const quic_config &config, std::string_view id="") -> std::unique_ptr< unified::i_listener >
 Creates a QUIC listener (not yet listening)
 
auto listen (const unified::endpoint_info &bind_address, const quic_config &config, std::string_view id="") -> std::unique_ptr< unified::i_listener >
 Creates and starts a QUIC listener in one call.
 
auto listen (uint16_t port, const quic_config &config, std::string_view id="") -> std::unique_ptr< unified::i_listener >
 Creates and starts a QUIC listener on a specific port.
 

Function Documentation

◆ connect() [1/2]

auto kcenon::network::protocol::quic::connect ( const unified::endpoint_info & endpoint,
const quic_config & config = {},
std::string_view id = "" ) -> std::unique_ptr<unified::i_connection>
nodiscard

Creates and connects a QUIC connection in one call.

Parameters
endpointThe remote endpoint to connect to
configQUIC configuration options
idOptional unique identifier for the connection
Returns
Unique pointer to an i_connection instance (connecting)

This is a convenience function that creates a connection and immediately initiates the QUIC handshake to the specified endpoint.

Usage Example

cfg.server_name = "example.com";
auto conn = protocol::quic::connect({"example.com", 443}, cfg);
conn->set_callbacks({
.on_connected = []() { std::cout << "Connected!\n"; }
});
// QUIC handshake is already in progress
auto connect(const unified::endpoint_info &endpoint, const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates and connects a QUIC connection in one call.
Definition quic.cpp:85
Configuration options for QUIC connections.
Definition quic.h:45
std::string server_name
Server name for TLS SNI (required for client connections)
Definition quic.h:47

Definition at line 85 of file quic.cpp.

88{
89 // Ensure server_name is set for TLS
90 quic_config cfg = config;
91 if (cfg.server_name.empty()) {
92 cfg.server_name = endpoint.host;
93 }
94
95 auto conn = create_connection(cfg, id);
96 // Initiate connection (async, will complete in background)
97 (void)conn->connect(endpoint);
98 return conn;
99}
tracing_config config
Definition exporters.cpp:29
std::string host
Hostname, IP address, or full URL.
Definition types.h:57

References config, create_connection(), and kcenon::network::protocol::quic::quic_config::server_name.

Here is the call graph for this function:

◆ connect() [2/2]

auto kcenon::network::protocol::quic::connect ( std::string_view url,
const quic_config & config = {},
std::string_view id = "" ) -> std::unique_ptr<unified::i_connection>
nodiscard

Creates and connects a QUIC connection using URL format.

Parameters
urlThe URL to connect to (format: "quic://host:port" or "host:port")
configQUIC configuration options
idOptional unique identifier for the connection
Returns
Unique pointer to an i_connection instance (connecting)

If server_name is not set in config, it will be extracted from the URL.

Definition at line 101 of file quic.cpp.

104{
105 auto [host, port] = parse_url(url);
106 if (host.empty() || port == 0) {
107 // Return a connection that will fail on connect
108 return create_connection(config, id);
109 }
110
111 // Ensure server_name is set for TLS
112 quic_config cfg = config;
113 if (cfg.server_name.empty()) {
114 cfg.server_name = host;
115 }
116
117 auto conn = create_connection(cfg, id);
118 (void)conn->connect(unified::endpoint_info{host, port});
119 return conn;
120}
auto create_connection(const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates a QUIC connection (not yet connected)
Definition quic.cpp:74
Network endpoint information (host/port or URL)
Definition types.h:56

References config, create_connection(), and kcenon::network::protocol::quic::quic_config::server_name.

Here is the call graph for this function:

◆ create_connection()

auto kcenon::network::protocol::quic::create_connection ( const quic_config & config = {},
std::string_view id = "" ) -> std::unique_ptr<unified::i_connection>
nodiscard

Creates a QUIC connection (not yet connected)

Parameters
configQUIC configuration options
idOptional unique identifier for the connection
Returns
Unique pointer to an i_connection instance

The returned connection is not connected. Call connect() to establish the connection to a remote endpoint.

QUIC Semantics

QUIC connections have built-in TLS 1.3 encryption, multiplexed streams, and support for connection migration.

  • connect() initiates the QUIC handshake
  • is_connected() returns true after handshake completion
  • send() sends data on the default stream

Usage Example

cfg.server_name = "example.com";
cfg.alpn_protocols = {"h3"};
auto conn = protocol::quic::create_connection(cfg, "my-quic-client");
conn->set_callbacks({
.on_connected = []() { std::cout << "Connected!\n"; },
.on_data = [](std::span<const std::byte> data) {
// Handle received data
}
});
conn->connect({"example.com", 443});
std::vector< std::string > alpn_protocols
ALPN (Application-Layer Protocol Negotiation) protocols.
Definition quic.h:56

Definition at line 74 of file quic.cpp.

76{
77 std::string connection_id = id.empty()
78 ? generate_unique_id("quic-conn")
79 : std::string(id);
80
81 return std::make_unique<unified::adapters::quic_connection_adapter>(
82 config, connection_id);
83}

References config.

Referenced by connect(), and connect().

Here is the caller graph for this function:

◆ create_listener()

auto kcenon::network::protocol::quic::create_listener ( const quic_config & config,
std::string_view id = "" ) -> std::unique_ptr<unified::i_listener>
nodiscard

Creates a QUIC listener (not yet listening)

Parameters
configQUIC configuration options (cert_file and key_file required)
idOptional unique identifier for the listener
Returns
Unique pointer to an i_listener instance

The returned listener is not listening. Call start() to begin accepting connections.

QUIC Server Requirements

QUIC servers require TLS certificates. The cert_file and key_file must be set in the configuration.

Usage Example

cfg.cert_file = "/path/to/cert.pem";
cfg.key_file = "/path/to/key.pem";
cfg.alpn_protocols = {"h3"};
auto listener = protocol::quic::create_listener(cfg, "my-quic-server");
listener->set_callbacks({
.on_accept = [](std::string_view conn_id) {
std::cout << "New connection: " << conn_id << "\n";
},
.on_data = [](std::string_view conn_id, std::span<const std::byte> data) {
// Handle received data from conn_id
}
});
listener->start(443);
auto create_listener(const quic_config &config, std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates a QUIC listener (not yet listening)
Definition quic.cpp:122
std::string cert_file
Path to certificate file (required for server)
Definition quic.h:50
std::string key_file
Path to private key file (required for server)
Definition quic.h:53

Definition at line 122 of file quic.cpp.

124{
125 std::string listener_id = id.empty()
126 ? generate_unique_id("quic-listener")
127 : std::string(id);
128
129 return std::make_unique<unified::adapters::quic_listener_adapter>(
130 config, listener_id);
131}

References config.

Referenced by listen().

Here is the caller graph for this function:

◆ listen() [1/2]

auto kcenon::network::protocol::quic::listen ( const unified::endpoint_info & bind_address,
const quic_config & config,
std::string_view id = "" ) -> std::unique_ptr<unified::i_listener>
nodiscard

Creates and starts a QUIC listener in one call.

Parameters
bind_addressThe local address to bind to
configQUIC configuration options (cert_file and key_file required)
idOptional unique identifier for the listener
Returns
Unique pointer to an i_listener instance (listening)

This is a convenience function that creates a listener and immediately starts listening on the specified address.

Usage Example

cfg.cert_file = "/path/to/cert.pem";
cfg.key_file = "/path/to/key.pem";
auto listener = protocol::quic::listen({"0.0.0.0", 443}, cfg);
listener->set_callbacks({
.on_accept = [](std::string_view conn_id) { }
});
// Listener is already accepting connections
auto listen(const unified::endpoint_info &bind_address, const quic_config &config, std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates and starts a QUIC listener in one call.
Definition quic.cpp:133

Definition at line 133 of file quic.cpp.

136{
137 auto listener = create_listener(config, id);
138 (void)listener->start(bind_address);
139 return listener;
140}

References config, and create_listener().

Referenced by listen().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ listen() [2/2]

auto kcenon::network::protocol::quic::listen ( uint16_t port,
const quic_config & config,
std::string_view id = "" ) -> std::unique_ptr<unified::i_listener>
nodiscard

Creates and starts a QUIC listener on a specific port.

Parameters
portThe port number to listen on
configQUIC configuration options (cert_file and key_file required)
idOptional unique identifier for the listener
Returns
Unique pointer to an i_listener instance (listening)

Convenience overload that binds to all interfaces (0.0.0.0).

Definition at line 142 of file quic.cpp.

144{
145 return listen(unified::endpoint_info{"0.0.0.0", port}, config, id);
146}

References config, and listen().

Here is the call graph for this function: