asio:: Add cancel() and on_close() to server::response
This commit is contained in:
parent
7e46d0b142
commit
a14029744c
src
|
@ -63,6 +63,10 @@ void response::end(std::string data) const { impl_->end(std::move(data)); }
|
||||||
|
|
||||||
void response::end(read_cb cb) const { impl_->end(std::move(cb)); }
|
void response::end(read_cb cb) const { impl_->end(std::move(cb)); }
|
||||||
|
|
||||||
|
void response::on_close(close_cb cb) const { impl_->on_close(std::move(cb)); }
|
||||||
|
|
||||||
|
void response::cancel() const { impl_->cancel(); }
|
||||||
|
|
||||||
const response *response::push(boost::system::error_code &ec,
|
const response *response::push(boost::system::error_code &ec,
|
||||||
std::string method, std::string path,
|
std::string method, std::string path,
|
||||||
header_map h) const {
|
header_map h) const {
|
||||||
|
@ -133,6 +137,20 @@ void response_impl::end(read_cb cb) {
|
||||||
start_response();
|
start_response();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void response_impl::on_close(close_cb cb) { close_cb_ = std::move(cb); }
|
||||||
|
|
||||||
|
void response_impl::call_on_close(uint32_t error_code) {
|
||||||
|
if (close_cb_) {
|
||||||
|
close_cb_(error_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void response_impl::cancel() {
|
||||||
|
auto handler = stream_->handler();
|
||||||
|
|
||||||
|
handler->stream_error(stream_->get_stream_id(), NGHTTP2_CANCEL);
|
||||||
|
}
|
||||||
|
|
||||||
void response_impl::start_response() {
|
void response_impl::start_response() {
|
||||||
if (!started_ || (pushed_ && !push_promise_sent_)) {
|
if (!started_ || (pushed_ && !push_promise_sent_)) {
|
||||||
return;
|
return;
|
||||||
|
@ -333,6 +351,13 @@ int on_stream_close_callback(nghttp2_session *session, int32_t stream_id,
|
||||||
uint32_t error_code, void *user_data) {
|
uint32_t error_code, void *user_data) {
|
||||||
auto handler = static_cast<http2_handler *>(user_data);
|
auto handler = static_cast<http2_handler *>(user_data);
|
||||||
|
|
||||||
|
auto stream = handler->find_stream(stream_id);
|
||||||
|
if (!stream) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
stream->response().impl().call_on_close(error_code);
|
||||||
|
|
||||||
handler->close_stream(stream_id);
|
handler->close_stream(stream_id);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -76,8 +76,11 @@ public:
|
||||||
void write_head(unsigned int status_code, header_map h = {});
|
void write_head(unsigned int status_code, header_map h = {});
|
||||||
void end(std::string data = "");
|
void end(std::string data = "");
|
||||||
void end(read_cb cb);
|
void end(read_cb cb);
|
||||||
|
void on_close(close_cb cb);
|
||||||
void resume();
|
void resume();
|
||||||
|
|
||||||
|
void cancel();
|
||||||
|
|
||||||
response *push(boost::system::error_code &ec, std::string method,
|
response *push(boost::system::error_code &ec, std::string method,
|
||||||
std::string raw_path_query, header_map h = {}) const;
|
std::string raw_path_query, header_map h = {}) const;
|
||||||
|
|
||||||
|
@ -91,11 +94,13 @@ public:
|
||||||
void stream(http2_stream *s);
|
void stream(http2_stream *s);
|
||||||
read_cb::result_type call_read(uint8_t *data, std::size_t len,
|
read_cb::result_type call_read(uint8_t *data, std::size_t len,
|
||||||
uint32_t *data_flags);
|
uint32_t *data_flags);
|
||||||
|
void call_on_close(uint32_t error_code);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
http2_stream *stream_;
|
http2_stream *stream_;
|
||||||
header_map header_;
|
header_map header_;
|
||||||
read_cb read_cb_;
|
read_cb read_cb_;
|
||||||
|
close_cb close_cb_;
|
||||||
unsigned int status_code_;
|
unsigned int status_code_;
|
||||||
// true if response started (end() is called)
|
// true if response started (end() is called)
|
||||||
bool started_;
|
bool started_;
|
||||||
|
|
|
@ -78,6 +78,10 @@ public:
|
||||||
// further call of end() is allowed.
|
// further call of end() is allowed.
|
||||||
void end(read_cb cb) const;
|
void end(read_cb cb) const;
|
||||||
|
|
||||||
|
void on_close(close_cb cb) const;
|
||||||
|
|
||||||
|
void cancel() const;
|
||||||
|
|
||||||
// Resumes deferred response.
|
// Resumes deferred response.
|
||||||
void resume() const;
|
void resume() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue