Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
QuicHttp3Session.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <nghttp3/nghttp3.h>
4#include <memory>
5#include <string>
6#include <unordered_map>
7#include <vector>
10
11namespace server {
12
13class QuicConnection;
14
16 int64_t stream_id;
18 std::string body_buffer;
19 std::vector<std::string> header_storage;
20 bool headers_complete{false};
21 std::string response_body; // To store response payload
22
23 Http3Stream(int64_t id) : stream_id(id) {}
24};
25
30public:
35 explicit QuicHttp3Session(QuicConnection& quic_conn);
37
42 bool init();
43
48 nghttp3_conn* get_conn() const { return httpconn_; }
49
58 int process_stream_data(int64_t stream_id, const uint8_t* data, size_t datalen, bool fin);
59
64 int write_streams();
65
66private:
67 QuicConnection& quic_conn_;
68 nghttp3_conn* httpconn_{nullptr};
69 std::unordered_map<int64_t, std::shared_ptr<Http3Stream>> streams_;
70
71 // nghttp3 callbacks
72 static int on_acked_stream_data(nghttp3_conn *conn, int64_t stream_id, uint64_t datalen, void *conn_user_data, void *stream_user_data);
73 static int on_stream_close(nghttp3_conn *conn, int64_t stream_id, uint64_t app_error_code, void *conn_user_data, void *stream_user_data);
74 static int on_recv_data(nghttp3_conn *conn, int64_t stream_id, const uint8_t *data, size_t datalen, void *conn_user_data, void *stream_user_data);
75 static int on_deferred_consume(nghttp3_conn *conn, int64_t stream_id, size_t consumed, void *conn_user_data, void *stream_user_data);
76 static int on_begin_headers(nghttp3_conn *conn, int64_t stream_id, void *conn_user_data, void *stream_user_data);
77 static int on_recv_header(nghttp3_conn *conn, int64_t stream_id, int32_t token, nghttp3_rcbuf *name, nghttp3_rcbuf *value, uint8_t flags, void *conn_user_data, void *stream_user_data);
78 static int on_end_headers(nghttp3_conn *conn, int64_t stream_id, int fin, void *conn_user_data, void *stream_user_data);
79
80 std::shared_ptr<Http3Stream> get_or_create_stream(int64_t stream_id);
81 void handle_request(std::shared_ptr<Http3Stream> stream);
82};
83
84} // namespace server
Represents a single QUIC connection.
Definition QuicConnection.hpp:29
Manages an HTTP/3 session over a QUIC connection.
Definition QuicHttp3Session.hpp:29
bool init()
Initializes the HTTP/3 session.
Definition QuicHttp3Session.cpp:24
int write_streams()
Serializes HTTP/3 frames and feeds them to ngtcp2.
Definition QuicHttp3Session.cpp:61
~QuicHttp3Session()
Definition QuicHttp3Session.cpp:18
int process_stream_data(int64_t stream_id, const uint8_t *data, size_t datalen, bool fin)
Processes received QUIC stream data for HTTP/3.
Definition QuicHttp3Session.cpp:50
nghttp3_conn * get_conn() const
Gets the underlying nghttp3 connection.
Definition QuicHttp3Session.hpp:48
Definition Http2Session.hpp:17
Represents an incoming HTTP request.
Definition HttpRequest.hpp:22
Definition QuicHttp3Session.hpp:15
std::string body_buffer
Definition QuicHttp3Session.hpp:18
std::vector< std::string > header_storage
Definition QuicHttp3Session.hpp:19
http::HttpRequest request
Definition QuicHttp3Session.hpp:17
Http3Stream(int64_t id)
Definition QuicHttp3Session.hpp:23
bool headers_complete
Definition QuicHttp3Session.hpp:20
std::string response_body
Definition QuicHttp3Session.hpp:21
int64_t stream_id
Definition QuicHttp3Session.hpp:16