20auto generate_unique_id(std::string_view prefix) -> std::string
22 static std::atomic<uint64_t>
counter{0};
23 auto now = std::chrono::steady_clock::now().time_since_epoch().count();
24 auto count =
counter.fetch_add(1);
26 std::ostringstream oss;
27 oss << prefix <<
"-" << now <<
"-" << count;
34auto parse_url(std::string_view url) -> std::pair<std::string, uint16_t>
36 std::string url_str(url);
39 const std::string quic_prefix =
"quic://";
40 if (url_str.substr(0, quic_prefix.size()) == quic_prefix) {
41 url_str = url_str.substr(quic_prefix.size());
45 auto colon_pos = url_str.rfind(
':');
46 if (colon_pos == std::string::npos) {
50 std::string host = url_str.substr(0, colon_pos);
51 std::string port_str = url_str.substr(colon_pos + 1);
55 port =
static_cast<uint16_t
>(std::stoi(port_str));
66auto extract_server_name(std::string_view url) -> std::string
68 auto [host, port] = parse_url(url);
75 -> std::unique_ptr<unified::i_connection>
77 std::string connection_id =
id.empty()
78 ? generate_unique_id(
"quic-conn")
81 return std::make_unique<unified::adapters::quic_connection_adapter>(
87 std::string_view
id) -> std::unique_ptr<unified::i_connection>
97 (void)conn->connect(endpoint);
103 std::string_view
id) -> std::unique_ptr<unified::i_connection>
105 auto [host, port] = parse_url(url);
106 if (host.empty() || port == 0) {
123 -> std::unique_ptr<unified::i_listener>
125 std::string listener_id =
id.empty()
126 ? generate_unique_id(
"quic-listener")
129 return std::make_unique<unified::adapters::quic_listener_adapter>(
135 std::string_view
id) -> std::unique_ptr<unified::i_listener>
138 (void)listener->start(bind_address);
143 -> std::unique_ptr<unified::i_listener>
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 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 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 create_connection(const quic_config &config={}, std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates a QUIC connection (not yet connected)
QUIC protocol connection factory and configuration.
Configuration options for QUIC connections.
std::string server_name
Server name for TLS SNI (required for client connections)
Network endpoint information (host/port or URL)