summaryrefslogtreecommitdiff
path: root/src/mongo/util/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/net')
-rw-r--r--src/mongo/util/net/ssl/detail/io.hpp8
-rw-r--r--src/mongo/util/net/ssl/detail/stream_core.hpp3
-rw-r--r--src/mongo/util/net/ssl/stream.hpp4
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_;