88 HttpEvent(std::vector<netplus::socket*> serversocket,
int timeout = 1000,
89 size_t h2OffloadThreads = 0,
int idleTimeoutSeconds = 0,
90 size_t h1OffloadThreads = 0,
size_t h2DispatchQueueMax = 0,
91 size_t h1DispatchQueueMax = 0);
100 virtual bool shouldOffloadH2Dispatch(
HttpRequest &tempreq, uint32_t streamId)
const {
110 virtual bool shouldOffloadH1Dispatch(
HttpRequest &cureq)
const {
114 virtual void RequestEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
115 virtual void ResponseEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
116 virtual void ConnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
117 virtual void DisconnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
119 virtual bool Http2RequestEvent(netplus::con &curcon,
122 const std::string &alpn,
123 const netplus::ssl::FramingCallback &frame_cb);
124 virtual void Http3StreamEvent(netplus::socket *sock,
126 const std::vector<uint8_t> &data,
133 virtual bool onH2StreamHeaders(
HttpRequest &conn, uint32_t streamId,
134 const std::vector<hpack::HeaderField> &headers);
135 virtual bool onH3StreamHeaders(netplus::socket *sock, uint64_t streamId,
136 const std::vector<qpack::HeaderField> &headers);
140 virtual void onH2DataChunk(
HttpRequest &conn, uint32_t streamId,
141 const char *data,
size_t len,
bool endStream,
142 std::string &h2out,
const int tid, ULONG_PTR args);
143 virtual void onH3DataChunk(netplus::socket *sock, uint64_t streamId,
144 const char *data,
size_t len,
bool fin);
148 void sendH2StreamResponse(std::string &h2out, uint32_t streamId,
149 uint16_t status,
const std::string &contentType,
150 const std::string &body);
151 void sendH3StreamResponse(netplus::socket *sock, uint64_t streamId,
152 uint16_t status,
const std::string &contentType,
153 const std::string &body);
154 virtual void CreateConnection(std::shared_ptr<netplus::con> &res);
156 virtual void RequestEvent(netplus::con &curcon,
const int tid, ULONG_PTR args);
157 virtual void ResponseEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
158 virtual void ConnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
159 virtual void DisconnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
161 std::string _altSvcH3;
165 netplus::TlsSessionCache _tlsSessionCache;
169 struct H3StreamState {
170 std::vector<uint8_t> data;
171 bool headersParsed =
false;
172 bool streaming =
false;
173 size_t parseOffset = 0;
175 std::mutex _h3BufferMutex;
176 std::map<uint64_t, H3StreamState> _h3StreamStates;
177 std::atomic<int> _h3NextTid{0};
181 std::unique_ptr<netplus::ThreadPool> _h2DispatchPool;
185 std::unique_ptr<netplus::ThreadPool> _h1DispatchPool;
192 std::unique_ptr<netplus::ThreadPool> _h3StreamPool;
199 bool _dispatchH2Stream(
HttpRequest &cureq, std::string &out,
201 const std::vector<hpack::HeaderField> &decoded,
202 const std::string &reqBody,
203 const int tid, ULONG_PTR args);
228 void _dispatchH1Request(
HttpRequest &cureq,
size_t consumeBodyBytes,
229 const int tid, ULONG_PTR args);
236 void _finishH2Dispatch(
HttpRequest &cureq, std::string &out,
238 std::unique_ptr<HttpRequest> tempreq,
239 const int tid, ULONG_PTR args);
244 void _resumeH2Streams(
HttpRequest &cureq, std::string &out,
245 const int tid, ULONG_PTR args);
246 void _reapStalledH2Streams(
HttpRequest &cureq, std::string &out);
267 HttpD(
int argc,
char** argv);
268 HttpD(
const std::string &httpaddr,
int port,
int maxconnections,
const std::string &sslcertpath,
const std::string &sslkeypath,
const std::string &sslpassword =
"");
273 HttpD(
const std::string &httpaddr,
int port,
int maxconnections,
274 const std::map<std::string, netplus::ssl::CertificateBundle> &certsByHostname);
276 std::vector<netplus::socket*> getServerSockets();
279 bool reloadCertificates(
const std::string &certpath,
const std::string &keypath,
const std::string &password =
"");
283 bool reloadCertificate(
const std::string &hostname,
const std::string &certpath,
284 const std::string &keypath,
const std::string &password =
"");
290 std::vector<std::unique_ptr<netplus::socket>> _ServerSockets;
291 std::map<std::string, netplus::ssl::CertificateBundle> _certBundle;