asio: Add signal_write() to server::http2_handler to avoid scattered ifs
This commit is contained in:
parent
7f04968950
commit
6020b727d8
|
@ -343,6 +343,8 @@ int http2_handler::start_response(stream &strm) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
signal_write();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,16 +358,22 @@ void http2_handler::leave_callback() {
|
||||||
inside_callback_ = false;
|
inside_callback_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool http2_handler::inside_callback() const { return inside_callback_; }
|
|
||||||
|
|
||||||
void http2_handler::stream_error(int32_t stream_id, uint32_t error_code) {
|
void http2_handler::stream_error(int32_t stream_id, uint32_t error_code) {
|
||||||
::nghttp2::asio_http2::server::stream_error(session_, stream_id, error_code);
|
::nghttp2::asio_http2::server::stream_error(session_, stream_id, error_code);
|
||||||
|
signal_write();
|
||||||
|
}
|
||||||
|
|
||||||
|
void http2_handler::signal_write() {
|
||||||
|
if (!inside_callback_) {
|
||||||
|
initiate_write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void http2_handler::initiate_write() { writefun_(); }
|
void http2_handler::initiate_write() { writefun_(); }
|
||||||
|
|
||||||
void http2_handler::resume(stream &strm) {
|
void http2_handler::resume(stream &strm) {
|
||||||
nghttp2_session_resume_data(session_, strm.get_stream_id());
|
nghttp2_session_resume_data(session_, strm.get_stream_id());
|
||||||
|
signal_write();
|
||||||
}
|
}
|
||||||
|
|
||||||
response *http2_handler::push_promise(boost::system::error_code &ec,
|
response *http2_handler::push_promise(boost::system::error_code &ec,
|
||||||
|
@ -412,6 +420,8 @@ response *http2_handler::push_promise(boost::system::error_code &ec,
|
||||||
auto &promised_res = promised_strm->response().impl();
|
auto &promised_res = promised_strm->response().impl();
|
||||||
promised_res.pushed(true);
|
promised_res.pushed(true);
|
||||||
|
|
||||||
|
signal_write();
|
||||||
|
|
||||||
return &promised_strm->response();
|
return &promised_strm->response();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,6 @@ public:
|
||||||
|
|
||||||
void enter_callback();
|
void enter_callback();
|
||||||
void leave_callback();
|
void leave_callback();
|
||||||
bool inside_callback() const;
|
|
||||||
|
|
||||||
void resume(stream &s);
|
void resume(stream &s);
|
||||||
|
|
||||||
|
@ -84,6 +83,8 @@ public:
|
||||||
std::string method, std::string raw_path_query,
|
std::string method, std::string raw_path_query,
|
||||||
header_map h);
|
header_map h);
|
||||||
|
|
||||||
|
void signal_write();
|
||||||
|
|
||||||
boost::asio::io_service &io_service();
|
boost::asio::io_service &io_service();
|
||||||
|
|
||||||
template <size_t N>
|
template <size_t N>
|
||||||
|
|
|
@ -72,12 +72,7 @@ void response_impl::call_on_close(uint32_t error_code) {
|
||||||
|
|
||||||
void response_impl::cancel(uint32_t error_code) {
|
void response_impl::cancel(uint32_t error_code) {
|
||||||
auto handler = strm_->handler();
|
auto handler = strm_->handler();
|
||||||
|
|
||||||
handler->stream_error(strm_->get_stream_id(), error_code);
|
handler->stream_error(strm_->get_stream_id(), error_code);
|
||||||
|
|
||||||
if (!handler->inside_callback()) {
|
|
||||||
handler->initiate_write();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void response_impl::start_response() {
|
void response_impl::start_response() {
|
||||||
|
@ -91,10 +86,6 @@ void response_impl::start_response() {
|
||||||
handler->stream_error(strm_->get_stream_id(), NGHTTP2_INTERNAL_ERROR);
|
handler->stream_error(strm_->get_stream_id(), NGHTTP2_INTERNAL_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handler->inside_callback()) {
|
|
||||||
handler->initiate_write();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
response *response_impl::push(boost::system::error_code &ec, std::string method,
|
response *response_impl::push(boost::system::error_code &ec, std::string method,
|
||||||
|
@ -107,10 +98,6 @@ response *response_impl::push(boost::system::error_code &ec, std::string method,
|
||||||
void response_impl::resume() {
|
void response_impl::resume() {
|
||||||
auto handler = strm_->handler();
|
auto handler = strm_->handler();
|
||||||
handler->resume(*strm_);
|
handler->resume(*strm_);
|
||||||
|
|
||||||
if (!handler->inside_callback()) {
|
|
||||||
handler->initiate_write();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::asio::io_service &response_impl::io_service() {
|
boost::asio::io_service &response_impl::io_service() {
|
||||||
|
|
Loading…
Reference in New Issue