Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
QuicConnectionManager.hpp
Go to the documentation of this file.
1#pragma once
3#include <unordered_map>
4#include <memory>
5#include <openssl/ssl.h>
6#include <vector>
7#include <cstring>
8#include <ngtcp2/ngtcp2.h>
11
12namespace server {
13
14class QuicConnection; // Forward declaration
15
17 std::size_t operator()(const ngtcp2_cid& cid) const {
18 std::size_t hash = 0;
19 for (size_t i = 0; i < cid.datalen; ++i) {
20 hash ^= (static_cast<std::size_t>(cid.data[i]) << (i % 8));
21 }
22 return hash;
23 }
24};
25
27 bool operator()(const ngtcp2_cid& a, const ngtcp2_cid& b) const {
28 if (a.datalen != b.datalen) return false;
29 return std::memcmp(a.data, b.data, a.datalen) == 0;
30 }
31};
32
37public:
43 QuicConnectionManager(network::UdpSocket& socket, SSL_CTX* ssl_ctx);
45
52 void on_packet_received(const uint8_t* data, size_t datalen, const sockaddr_in& remote_addr);
53
61 void send_packet(const uint8_t* data, size_t datalen, const sockaddr* remote_addr, socklen_t remote_addrlen);
62
63private: // Periodically handle QUIC timers for all connections
64 void handle_timers();
65
66private:
67 network::UdpSocket& socket_;
68 SSL_CTX* ssl_ctx_{nullptr};
69 std::unordered_map<ngtcp2_cid, std::shared_ptr<QuicConnection>, QuicConnectionIdHash, QuicConnectionIdEqual> connections_;
70};
71
72} // namespace server
Definition UdpSocket.hpp:7
Manages QUIC connections.
Definition QuicConnectionManager.hpp:36
~QuicConnectionManager()
Definition QuicConnectionManager.cpp:16
void on_packet_received(const uint8_t *data, size_t datalen, const sockaddr_in &remote_addr)
Processes an incoming UDP packet for QUIC.
Definition QuicConnectionManager.cpp:19
void send_packet(const uint8_t *data, size_t datalen, const sockaddr *remote_addr, socklen_t remote_addrlen)
Sends a QUIC packet to a remote address.
Definition QuicConnectionManager.cpp:85
Definition Http2Session.hpp:17
Definition QuicConnectionManager.hpp:26
bool operator()(const ngtcp2_cid &a, const ngtcp2_cid &b) const
Definition QuicConnectionManager.hpp:27
Definition QuicConnectionManager.hpp:16
std::size_t operator()(const ngtcp2_cid &cid) const
Definition QuicConnectionManager.hpp:17