52 HttpEvent(std::vector<netplus::socket*> serversocket,
int timeout = 1000);
54 virtual void RequestEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
55 virtual void ResponseEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
56 virtual void ConnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
57 virtual void DisconnectEvent(
HttpRequest &curreq,
const int tid,ULONG_PTR args);
59 virtual bool Http2RequestEvent(netplus::con &curcon,
62 const std::string &alpn,
63 const netplus::ssl::FramingCallback &frame_cb);
64 virtual void Http3StreamEvent(netplus::socket *sock,
66 const std::vector<uint8_t> &data,
73 virtual bool onH2StreamHeaders(
HttpRequest &conn, uint32_t streamId,
74 const std::vector<hpack::HeaderField> &headers);
75 virtual bool onH3StreamHeaders(netplus::socket *sock, uint64_t streamId,
76 const std::vector<qpack::HeaderField> &headers);
80 virtual void onH2DataChunk(
HttpRequest &conn, uint32_t streamId,
81 const char *data,
size_t len,
bool endStream,
82 std::string &h2out,
const int tid, ULONG_PTR args);
83 virtual void onH3DataChunk(netplus::socket *sock, uint64_t streamId,
84 const char *data,
size_t len,
bool fin);
88 void sendH2StreamResponse(std::string &h2out, uint32_t streamId,
89 uint16_t status,
const std::string &contentType,
90 const std::string &body);
91 void sendH3StreamResponse(netplus::socket *sock, uint64_t streamId,
92 uint16_t status,
const std::string &contentType,
93 const std::string &body);
94 virtual void CreateConnection(std::shared_ptr<netplus::con> &res);
96 virtual void RequestEvent(netplus::con &curcon,
const int tid, ULONG_PTR args);
97 virtual void ResponseEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
98 virtual void ConnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
99 virtual void DisconnectEvent(netplus::con &curcon,
const int tid,ULONG_PTR args);
101 std::string _altSvcH3;
105 netplus::TlsSessionCache _tlsSessionCache;
109 struct H3StreamState {
110 std::vector<uint8_t> data;
111 bool headersParsed =
false;
112 bool streaming =
false;
113 size_t parseOffset = 0;
115 std::mutex _h3BufferMutex;
116 std::map<uint64_t, H3StreamState> _h3StreamStates;
117 std::atomic<int> _h3NextTid{0};
118 void _dispatchH2Stream(
HttpRequest &cureq, std::string &out,
120 const std::vector<hpack::HeaderField> &decoded,
121 const std::string &reqBody,
122 const int tid, ULONG_PTR args);
123 void _resumeH2Streams(
HttpRequest &cureq, std::string &out,
124 const int tid, ULONG_PTR args);
129 HttpD(
int argc,
char** argv);
130 HttpD(
const std::string &httpaddr,
int port,
int maxconnections,
const std::string &sslcertpath,
const std::string &sslkeypath,
const std::string &sslpassword =
"");
132 std::vector<netplus::socket*> getServerSockets();
138 std::vector<std::unique_ptr<netplus::socket>> _ServerSockets;
139 std::map<std::string, netplus::ssl::CertificateBundle> _certBundle;