192 void setState(
const std ::string &httpstate);
193 void setContentType(
const std ::string &type);
194 void setContentLength(
size_t len);
195 void setConnection(
const std ::string &type);
196 void setTransferEncoding(
const std ::string &enc);
199 const std ::string &getState()
const;
200 int getStatusCode()
const;
201 const std ::string &getContentType()
const;
202 size_t getContentLength()
const;
203 const std ::string &getConnection()
const;
204 const std ::string &getVersion()
const;
207 size_t printHeader(std::vector<char> &buffer);
210 void send(netplus::con &curconnection,
const std::string &data,
int datalen=0);
211 void send(netplus::con &curconnection,
const unsigned char *data,
int datalen);
212 void send(netplus::con &curconnection,
const std::vector<char> &data,
int datalen=0);
215 size_t parse(
const char *in,
size_t inlen);
218 bool _storeResponseInfo(netplus::con &curconnection,
int datalen);
220 std::string _State=HTTP200;
221 std::string _Version;
227 mutable std::string _ContentTypeCache;
244 size_t parseH2(
const std::vector<hpack::HeaderField> &headers, uint32_t stream_id = 0);
245 size_t parseH3(
const std::vector<qpack::HeaderField> &headers);
247 void printHeader(std::string &buffer);
248 int getRequestType();
249 const std::string &getRequestURL();
250 const std::string &getRequest();
251 size_t getRequestLength();
252 const std::string &getRequestVersion();
253 size_t getContentLength();
254 size_t getMaxUploadSize();
260 void setRequestType(
int req);
261 void setRequestURL(
const std::string &url);
262 void setRequestVersion(
const std::string &version);
264 void setRequestData(
const std::string &data,
size_t len);
265 void setMaxUploadSize(
size_t upsize);
267 void send(
const HttpUrl &dest,std::unique_ptr<netplus::socket> &sock);
276 static std::string extractPath(
const std::string &target);
278 int _RequestType = PARSEREQUEST;
279 size_t _MaxUploadSize = DEFAULT_UPLOADSIZE;
283 mutable std::string _cachedRequestURL;
284 mutable std::string _cachedRequest;
285 mutable std::string _cachedRequestVersion;
291 int _httpProtocol = 0;
293 struct H2PendingResponse {
299 struct H2PendingIncoming {
300 std::vector<hpack::HeaderField> headers;
305 uint32_t streamId = 0;
306 bool headersSent =
false;
307 size_t expectedContentLength = 0;
308 size_t bodyBytesSent = 0;
309 std::deque<H2PendingResponse> pendingResponses;
310 std::map<uint32_t, H2PendingIncoming> pendingIncoming;
315 std::unique_ptr<H2State> _h2;
319 if (!_h2) _h2 = std::make_unique<H2State>();
342 std::vector<Header> headers;
343 std::vector<Disposition> dispositions;
344 std::vector<char> value;
359 const std::string &getContentType()
const {
return _contentType; }
360 const std::string &getBoundary()
const {
return _boundary; }
361 const std::vector<MultipartEntry> &multipartData()
const {
return _multipartEntries; }
362 const std::vector<UrlEntry> &urlData()
const {
return _urlEntries; }
365 static void urlDecode(
const std::string &in, std::string &out);
366 static void urlEncode(
const std::string &in, std::string &out);
369 void _parseMultipart(
const char *data,
size_t len);
370 void _parseMultiSection(
const char *data,
size_t len,
size_t start,
size_t end);
371 void _parseUrlDecode(
const char *data,
size_t len);
373 std::string _boundary;
374 std::string _contentType;
375 std::vector<MultipartEntry> _multipartEntries;
376 std::vector<UrlEntry> _urlEntries;