summaryrefslogtreecommitdiff
path: root/boost/asio/ssl/detail/buffered_handshake_op.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/asio/ssl/detail/buffered_handshake_op.hpp')
-rw-r--r--boost/asio/ssl/detail/buffered_handshake_op.hpp48
1 files changed, 26 insertions, 22 deletions
diff --git a/boost/asio/ssl/detail/buffered_handshake_op.hpp b/boost/asio/ssl/detail/buffered_handshake_op.hpp
index b40fe5d69d..926e896ae9 100644
--- a/boost/asio/ssl/detail/buffered_handshake_op.hpp
+++ b/boost/asio/ssl/detail/buffered_handshake_op.hpp
@@ -17,9 +17,7 @@
#include <boost/asio/detail/config.hpp>
-#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
-# include <boost/asio/ssl/detail/engine.hpp>
-#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+#include <boost/asio/ssl/detail/engine.hpp>
#include <boost/asio/detail/push_options.hpp>
@@ -28,8 +26,6 @@ namespace asio {
namespace ssl {
namespace detail {
-#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
-
template <typename ConstBufferSequence>
class buffered_handshake_op
{
@@ -46,8 +42,27 @@ public:
boost::system::error_code& ec,
std::size_t& bytes_transferred) const
{
- typename ConstBufferSequence::const_iterator iter = buffers_.begin();
- typename ConstBufferSequence::const_iterator end = buffers_.end();
+ return this->process(eng, ec, bytes_transferred,
+ boost::asio::buffer_sequence_begin(buffers_),
+ boost::asio::buffer_sequence_end(buffers_));
+ }
+
+ template <typename Handler>
+ void call_handler(Handler& handler,
+ const boost::system::error_code& ec,
+ const std::size_t& bytes_transferred) const
+ {
+ handler(ec, bytes_transferred);
+ }
+
+private:
+ template <typename Iterator>
+ engine::want process(engine& eng,
+ boost::system::error_code& ec,
+ std::size_t& bytes_transferred,
+ Iterator begin, Iterator end) const
+ {
+ Iterator iter = begin;
std::size_t accumulated_size = 0;
for (;;)
@@ -63,9 +78,9 @@ public:
const_buffer buffer(*iter);
// Skip over any buffers which have already been consumed by the engine.
- if (bytes_transferred >= accumulated_size + buffer_size(buffer))
+ if (bytes_transferred >= accumulated_size + buffer.size())
{
- accumulated_size += buffer_size(buffer);
+ accumulated_size += buffer.size();
++iter;
continue;
}
@@ -78,30 +93,19 @@ public:
// Pass the buffer to the engine, and update the bytes transferred to
// reflect the total number of bytes consumed so far.
- bytes_transferred += buffer_size(buffer);
+ bytes_transferred += buffer.size();
buffer = eng.put_input(buffer);
- bytes_transferred -= buffer_size(buffer);
+ bytes_transferred -= buffer.size();
break;
}
}
}
- template <typename Handler>
- void call_handler(Handler& handler,
- const boost::system::error_code& ec,
- const std::size_t& bytes_transferred) const
- {
- handler(ec, bytes_transferred);
- }
-
-private:
stream_base::handshake_type type_;
ConstBufferSequence buffers_;
std::size_t total_buffer_size_;
};
-#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
-
} // namespace detail
} // namespace ssl
} // namespace asio