From 74cea534fd189a2db423ae60997447e66265922b Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Sun, 27 Nov 2016 10:08:19 +0100 Subject: Implements message delivery. Adds a minimum number of messages per mix. Embeds the destination in the message. Clients now send messages to themselves. --- client/cmixclient.cpp | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) (limited to 'client/cmixclient.cpp') diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp index 861a6ac..5109b81 100644 --- a/client/cmixclient.cpp +++ b/client/cmixclient.cpp @@ -42,9 +42,10 @@ void CMixClient::initialize_connections() { cmix_proto::ImAClient imaclient; char* id; - get_pub_key_hash(&cmix_ctx, &id); + size_t len; + get_pub_key_hash(&cmix_ctx, &id, &len); - imaclient.set_id(id); + imaclient.set_id(id, len); free(id); BOOST_LOG_TRIVIAL(trace) << "sending imaclient to node: " << i; @@ -59,6 +60,11 @@ void CMixClient::initialize_connections() { } } +void CMixClient::handle_payload(cmix_proto::Payload pl) +{ + std::cout << "Received message: " << pl.payload() << std::endl; +} + void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange const& ke) { key_exchange_initiator( @@ -71,9 +77,18 @@ void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange con if(std::all_of(shared_values.begin(), shared_values.end(), [](GroupElement const& value){return value != nullptr;})) { size_t len = get_group_element_array_size(&cmix_ctx); + std::vector vec(len, '\0'); + + char* id; + size_t id_len; + + get_pub_key_hash(&cmix_ctx, &id, &id_len); std::string s = "abcdefghijklmnopqrstuvwxyz"; - std::copy_n(s.begin(), s.size(), vec.begin() + 1); + + create_message(&cmix_ctx, vec.data(), id, id_len, s.data(), s.size()); + + free(id); cmix_proto::UserMessage message; message.mutable_m()->resize(len); @@ -83,12 +98,12 @@ void CMixClient::handle_key_exchange(size_t node_id, cmix_proto::KeyExchange con BOOST_LOG_TRIVIAL(trace) << "sending UserMessage: " << message.ShortDebugString(); network_connections.at(0).async_send(message); -// size_t last_node_id = network_details.node_details.size() - 1; -// network_connections.at(last_node_id).async_receive( -// [this, last_node_id](cmix_proto::CMixMessage const& message) { -// handle_message(last_node_id, message); -// } -// ); + size_t last_node_id = network_details.node_details.size() - 1; + network_connections.at(last_node_id).async_receive( + [this, last_node_id](cmix_proto::CMixMessage const& message) { + handle_message(last_node_id, message); + } + ); } } @@ -114,6 +129,11 @@ void CMixClient::handle_message(size_t node_id, cmix_proto::CMixMessage message) key_exchange(node_id); return; } + case cmix_proto::CMixMessage::ContentsCase::kPayload: { + BOOST_LOG_TRIVIAL(trace) << "handling Payload: "; + handle_payload(message.payload()); + return; + } default: { BOOST_LOG_TRIVIAL(error) << "Received unknown message"; } -- cgit v1.2.3-70-g09d2