diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-21 19:27:05 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-21 19:27:05 +0200 |
| commit | 9eaf47d5dfa56ca79ae903aabfc2cf52bdfb981e (patch) | |
| tree | ab9b96e5265a7d5fa5ac4044d2034ede61eb72a0 /client/cmixclient.cpp | |
| parent | e28c0d9b1072c8b75ed43c09f883b1a0bd06846d (diff) | |
| download | cmix-9eaf47d5dfa56ca79ae903aabfc2cf52bdfb981e.tar.gz cmix-9eaf47d5dfa56ca79ae903aabfc2cf52bdfb981e.tar.bz2 cmix-9eaf47d5dfa56ca79ae903aabfc2cf52bdfb981e.zip | |
Added SSL connections to the client.
Diffstat (limited to 'client/cmixclient.cpp')
| -rw-r--r-- | client/cmixclient.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp index ccbdeb5..6866274 100644 --- a/client/cmixclient.cpp +++ b/client/cmixclient.cpp @@ -2,6 +2,7 @@ #include "cmixclient.hpp" using namespace boost::asio::ip; +using namespace boost::asio; void CMixClient::key_exchange(int i) { BOOST_LOG_TRIVIAL(trace) << "Sending KeyExchange for node: " << i; @@ -16,11 +17,12 @@ void CMixClient::key_exchange(int i) { } void CMixClient::initialize_connections() { - network_connections.reserve(network_details.size()); - data.resize(network_details.size()); + size_t nr_nodes = network_details.node_details.size(); + network_connections.reserve(nr_nodes); + data.resize(nr_nodes); - for(int i = 0; i < network_details.size(); ++i) { - auto handler = [this, i]() mutable { + for(size_t i = 0; i < nr_nodes; ++i) { + auto handler = [this, i]() { cmix_proto::ImAClient imaclient; imaclient.set_id("A"); BOOST_LOG_TRIVIAL(trace) << "sending imaclient to node: " << i; @@ -29,8 +31,8 @@ void CMixClient::initialize_connections() { key_exchange(i); }; - network_connections.emplace_back(std::unique_ptr<tcp::socket>(new tcp::socket(io_service))); - network_connections.back().async_connect(network_details[i].host, network_details[i].port, handler); + network_connections.emplace_back(std::unique_ptr<ssl::stream<tcp::socket>>(new ssl::stream<tcp::socket>(io_service, *ctx))); + network_connections.back().async_connect(network_details.node_details[i].host, network_details.node_details[i].port, handler); } } @@ -53,7 +55,7 @@ void CMixClient::handle_message(int node_id, cmix_proto::CMixMessage message) case cmix_proto::CMixMessage::ContentsCase::kBye: { BOOST_LOG_TRIVIAL(trace) << "handling bye"; network_connections.at(node_id).close(); - if(std::all_of(network_connections.begin(), network_connections.end(), [](SenderReceiver const& c) { return c.is_open(); })) { + if(std::all_of(network_connections.begin(), network_connections.end(), [](SSLSenderReceiver const& c) { return !c.is_open(); })) { break; } else { return; @@ -67,13 +69,18 @@ void CMixClient::handle_message(int node_id, cmix_proto::CMixMessage message) io_service.stop(); } -CMixClient::CMixClient(std::vector<NodeDetails> details) +CMixClient::CMixClient(NetworkDetails details) : io_service() +, ctx(std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23)) , network_details(details) , network_connections() , api(get_implementation()) , keypair(api.create_key_pair()) { + if(!details.certdir.empty()) { + ctx->add_verify_path(details.certdir); + } + initialize_connections(); } |
