]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/example/cpp11/ssl/server.cpp
5 // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
14 #include <boost/asio.hpp>
15 #include <boost/asio/ssl.hpp>
17 using boost::asio::ip::tcp
;
19 class session
: public std::enable_shared_from_this
<session
>
22 session(boost::asio::ssl::stream
<tcp::socket
> socket
)
23 : socket_(std::move(socket
))
35 auto self(shared_from_this());
36 socket_
.async_handshake(boost::asio::ssl::stream_base::server
,
37 [this, self
](const boost::system::error_code
& error
)
48 auto self(shared_from_this());
49 socket_
.async_read_some(boost::asio::buffer(data_
),
50 [this, self
](const boost::system::error_code
& ec
, std::size_t length
)
59 void do_write(std::size_t length
)
61 auto self(shared_from_this());
62 boost::asio::async_write(socket_
, boost::asio::buffer(data_
, length
),
63 [this, self
](const boost::system::error_code
& ec
,
64 std::size_t /*length*/)
73 boost::asio::ssl::stream
<tcp::socket
> socket_
;
80 server(boost::asio::io_context
& io_context
, unsigned short port
)
81 : acceptor_(io_context
, tcp::endpoint(tcp::v4(), port
)),
82 context_(boost::asio::ssl::context::sslv23
)
85 boost::asio::ssl::context::default_workarounds
86 | boost::asio::ssl::context::no_sslv2
87 | boost::asio::ssl::context::single_dh_use
);
88 context_
.set_password_callback(std::bind(&server::get_password
, this));
89 context_
.use_certificate_chain_file("server.pem");
90 context_
.use_private_key_file("server.pem", boost::asio::ssl::context::pem
);
91 context_
.use_tmp_dh_file("dh2048.pem");
97 std::string
get_password() const
104 acceptor_
.async_accept(
105 [this](const boost::system::error_code
& error
, tcp::socket socket
)
109 std::make_shared
<session
>(
110 boost::asio::ssl::stream
<tcp::socket
>(
111 std::move(socket
), context_
))->start();
118 tcp::acceptor acceptor_
;
119 boost::asio::ssl::context context_
;
122 int main(int argc
, char* argv
[])
128 std::cerr
<< "Usage: server <port>\n";
132 boost::asio::io_context io_context
;
134 using namespace std
; // For atoi.
135 server
s(io_context
, atoi(argv
[1]));
139 catch (std::exception
& e
)
141 std::cerr
<< "Exception: " << e
.what() << "\n";