diff --git a/dap_chain_net.c b/dap_chain_net.c index 53e70c755043b45ff65c1b0113620a465490c49b..491643b2e899d93731f316c978257621e92e5817 100644 --- a/dap_chain_net.c +++ b/dap_chain_net.c @@ -291,7 +291,7 @@ lb_proc_state: dap_chain_node_addr_t l_address; l_address.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : - dap_db_get_cur_node_addr(); + dap_db_get_cur_node_addr(l_net->pub.name); // get current node info dap_chain_node_info_t *l_cur_node_info = dap_chain_node_info_read(l_net, &l_address); @@ -500,7 +500,7 @@ lb_proc_state: l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : - dap_db_get_cur_node_addr(); + dap_db_get_cur_node_addr(l_net->pub.name); dap_chain_id_t l_chain_id_null = { { 0 } }; dap_chain_cell_id_t l_chain_cell_id_null = { { 0 } }; @@ -979,7 +979,7 @@ static int s_cli_net( int argc, char **argv, char **a_str_reply) if ( strcmp(l_get_str,"status") == 0 ) { // get current node address dap_chain_node_addr_t l_cur_node_addr = { 0 }; - l_cur_node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : dap_db_get_cur_node_addr(); + l_cur_node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : dap_db_get_cur_node_addr(l_net->pub.name); if(!l_cur_node_addr.uint64) { dap_chain_node_cli_set_reply_text(a_str_reply, "Network \"%s\" has state %s (target state %s), active links %u from %u, cur node address not defined", @@ -1258,7 +1258,7 @@ int s_net_load(const char * a_net_name) if ( l_node_addr ) { char *l_addr_hash_str = dap_chain_node_addr_to_hash_str(l_node_addr); // save current node address - dap_db_set_cur_node_addr(l_node_addr->uint64); + dap_db_set_cur_node_addr(l_node_addr->uint64, l_net->pub.name); if(!l_addr_hash_str){ log_it(L_ERROR,"Can't get hash string for node address!"); } else { diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 98208732c697f76631423cc65f1a8c0cd2c7a672..d62efcd89ba9037e77eb8830cfc9d56bd1f79302 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -289,7 +289,7 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info return -1; } // check, current node have this addr or no - uint64_t l_cur_addr = dap_db_get_cur_node_addr(); + uint64_t l_cur_addr = dap_db_get_cur_node_addr(a_net->pub.name); if(l_cur_addr && l_cur_addr == a_node_info->hdr.address.uint64) { dap_chain_node_cli_set_reply_text(str_reply, "current node cannot be deleted"); return -1; @@ -1031,6 +1031,41 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) if(!l_remote_node_info) { return -1; } + //feature-2630 + { + dap_chain_node_addr_t *l_node_addr = dap_chain_net_get_cur_addr(l_net); + uint64_t id = dap_db_get_cur_node_addr(l_net->pub.name); + // start connect + dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect(l_remote_node_info); + if(!l_node_client) { + dap_chain_node_cli_set_reply_text(a_str_reply, "can't connect"); + DAP_DELETE(l_remote_node_info); + return -1; + } + // wait connected + int timeout_ms = 5000; //5 sec = 5000 ms + int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); + if(res) { + dap_stream_ch_t * l_ch_chain = dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_net_get_id()); + + if(0 == dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR_REQUEST, + l_net->pub.id, l_chain_id_null, l_chain_cell_id_null, &l_sync_request, + sizeof(l_sync_request))) { + dap_chain_node_cli_set_reply_text(a_str_reply, "Error: Cant send sync chains request"); + // clean client struct + dap_chain_node_client_close(l_node_client); + DAP_DELETE(l_remote_node_info); + return -1; + } + dap_stream_ch_set_ready_to_write(l_ch_chain, true); + // wait for finishing of request + timeout_ms = 120000; // 20 min = 1200 sec = 1 200 000 ms + // TODO add progress info to console + res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); + + } + } + // start connect dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect(l_remote_node_info); if(!l_node_client) { @@ -1059,7 +1094,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) // fill current node address l_sync_request.node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : - dap_db_get_cur_node_addr(); + dap_db_get_cur_node_addr(l_net->pub.name); dap_chain_id_t l_chain_id_null = { { 0 } }; dap_chain_cell_id_t l_chain_cell_id_null = { { 0 } }; l_chain_id_null.uint64 = l_net->pub.id.uint64;