diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-27 10:08:19 +0100 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-11-27 10:08:19 +0100 |
| commit | 74cea534fd189a2db423ae60997447e66265922b (patch) | |
| tree | decc06fa5da1f3f42612d527462d22ee487bf2db /node/node_node.cpp | |
| parent | fa7a48172a3c9d9c2f96d6f9c05d80f497bc304d (diff) | |
| download | cmix-74cea534fd189a2db423ae60997447e66265922b.tar.gz cmix-74cea534fd189a2db423ae60997447e66265922b.tar.bz2 cmix-74cea534fd189a2db423ae60997447e66265922b.zip | |
Implements message delivery.
Adds a minimum number of messages per mix.
Embeds the destination in the message.
Clients now send messages to themselves.
Diffstat (limited to 'node/node_node.cpp')
| -rw-r--r-- | node/node_node.cpp | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/node/node_node.cpp b/node/node_node.cpp index f68b496..00968a0 100644 --- a/node/node_node.cpp +++ b/node/node_node.cpp @@ -205,10 +205,7 @@ void Node::handle_node_secretkey(cmix_proto::SecretKey const& secret) std::string share = secret.secret_key(); if(network_settings.is_first) { - timer.expires_from_now(boost::posix_time::seconds(4)); - timer.async_wait([this](boost::system::error_code const& ec) { - start_precomputation(); - }); + start_timer_delayed_mix(); } else { set_network_key(&cmix_ctx, secret.secret_key().data(), secret.secret_key().size()); next_node.async_send(secret); @@ -245,27 +242,16 @@ void Node::handle_node_prepost(cmix_proto::PrePost const& prepost) { } void Node::handle_node_realpre(cmix_proto::RealPre const& realpre) { - auto final = [this](){ - deinitialize(&cmix_ctx); - shutdown(); - }; - if(network_settings.is_first) { cmix_proto::RealMix n_realmix = fill_realtime_mix_message(cmix_ctx, realpre.m()); - next_node.async_send(n_realmix, final); + next_node.async_send(n_realmix); } else { cmix_proto::RealPre n_realpre = fill_realtime_pre_message(cmix_ctx, realpre.h(), realpre.m(), data); next_node.async_send(n_realpre); } } -void Node::handle_node_realmix(cmix_proto::RealMix const& realmix) { - auto final = [this](){ - deinitialize(&cmix_ctx); - shutdown(); - send_bye(false); - }; - +void Node::handle_node_realmix(cmix_proto::RealMix const& realmix) { if(network_settings.is_last) { BOOST_LOG_TRIVIAL(trace) << "Doing the last step:"; @@ -277,18 +263,31 @@ void Node::handle_node_realmix(cmix_proto::RealMix const& realmix) { for(int i = 0; i < n_realmix.m_size(); i++) { remove_r_and_s(&cmix_ctx, &str[0], n_realmix.m(i).data(), i); - { std::stringstream ss; for(auto&& c : str) { ss << "\\" << std::setw(3) << std::setfill('0') << std::oct << (unsigned int) c; } BOOST_LOG_TRIVIAL(trace) << ss.str(); - } + } + + char* dest; + size_t dest_len; + + char* payload; + size_t payload_len; + + split_message(&cmix_ctx, &dest, &dest_len, &payload, &payload_len, str.data()); + + std::string dest_s = std::string(dest, dest_len); + + cmix_proto::Payload pay; + pay.set_payload(payload, payload_len); + clients.at(dest_s).async_send(pay); + + free(dest); + free(payload); } - - final(); - } else { cmix_proto::RealMix n_realmix = fill_realtime_mix_message(cmix_ctx, realmix.m()); next_node.async_send(n_realmix); |
