diff options
Diffstat (limited to 'boost/asio/ssl/detail/buffered_handshake_op.hpp')
-rw-r--r-- | boost/asio/ssl/detail/buffered_handshake_op.hpp | 48 |
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 |