shrpx_https_upstream: Embed http_parser
This commit is contained in:
parent
811173f5c8
commit
769f560586
|
@ -50,18 +50,16 @@ const size_t SHRPX_HTTPS_MAX_HEADER_LENGTH = 64*1024;
|
||||||
|
|
||||||
HttpsUpstream::HttpsUpstream(ClientHandler *handler)
|
HttpsUpstream::HttpsUpstream(ClientHandler *handler)
|
||||||
: handler_(handler),
|
: handler_(handler),
|
||||||
htp_(new http_parser()),
|
|
||||||
current_header_length_(0),
|
current_header_length_(0),
|
||||||
downstream_(0),
|
downstream_(0),
|
||||||
ioctrl_(handler->get_bev())
|
ioctrl_(handler->get_bev())
|
||||||
{
|
{
|
||||||
http_parser_init(htp_, HTTP_REQUEST);
|
http_parser_init(&htp_, HTTP_REQUEST);
|
||||||
htp_->data = this;
|
htp_.data = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpsUpstream::~HttpsUpstream()
|
HttpsUpstream::~HttpsUpstream()
|
||||||
{
|
{
|
||||||
delete htp_;
|
|
||||||
delete downstream_;
|
delete downstream_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,7 +242,7 @@ namespace {
|
||||||
http_parser_settings htp_hooks = {
|
http_parser_settings htp_hooks = {
|
||||||
htp_msg_begin, /*http_cb on_message_begin;*/
|
htp_msg_begin, /*http_cb on_message_begin;*/
|
||||||
htp_uricb, /*http_data_cb on_url;*/
|
htp_uricb, /*http_data_cb on_url;*/
|
||||||
0, /*http_cb on_status_complete */
|
nullptr, /*http_cb on_status_complete */
|
||||||
htp_hdr_keycb, /*http_data_cb on_header_field;*/
|
htp_hdr_keycb, /*http_data_cb on_header_field;*/
|
||||||
htp_hdr_valcb, /*http_data_cb on_header_value;*/
|
htp_hdr_valcb, /*http_data_cb on_header_value;*/
|
||||||
htp_hdrs_completecb, /*http_cb on_headers_complete;*/
|
htp_hdrs_completecb, /*http_cb on_headers_complete;*/
|
||||||
|
@ -285,7 +283,7 @@ int HttpsUpstream::on_read()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t nread = http_parser_execute(htp_, &htp_hooks,
|
size_t nread = http_parser_execute(&htp_, &htp_hooks,
|
||||||
reinterpret_cast<const char*>(mem),
|
reinterpret_cast<const char*>(mem),
|
||||||
inputlen);
|
inputlen);
|
||||||
evbuffer_drain(input, nread);
|
evbuffer_drain(input, nread);
|
||||||
|
@ -295,7 +293,7 @@ int HttpsUpstream::on_read()
|
||||||
// execution
|
// execution
|
||||||
downstream = get_downstream();
|
downstream = get_downstream();
|
||||||
auto handler = get_client_handler();
|
auto handler = get_client_handler();
|
||||||
http_errno htperr = HTTP_PARSER_ERRNO(htp_);
|
http_errno htperr = HTTP_PARSER_ERRNO(&htp_);
|
||||||
if(htperr == HPE_PAUSED) {
|
if(htperr == HPE_PAUSED) {
|
||||||
if(downstream->get_request_state() == Downstream::CONNECT_FAIL) {
|
if(downstream->get_request_state() == Downstream::CONNECT_FAIL) {
|
||||||
handler->set_should_close_after_write(true);
|
handler->set_should_close_after_write(true);
|
||||||
|
@ -387,7 +385,7 @@ int HttpsUpstream::resume_read(IOCtrlReason reason, Downstream *downstream)
|
||||||
if(ioctrl_.resume_read(reason)) {
|
if(ioctrl_.resume_read(reason)) {
|
||||||
// Process remaining data in input buffer here because these bytes
|
// Process remaining data in input buffer here because these bytes
|
||||||
// are not notified by readcb until new data arrive.
|
// are not notified by readcb until new data arrive.
|
||||||
http_parser_pause(htp_, 0);
|
http_parser_pause(&htp_, 0);
|
||||||
return on_read();
|
return on_read();
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -66,7 +66,7 @@ public:
|
||||||
void reset_current_header_length();
|
void reset_current_header_length();
|
||||||
private:
|
private:
|
||||||
ClientHandler *handler_;
|
ClientHandler *handler_;
|
||||||
http_parser *htp_;
|
http_parser htp_;
|
||||||
size_t current_header_length_;
|
size_t current_header_length_;
|
||||||
Downstream *downstream_;
|
Downstream *downstream_;
|
||||||
IOControl ioctrl_;
|
IOControl ioctrl_;
|
||||||
|
|
Loading…
Reference in New Issue