aboutsummaryrefslogtreecommitdiff
path: root/client/cmixclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/cmixclient.cpp')
-rw-r--r--client/cmixclient.cpp23
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();
}