Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
quic_facade.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
11#pragma once
12
21#include <cstdint>
22#include <memory>
23#include <optional>
24#include <string>
25#include <vector>
26
28
30{
31 class i_protocol_client;
32 class i_protocol_server;
33} // namespace kcenon::network::interfaces
34
36{
37
81{
82public:
88 {
90 std::string host;
91
93 uint16_t port = 0;
94
96 std::string client_id;
97
99 std::optional<std::string> ca_cert_path;
100
102 std::optional<std::string> client_cert_path;
103
105 std::optional<std::string> client_key_path;
106
108 bool verify_server = true;
109
111 std::string alpn;
112
114 uint64_t max_idle_timeout_ms = 30000;
115
117 bool enable_0rtt = false;
118 };
119
125 {
127 uint16_t port = 0;
128
130 std::string server_id;
131
133 std::string cert_path;
134
136 std::string key_path;
137
139 std::optional<std::string> ca_cert_path;
140
143
145 std::string alpn;
146
148 uint64_t max_idle_timeout_ms = 30000;
149
151 size_t max_connections = 10000;
152 };
153
173 [[nodiscard]] auto create_client(const client_config& config) const
175
196 [[nodiscard]] auto create_server(const server_config& config) const
198
199private:
201 [[nodiscard]] static auto generate_client_id() -> std::string;
202
204 [[nodiscard]] static auto generate_server_id() -> std::string;
205
207 static auto validate_client_config(const client_config& config) -> VoidResult;
208
210 static auto validate_server_config(const server_config& config) -> VoidResult;
211};
212
213} // namespace kcenon::network::facade
Simplified facade for creating QUIC clients and servers.
Definition quic_facade.h:81
static auto generate_client_id() -> std::string
Generates a unique client ID.
static auto generate_server_id() -> std::string
Generates a unique server ID.
static auto validate_client_config(const client_config &config) -> VoidResult
Validates client configuration.
auto create_client(const client_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_client > >
Creates a QUIC client with the specified configuration.
static auto validate_server_config(const server_config &config) -> VoidResult
Validates server configuration.
auto create_server(const server_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_server > >
Creates a QUIC server with the specified configuration.
Result< std::monostate > VoidResult
Public header for Result<T> error handling types.
Configuration for creating a QUIC client.
Definition quic_facade.h:88
std::string alpn
ALPN protocol identifier (e.g., "h3", "hq-29")
std::string host
Server hostname or IP address.
Definition quic_facade.h:90
bool enable_0rtt
Enable 0-RTT early data (default: false)
std::string client_id
Client identifier (optional, auto-generated if not provided)
Definition quic_facade.h:96
uint64_t max_idle_timeout_ms
Maximum idle timeout in milliseconds (default: 30 seconds)
std::optional< std::string > ca_cert_path
Path to CA certificate file for server verification (PEM format)
Definition quic_facade.h:99
std::optional< std::string > client_key_path
Path to client private key file for mutual TLS (PEM format)
bool verify_server
Whether to verify server certificate (default: true)
std::optional< std::string > client_cert_path
Path to client certificate file for mutual TLS (PEM format)
Configuration for creating a QUIC server.
std::optional< std::string > ca_cert_path
Path to CA certificate file for client verification (optional)
uint64_t max_idle_timeout_ms
Maximum idle timeout in milliseconds (default: 30 seconds)
std::string key_path
Path to server private key file (PEM format, required)
bool require_client_cert
Whether to require client certificate (mutual TLS)
size_t max_connections
Maximum number of concurrent connections (default: 10000)
std::string alpn
ALPN protocol identifier (e.g., "h3", "hq-29")
std::string cert_path
Path to server certificate file (PEM format, required)
std::string server_id
Server identifier (optional, auto-generated if not provided)