From 5236f4fe957eaa545a7d164a61af5a0d87cfe4e6 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Wed, 3 May 2023 19:11:30 +0000 Subject: [PATCH] bugfix-8610 --- .../chain-net/dap_stream_ch_chain_net.c | 20 ++++++++----------- .../include/dap_stream_ch_chain_net_pkt.h | 2 +- .../chain-voting/dap_stream_ch_chain_voting.c | 5 ++++- .../consensus/esbocs/dap_chain_cs_esbocs.c | 5 +++-- .../esbocs/include/dap_chain_cs_esbocs.h | 2 +- modules/net/dap_chain_node_cli_cmd.c | 10 ++++------ .../type/blocks/include/dap_chain_cs_blocks.h | 2 +- 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c index 07fca63075..7c1bbd7a66 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -198,7 +198,14 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) if(l_ch_chain_net) { pthread_mutex_lock(&l_ch_chain_net->mutex); - dap_stream_ch_pkt_t *l_ch_pkt = (dap_stream_ch_pkt_t *) a_arg; + dap_stream_ch_pkt_t *l_ch_pkt = (dap_stream_ch_pkt_t *)a_arg; + if (l_ch_pkt->hdr.type == DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_TEST) { + char *l_data_hash_str; + dap_get_data_hash_str_static(l_ch_pkt->data, l_ch_pkt->hdr.data_size, l_data_hash_str); + log_it(L_ATT, "Receive test data packet with hash %s", l_data_hash_str); + pthread_mutex_unlock(&l_ch_chain_net->mutex); + return; + } dap_stream_ch_chain_net_pkt_t *l_ch_chain_net_pkt = (dap_stream_ch_chain_net_pkt_t *) l_ch_pkt->data; dap_chain_net_t *l_net = dap_chain_net_by_id(l_ch_chain_net_pkt->hdr.net_id); bool l_error = false; @@ -208,11 +215,6 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) strcpy(l_err_str, "ERROR_NET_INVALID_ID"); l_error = true; } - if (!l_error && dap_chain_net_get_state(l_net) == NET_STATE_OFFLINE) { - log_it(L_ERROR, "Net '%s' is offline", l_net->pub.name); - strcpy(l_err_str, "ERROR_NET_IS_OFFLINE"); - l_error = true; - } if (!l_error) { uint16_t l_acl_idx = dap_chain_net_get_acl_idx(l_net); uint8_t l_acl = a_ch->stream->session->acl ? a_ch->stream->session->acl[l_acl_idx] : 1; @@ -231,12 +233,6 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) if (!l_error && l_ch_chain_net_pkt) { size_t l_ch_chain_net_pkt_data_size = l_ch_pkt->hdr.data_size - sizeof(dap_stream_ch_chain_net_pkt_hdr_t); switch (l_ch_pkt->hdr.type) { - case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_DBG: { - dap_stream_ch_chain_net_pkt_write(a_ch, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_PING, - l_ch_chain_net_pkt->hdr.net_id, NULL, 0); - dap_stream_ch_set_ready_to_write_unsafe(a_ch, true); - } - break; // received ping request - > send pong request case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_PING: { //log_it(L_INFO, "Get STREAM_CH_CHAIN_NET_PKT_TYPE_PING"); diff --git a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h index 79c1c92cd8..69c7f76238 100644 --- a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h +++ b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h @@ -42,7 +42,7 @@ #define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST 0x30 #define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY 0x31 -#define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_DBG 0x99 +#define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_TEST 0x99 #define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ERROR 0xff diff --git a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c index 399f98c579..93560ed421 100644 --- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c +++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c @@ -10,6 +10,7 @@ #include "dap_client_pvt.h" #include "dap_proc_queue.h" #include "dap_chain_node_cli.h" +#include "dap_chain_cs_blocks.h" #define LOG_TAG "dap_stream_ch_chain_voting" @@ -142,8 +143,10 @@ static void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) return; size_t l_voting_pkt_size = l_ch_pkt->hdr.data_size; - if (!l_voting_pkt_size || l_voting_pkt_size > UINT16_MAX) + if (!l_voting_pkt_size || l_voting_pkt_size > DAP_CHAIN_CS_BLOCKS_MAX_BLOCK_SIZE + sizeof(dap_stream_ch_chain_voting_pkt_t)) { + log_it(L_ERROR, "Maximum packet size exceeded, drop this packet"); return; + } dap_stream_ch_chain_voting_pkt_t *l_voting_pkt = (dap_stream_ch_chain_voting_pkt_t *)l_ch_pkt->data; dap_proc_queue_add_callback(a_ch->stream_worker->worker, s_callback_pkt_in_call_all, diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index ecc7d0a4e0..ed5ad4ceed 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -559,8 +559,9 @@ static void s_session_round_new(dap_chain_esbocs_session_t *a_session) dap_hash_fast_t l_last_block_hash; s_get_last_block_hash(a_session->chain, &l_last_block_hash); - if (dap_hash_fast_is_blank(&a_session->cur_round.last_block_hash) || - !dap_hash_fast_compare(&l_last_block_hash, &a_session->cur_round.last_block_hash)) { + if (!dap_hash_fast_compare(&l_last_block_hash, &a_session->cur_round.last_block_hash) || + (!dap_hash_fast_is_blank(&l_last_block_hash) && + dap_hash_fast_is_blank(&a_session->cur_round.last_block_hash))) { a_session->cur_round.last_block_hash = l_last_block_hash; a_session->cur_round.sync_attempt = 1; } diff --git a/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h b/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h index 3daa6cf36b..272ff0ef27 100644 --- a/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h +++ b/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h @@ -6,7 +6,7 @@ #include "dap_chain_cs_blocks.h" #include "dap_cert.h" -#define DAP_CHAIN_ESBOCS_PROTOCOL_VERSION 1 +#define DAP_CHAIN_ESBOCS_PROTOCOL_VERSION 2 #define DAP_STREAM_CH_VOTING_MSG_TYPE_SUBMIT 0x04 #define DAP_STREAM_CH_VOTING_MSG_TYPE_APPROVE 0x08 diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 937f2372df..1600198e63 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -3682,9 +3682,9 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) // Calc datum's hash dap_chain_hash_fast_t l_key_hash; dap_hash_fast(l_datum->data, l_datum->header.data_size, &l_key_hash); - char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); - char * l_key_str_out = dap_strcmp(l_hash_out_type, "hex") ? - dap_enc_base58_encode_hash_to_str(&l_key_hash) : l_key_str; + char * l_key_str = dap_strcmp(l_hash_out_type, "hex") ? + dap_chain_hash_fast_to_str_new(&l_key_hash) : + dap_enc_base58_encode_hash_to_str(&l_key_hash); // Add datum to mempool with datum_token hash as a key char *l_gdb_group_mempool = l_chain @@ -3693,15 +3693,13 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) if (!l_gdb_group_mempool) { dap_cli_server_cmd_set_reply_text(a_str_reply, "No suitable chain for placing token datum found"); DAP_DEL_Z(l_key_str); - DAP_DEL_Z(l_key_str_out); DAP_DELETE(l_datum); return -10; } bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, l_datum_size, true) == 0; dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s with token %s is%s placed in datum pool", - l_key_str_out, l_ticker, l_placed ? "" : " not"); + l_key_str, l_ticker, l_placed ? "" : " not"); DAP_DEL_Z(l_key_str); - DAP_DEL_Z(l_key_str_out); DAP_DELETE(l_datum); DAP_DELETE(l_params); return l_placed ? 0 : -2; diff --git a/modules/type/blocks/include/dap_chain_cs_blocks.h b/modules/type/blocks/include/dap_chain_cs_blocks.h index 757eef586e..7ffbaf4d63 100644 --- a/modules/type/blocks/include/dap_chain_cs_blocks.h +++ b/modules/type/blocks/include/dap_chain_cs_blocks.h @@ -29,7 +29,7 @@ #ifdef DAP_TPS_TEST #define DAP_CHAIN_CS_BLOCKS_MAX_BLOCK_SIZE (100 * 1024 * 1024) #else -#define DAP_CHAIN_CS_BLOCKS_MAX_BLOCK_SIZE (48 * 1024) //(1 * 1024 * 1024) // 1 Mb +#define DAP_CHAIN_CS_BLOCKS_MAX_BLOCK_SIZE (1 * 1024 * 1024) // 1 Mb #endif typedef struct dap_chain_cs_blocks dap_chain_cs_blocks_t; -- GitLab