From 8accf3898a6e3fc2c4a2296ece16438018e531bc Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 5 Mar 2015 00:09:26 +0900 Subject: [PATCH] asio: Add client::request::resume() member function --- src/asio_client_request.cc | 2 ++ src/asio_client_request_impl.cc | 2 ++ src/asio_client_request_impl.h | 2 ++ src/asio_client_session_impl.cc | 5 +++++ src/asio_client_session_impl.h | 1 + src/asio_client_stream.cc | 2 ++ src/asio_client_stream.h | 1 + src/includes/nghttp2/asio_http2_client.h | 3 +++ 8 files changed, 18 insertions(+) diff --git a/src/asio_client_request.cc b/src/asio_client_request.cc index 4e2ee6a1..bf4ce0d6 100644 --- a/src/asio_client_request.cc +++ b/src/asio_client_request.cc @@ -54,6 +54,8 @@ const std::string &request::method() const { return impl_->method(); } const header_map &request::header() const { return impl_->header(); } +void request::resume() const { impl_->resume(); } + request_impl &request::impl() const { return *impl_; } } // namespace client diff --git a/src/asio_client_request_impl.cc b/src/asio_client_request_impl.cc index a29d1917..1eb0ee7d 100644 --- a/src/asio_client_request_impl.cc +++ b/src/asio_client_request_impl.cc @@ -72,6 +72,8 @@ read_cb::result_type request_impl::call_on_read(uint8_t *buf, std::size_t len, return 0; } +void request_impl::resume() { strm_->resume(); } + void request_impl::header(header_map h) { header_ = std::move(h); } header_map &request_impl::header() { return header_; } diff --git a/src/asio_client_request_impl.h b/src/asio_client_request_impl.h index 176715f1..bd6b1541 100644 --- a/src/asio_client_request_impl.h +++ b/src/asio_client_request_impl.h @@ -58,6 +58,8 @@ public: read_cb::result_type call_on_read(uint8_t *buf, std::size_t len, uint32_t *data_flags); + void resume(); + void header(header_map h); header_map &header(); const header_map &header() const; diff --git a/src/asio_client_session_impl.cc b/src/asio_client_session_impl.cc index c1b19f97..ec976f97 100644 --- a/src/asio_client_session_impl.cc +++ b/src/asio_client_session_impl.cc @@ -327,6 +327,11 @@ void session_impl::cancel(stream &strm, uint32_t error_code) { signal_write(); } +void session_impl::resume(stream &strm) { + nghttp2_session_resume_data(session_, strm.stream_id()); + signal_write(); +} + stream *session_impl::find_stream(int32_t stream_id) { auto it = streams_.find(stream_id); if (it == std::end(streams_)) { diff --git a/src/asio_client_session_impl.h b/src/asio_client_session_impl.h index 55042960..045131aa 100644 --- a/src/asio_client_session_impl.h +++ b/src/asio_client_session_impl.h @@ -54,6 +54,7 @@ public: const error_cb &on_error() const; void cancel(stream &strm, uint32_t error_code); + void resume(stream &strm); std::unique_ptr create_stream(); std::unique_ptr pop_stream(int32_t stream_id); diff --git a/src/asio_client_stream.cc b/src/asio_client_stream.cc index 80de501a..b4f532a8 100644 --- a/src/asio_client_stream.cc +++ b/src/asio_client_stream.cc @@ -38,6 +38,8 @@ stream::stream(session_impl *sess) : sess_(sess), stream_id_(0) { void stream::cancel(uint32_t error_code) { sess_->cancel(*this, error_code); } +void stream::resume() { sess_->resume(*this); } + void stream::stream_id(int32_t stream_id) { stream_id_ = stream_id; } int32_t stream::stream_id() const { return stream_id_; } diff --git a/src/asio_client_stream.h b/src/asio_client_stream.h index db9e075e..2b1b8c4d 100644 --- a/src/asio_client_stream.h +++ b/src/asio_client_stream.h @@ -45,6 +45,7 @@ public: stream &operator=(const stream &) = delete; void cancel(uint32_t error_code); + void resume(); void stream_id(int32_t stream_id); int32_t stream_id() const; diff --git a/src/includes/nghttp2/asio_http2_client.h b/src/includes/nghttp2/asio_http2_client.h index 6f5a8385..98d02ce8 100644 --- a/src/includes/nghttp2/asio_http2_client.h +++ b/src/includes/nghttp2/asio_http2_client.h @@ -74,6 +74,9 @@ public: void cancel(uint32_t error_code = NGHTTP2_INTERNAL_ERROR) const; + // Resumes deferred uploading. + void resume() const; + const std::string &method() const; const uri_ref &uri() const;