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