mirror of
https://github.com/moparisthebest/spdylay
synced 2024-12-22 07:38:52 -05:00
shrpx: Check the fatal error inside downstream http-parser callback
This commit is contained in:
parent
f56cfc920e
commit
a95981f3da
@ -521,7 +521,10 @@ int htp_hdrs_completecb(http_parser *htp)
|
|||||||
downstream->set_response_minor(htp->http_minor);
|
downstream->set_response_minor(htp->http_minor);
|
||||||
downstream->set_response_connection_close(!http_should_keep_alive(htp));
|
downstream->set_response_connection_close(!http_should_keep_alive(htp));
|
||||||
downstream->set_response_state(Downstream::HEADER_COMPLETE);
|
downstream->set_response_state(Downstream::HEADER_COMPLETE);
|
||||||
downstream->get_upstream()->on_downstream_header_complete(downstream);
|
if(downstream->get_upstream()->on_downstream_header_complete(downstream)
|
||||||
|
!= 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if(downstream->tunnel_established()) {
|
if(downstream->tunnel_established()) {
|
||||||
downstream->get_downstream_connection()->set_tunneling_timeout();
|
downstream->get_downstream_connection()->set_tunneling_timeout();
|
||||||
@ -578,9 +581,8 @@ int htp_bodycb(http_parser *htp, const char *data, size_t len)
|
|||||||
Downstream *downstream;
|
Downstream *downstream;
|
||||||
downstream = reinterpret_cast<Downstream*>(htp->data);
|
downstream = reinterpret_cast<Downstream*>(htp->data);
|
||||||
|
|
||||||
downstream->get_upstream()->on_downstream_body
|
return downstream->get_upstream()->on_downstream_body
|
||||||
(downstream, reinterpret_cast<const uint8_t*>(data), len);
|
(downstream, reinterpret_cast<const uint8_t*>(data), len);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -591,9 +593,7 @@ int htp_msg_completecb(http_parser *htp)
|
|||||||
downstream = reinterpret_cast<Downstream*>(htp->data);
|
downstream = reinterpret_cast<Downstream*>(htp->data);
|
||||||
|
|
||||||
downstream->set_response_state(Downstream::MSG_COMPLETE);
|
downstream->set_response_state(Downstream::MSG_COMPLETE);
|
||||||
downstream->get_upstream()->on_downstream_body_complete(downstream);
|
return downstream->get_upstream()->on_downstream_body_complete(downstream);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
@ -591,7 +591,10 @@ int HttpsUpstream::on_downstream_header_complete(Downstream *downstream)
|
|||||||
LOG(INFO) << "Upstream https response headers\n" << hdrs;
|
LOG(INFO) << "Upstream https response headers\n" << hdrs;
|
||||||
}
|
}
|
||||||
evbuffer *output = bufferevent_get_output(handler_->get_bev());
|
evbuffer *output = bufferevent_get_output(handler_->get_bev());
|
||||||
evbuffer_add(output, hdrs.c_str(), hdrs.size());
|
if(evbuffer_add(output, hdrs.c_str(), hdrs.size()) != 0) {
|
||||||
|
LOG(FATAL) << "evbuffer_add() failed";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -604,7 +607,10 @@ int HttpsUpstream::on_downstream_body(Downstream *downstream,
|
|||||||
char chunk_size_hex[16];
|
char chunk_size_hex[16];
|
||||||
rv = snprintf(chunk_size_hex, sizeof(chunk_size_hex), "%X\r\n",
|
rv = snprintf(chunk_size_hex, sizeof(chunk_size_hex), "%X\r\n",
|
||||||
static_cast<unsigned int>(len));
|
static_cast<unsigned int>(len));
|
||||||
evbuffer_add(output, chunk_size_hex, rv);
|
if(evbuffer_add(output, chunk_size_hex, rv) != 0) {
|
||||||
|
LOG(FATAL) << "evbuffer_add() failed";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
evbuffer_add(output, data, len);
|
evbuffer_add(output, data, len);
|
||||||
if(downstream->get_chunked_response()) {
|
if(downstream->get_chunked_response()) {
|
||||||
@ -617,7 +623,10 @@ int HttpsUpstream::on_downstream_body_complete(Downstream *downstream)
|
|||||||
{
|
{
|
||||||
if(downstream->get_chunked_response()) {
|
if(downstream->get_chunked_response()) {
|
||||||
evbuffer *output = bufferevent_get_output(handler_->get_bev());
|
evbuffer *output = bufferevent_get_output(handler_->get_bev());
|
||||||
evbuffer_add(output, "0\r\n\r\n", 5);
|
if(evbuffer_add(output, "0\r\n\r\n", 5) != 0) {
|
||||||
|
LOG(FATAL) << "evbuffer_add() failed";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(ENABLE_LOG) {
|
if(ENABLE_LOG) {
|
||||||
LOG(INFO) << "Downstream on_downstream_body_complete";
|
LOG(INFO) << "Downstream on_downstream_body_complete";
|
||||||
|
@ -699,8 +699,13 @@ int SpdyUpstream::on_downstream_header_complete(Downstream *downstream)
|
|||||||
data_prd.source.ptr = downstream;
|
data_prd.source.ptr = downstream;
|
||||||
data_prd.read_callback = spdy_data_read_callback;
|
data_prd.read_callback = spdy_data_read_callback;
|
||||||
|
|
||||||
spdylay_submit_response(session_, downstream->get_stream_id(), nv,
|
int rv;
|
||||||
&data_prd);
|
rv = spdylay_submit_response(session_, downstream->get_stream_id(), nv,
|
||||||
|
&data_prd);
|
||||||
|
if(rv != 0) {
|
||||||
|
LOG(FATAL) << "spdylay_submit_response() failed";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
delete [] nv;
|
delete [] nv;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user