From a032358614886f3d1fb91d404c94f54087aeb2fe Mon Sep 17 00:00:00 2001 From: lganzzzo Date: Sun, 14 Jul 2019 03:19:16 +0300 Subject: [PATCH] Introduce transferBody(WriteCallback) methods for Incoming Request. --- .../web/protocol/http/incoming/Request.cpp | 14 +++++++++++++- .../web/protocol/http/incoming/Request.hpp | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/oatpp/web/protocol/http/incoming/Request.cpp b/src/oatpp/web/protocol/http/incoming/Request.cpp index 63b9d3b2..21b8fb9d 100644 --- a/src/oatpp/web/protocol/http/incoming/Request.cpp +++ b/src/oatpp/web/protocol/http/incoming/Request.cpp @@ -105,6 +105,10 @@ oatpp::String Request::getPathTail() const { return m_pathVariables.getTail(); } +void Request::transferBody(data::stream::WriteCallback* writeCallback) const { + m_bodyDecoder->decode(m_headers, m_bodyStream.get(), writeCallback); +} + void Request::transferBodyToStream(oatpp::data::stream::OutputStream* toStream) const { m_bodyDecoder->decodeToStream(m_headers, m_bodyStream.get(), toStream); } @@ -113,8 +117,16 @@ oatpp::String Request::readBodyToString() const { return m_bodyDecoder->decodeToString(m_headers, m_bodyStream.get()); } -oatpp::async::CoroutineStarter Request::transferBodyToStreamAsync(const std::shared_ptr& toStream) const { +async::CoroutineStarter Request::transferBodyAsync(const std::shared_ptr& writeCallback) const { + return m_bodyDecoder->decodeAsync(m_headers, m_bodyStream, writeCallback); +} + +async::CoroutineStarter Request::transferBodyToStreamAsync(const std::shared_ptr& toStream) const { return m_bodyDecoder->decodeToStreamAsync(m_headers, m_bodyStream, toStream); } +async::CoroutineStarterForResult Request::readBodyToStringAsync() const { + return m_bodyDecoder->decodeToStringAsync(m_headers, m_bodyStream); +} + }}}}} \ No newline at end of file diff --git a/src/oatpp/web/protocol/http/incoming/Request.hpp b/src/oatpp/web/protocol/http/incoming/Request.hpp index a62507a4..0091fc14 100644 --- a/src/oatpp/web/protocol/http/incoming/Request.hpp +++ b/src/oatpp/web/protocol/http/incoming/Request.hpp @@ -149,6 +149,13 @@ public: */ oatpp::String getPathTail() const; + /** + * Transfer body.
+ * Read body chunk by chunk and pass chunks to the `writeCallback`. + * @param writeCallback - &id:oatpp::data::stream::WriteCallback;. + */ + void transferBody(data::stream::WriteCallback* writeCallback) const; + /** * Stream content of the body-stream to toStream * @param toStream @@ -187,6 +194,14 @@ public: // Async + /** + * Transfer body in Asynchronous manner.
+ * Read body chunk by chunk and pass chunks to the `writeCallback`. + * @param writeCallback - `std::shared_ptr` to &id:oatpp::data::stream::AsyncWriteCallback;. + * @return - &id:oatpp::async::CoroutineStarter;. + */ + async::CoroutineStarter transferBodyAsync(const std::shared_ptr& writeCallback) const; + /** * Transfer body stream to toStream Async * @param toStream @@ -198,9 +213,7 @@ public: * Transfer body stream to string Async. * @return - &id:oatpp::async::CoroutineStarterForResult;. */ - oatpp::async::CoroutineStarterForResult readBodyToStringAsync() const { - return m_bodyDecoder->decodeToStringAsync(m_headers, m_bodyStream); - } + async::CoroutineStarterForResult readBodyToStringAsync() const; /** * Transfer body to String and parse it as DTO