diff options
Diffstat (limited to 'src/mongo/util/net')
-rw-r--r-- | src/mongo/util/net/ssl/detail/io.hpp | 8 | ||||
-rw-r--r-- | src/mongo/util/net/ssl/detail/stream_core.hpp | 3 | ||||
-rw-r--r-- | src/mongo/util/net/ssl/stream.hpp | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/mongo/util/net/ssl/detail/io.hpp b/src/mongo/util/net/ssl/detail/io.hpp index a8f0cc42047..6c0bc5f69fc 100644 --- a/src/mongo/util/net/ssl/detail/io.hpp +++ b/src/mongo/util/net/ssl/detail/io.hpp @@ -48,18 +48,20 @@ std::size_t io(Stream& next_layer, stream_core& core, const Operation& op, asio: case engine::want_output_and_retry: + core.output_ = core.engine_.get_output(core.output_buffer_); // Get output data from the engine and write it to the underlying // transport. - asio::write(next_layer, core.engine_.get_output(core.output_buffer_), ec); + core.output_ += asio::write(next_layer, core.output_, ec); // Try the operation again. continue; case engine::want_output: + core.output_ = core.engine_.get_output(core.output_buffer_); // Get output data from the engine and write it to the underlying // transport. - asio::write(next_layer, core.engine_.get_output(core.output_buffer_), ec); + core.output_ += asio::write(next_layer, core.output_, ec); // Operation is complete. Return result to caller. core.engine_.map_error_code(ec); @@ -75,7 +77,7 @@ std::size_t io(Stream& next_layer, stream_core& core, const Operation& op, asio: // Operation failed. Return result to caller. core.engine_.map_error_code(ec); - return 0; + return bytes_transferred; } template <typename Stream, typename Operation, typename Handler> diff --git a/src/mongo/util/net/ssl/detail/stream_core.hpp b/src/mongo/util/net/ssl/detail/stream_core.hpp index 6513043f348..98bb9f7ddab 100644 --- a/src/mongo/util/net/ssl/detail/stream_core.hpp +++ b/src/mongo/util/net/ssl/detail/stream_core.hpp @@ -125,6 +125,9 @@ struct stream_core { // The buffer pointing to the engine's unconsumed input. asio::const_buffer input_; + + // The buffer pointing to the engine's unconsumed output. + asio::mutable_buffer output_; }; } // namespace detail diff --git a/src/mongo/util/net/ssl/stream.hpp b/src/mongo/util/net/ssl/stream.hpp index f7f2a0f31a2..1bdf28e26b5 100644 --- a/src/mongo/util/net/ssl/stream.hpp +++ b/src/mongo/util/net/ssl/stream.hpp @@ -577,6 +577,10 @@ public: return init.result.get(); } + asio::mutable_buffer& getCoreOutputBuffer() { + return core_.output_; + } + private: Stream next_layer_; detail::stream_core core_; |