diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c index 0bdb9260550bdd590f66badd8d3f5076660aa29e..2c8a7d8f450c1f5ce4e3f0f538fa1cae008a2212 100644 --- a/modules/common/dap_chain_datum_tx.c +++ b/modules/common/dap_chain_datum_tx.c @@ -227,7 +227,7 @@ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *tx) while(tx_items_pos < tx_items_size) { uint8_t *item = tx->tx_items + tx_items_pos; size_t l_item_tx_size = dap_chain_datum_item_tx_get_size(item); - if(!l_item_tx_size) + if(!l_item_tx_size || l_item_tx_size > tx_items_size) return -3; if(dap_chain_datum_tx_item_get_type(item) == TX_ITEM_TYPE_SIG) { dap_chain_tx_sig_t *l_item_tx_sig = (dap_chain_tx_sig_t*) item; diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 089091aad853318aba2599f6a6f5777d10b9f4f1..2f54a6c98138bf589bd0dc8a0c8840c419867e0c 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -503,19 +503,21 @@ static int s_net_states_proc(dap_chain_net_t * l_net) default: log_it(L_INFO, "Node sync error %d",l_res); } - l_res = dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()), - DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS, l_net->pub.id, l_chain_id, - l_net->pub.cell_id, &l_sync_gdb, sizeof(l_sync_gdb)); - l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); - switch (l_res) { - case -1: - log_it(L_WARNING,"Timeout with link sync"); - break; - case 0: - log_it(L_INFO, "Node sync completed"); - break; - default: - log_it(L_INFO, "Node sync error %d",l_res); + if (!dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) { + l_res = dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()), + DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS, l_net->pub.id, l_chain_id, + l_net->pub.cell_id, &l_sync_gdb, sizeof(l_sync_gdb)); + l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); + switch (l_res) { + case -1: + log_it(L_WARNING,"Timeout with link sync"); + break; + case 0: + log_it(L_INFO, "Node sync completed"); + break; + default: + log_it(L_INFO, "Node sync error %d",l_res); + } } l_tmp = dap_list_next(l_tmp); } @@ -542,6 +544,7 @@ static int s_net_states_proc(dap_chain_net_t * l_net) continue; } dap_chain_t * l_chain = NULL; + int l_res = 0; DL_FOREACH (l_net->pub.chains, l_chain) { l_node_client->state = NODE_CLIENT_STATE_CONNECTED; dap_stream_ch_chain_sync_request_t l_request ; @@ -551,37 +554,41 @@ static int s_net_states_proc(dap_chain_net_t * l_net) // wait for finishing of request int timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms // TODO add progress info to console - int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); - switch (l_res) { - case -1: - log_it(L_WARNING,"Timeout with sync of chain '%s' ", l_chain->name); - break; - case 0: - l_need_flush = true; - log_it(L_INFO, "Sync of chain '%s' completed ", l_chain->name); - break; - default: - log_it(L_ERROR, "Sync of chain '%s' error %d", l_chain->name,l_res); + if (dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) { + l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); + switch (l_res) { + case -1: + log_it(L_WARNING,"Timeout with sync of chain '%s' ", l_chain->name); + break; + case 0: + l_need_flush = true; + log_it(L_INFO, "Sync of chain '%s' completed ", l_chain->name); + break; + default: + log_it(L_ERROR, "Sync of chain '%s' error %d", l_chain->name,l_res); + } } - dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS, l_net->pub.id, - l_chain->id, l_net->pub.cell_id, &l_request, sizeof(l_request)); - l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); - switch (l_res) { - case -1: - log_it(L_WARNING,"Timeout with reverse sync of chain '%s' ", l_chain->name); - break; - case 0: - l_need_flush = true; - log_it(L_INFO, "Reverse sync of chain '%s' completed ", l_chain->name); - // set time of last sync - { - struct timespec l_to; - clock_gettime(CLOCK_MONOTONIC, &l_to); - l_pvt_net->last_sync = l_to.tv_sec; + if (dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id())) { + dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS, l_net->pub.id, + l_chain->id, l_net->pub.cell_id, &l_request, sizeof(l_request)); + l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); + switch (l_res) { + case -1: + log_it(L_WARNING,"Timeout with reverse sync of chain '%s' ", l_chain->name); + break; + case 0: + l_need_flush = true; + log_it(L_INFO, "Reverse sync of chain '%s' completed ", l_chain->name); + // set time of last sync + { + struct timespec l_to; + clock_gettime(CLOCK_MONOTONIC, &l_to); + l_pvt_net->last_sync = l_to.tv_sec; + } + break; + default: + log_it(L_ERROR, "Reverse sync of chain '%s' error %d", l_chain->name,l_res); } - break; - default: - log_it(L_ERROR, "Reverse sync of chain '%s' error %d", l_chain->name,l_res); } } l_tmp = dap_list_next(l_tmp);