diff --git a/beast/asio/ssl_bundle.h b/beast/asio/ssl_bundle.h new file mode 100644 index 000000000..7f776f0c9 --- /dev/null +++ b/beast/asio/ssl_bundle.h @@ -0,0 +1,57 @@ +//------------------------------------------------------------------------------ +/* + This file is part of Beast: https://github.com/vinniefalco/Beast + Copyright 2013, Vinnie Falco + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#ifndef BEAST_ASIO_SSL_BUNDLE_H_INCLUDED +#define BEAST_ASIO_SSL_BUNDLE_H_INCLUDED + +#include +#include +#include + +namespace beast { +namespace asio { + +/** Work-around for non-movable boost::ssl::stream. + This allows ssl::stream to be movable and allows the stream to + construct from an already-existing socket. +*/ +struct ssl_bundle +{ + typedef boost::asio::ip::tcp::socket socket_type; + typedef boost::asio::ssl::stream stream_type; + + template + ssl_bundle (boost::asio::ssl::context& context, Args&&... args); + + socket_type socket; + stream_type stream; +}; + +template +ssl_bundle::ssl_bundle (boost::asio::ssl::context& context, + Args&&... args) + : socket(std::forward(args)...) + , stream (socket, context) +{ +} + +} // asio +} // beast + +#endif