59 HttpEvent(std::vector<netplus::socket*> serversocket,
int timeout = 1000,
60 size_t h2OffloadThreads = 0);
69 virtual bool shouldOffloadH2Dispatch(
HttpRequest &tempreq, uint32_t streamId)
const {
73 virtual void RequestEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
74 virtual void ResponseEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
75 virtual void ConnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
76 virtual void DisconnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
78 virtual bool Http2RequestEvent(netplus::con &curcon,
81 const std::string &alpn,
82 const netplus::ssl::FramingCallback &frame_cb);
83 virtual void Http3StreamEvent(netplus::socket *sock,
85 const std::vector<uint8_t> &data,
92 virtual bool onH2StreamHeaders(
HttpRequest &conn, uint32_t streamId,
93 const std::vector<hpack::HeaderField> &headers);
94 virtual bool onH3StreamHeaders(netplus::socket *sock, uint64_t streamId,
95 const std::vector<qpack::HeaderField> &headers);
99 virtual void onH2DataChunk(
HttpRequest &conn, uint32_t streamId,
100 const char *data,
size_t len,
bool endStream,
101 std::string &h2out,
const int tid, ULONG_PTR args);
102 virtual void onH3DataChunk(netplus::socket *sock, uint64_t streamId,
103 const char *data,
size_t len,
bool fin);
107 void sendH2StreamResponse(std::string &h2out, uint32_t streamId,
108 uint16_t status,
const std::string &contentType,
109 const std::string &body);
110 void sendH3StreamResponse(netplus::socket *sock, uint64_t streamId,
111 uint16_t status,
const std::string &contentType,
112 const std::string &body);
113 virtual void CreateConnection(std::shared_ptr<netplus::con> &res);
115 virtual void RequestEvent(netplus::con &curcon,
const int tid, ULONG_PTR args);
116 virtual void ResponseEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
117 virtual void ConnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
118 virtual void DisconnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
120 std::string _altSvcH3;
124 netplus::TlsSessionCache _tlsSessionCache;
128 struct H3StreamState {
129 std::vector<uint8_t> data;
130 bool headersParsed =
false;
131 bool streaming =
false;
132 size_t parseOffset = 0;
134 std::mutex _h3BufferMutex;
135 std::map<uint64_t, H3StreamState> _h3StreamStates;
136 std::atomic<int> _h3NextTid{0};
140 std::unique_ptr<netplus::ThreadPool> _h2DispatchPool;
147 bool _dispatchH2Stream(
HttpRequest &cureq, std::string &out,
149 const std::vector<hpack::HeaderField> &decoded,
150 const std::string &reqBody,
151 const int tid, ULONG_PTR args);
158 void _finishH2Dispatch(
HttpRequest &cureq, std::string &out,
160 std::unique_ptr<HttpRequest> tempreq,
161 const int tid, ULONG_PTR args);
166 void _resumeH2Streams(
HttpRequest &cureq, std::string &out,
167 const int tid, ULONG_PTR args);
168 void _reapStalledH2Streams(
HttpRequest &cureq, std::string &out);