From 137af6ea30657e91bfabbf27e58e27deb03e03fa Mon Sep 17 00:00:00 2001 From: cellframe <roman.khlopkov@demlabs.net> Date: Mon, 2 Jan 2023 13:29:34 +0300 Subject: [PATCH] [*] Port master hotfix, format chanhges --- modules/chain/dap_chain_ledger.c | 4 +- .../dap_stream_ch_chain_net_srv_pkt.c | 15 +++-- .../include/dap_stream_ch_chain_net_srv_pkt.h | 7 ++- .../chain-net/dap_stream_ch_chain_net_pkt.c | 14 +++-- .../include/dap_stream_ch_chain_net_pkt.h | 2 +- modules/channel/chain/dap_stream_ch_chain.c | 56 +++++++++-------- .../chain/include/dap_stream_ch_chain.h | 2 +- .../chain/include/dap_stream_ch_chain_pkt.h | 4 +- .../consensus/dag-poa/dap_chain_cs_dag_poa.c | 4 +- modules/consensus/none/dap_chain_cs_none.c | 6 +- modules/mempool/dap_chain_mempool.c | 2 +- modules/net/dap_chain_net.c | 49 +++++++-------- modules/net/dap_chain_node_cli_cmd.c | 60 ++++++++++--------- modules/net/dap_chain_node_client.c | 4 +- modules/net/include/dap_chain_net.h | 2 +- modules/net/iputils/iputils.h | 4 +- modules/net/iputils/ping.h | 2 +- .../dap_chain_net_srv_stake_pos_delegate.c | 6 +- .../service/vpn/dap_chain_net_srv_vpn_cmd.c | 29 ++++----- .../service/vpn/dap_chain_net_vpn_client.c | 5 +- modules/type/dag/dap_chain_cs_dag.c | 22 +++---- 21 files changed, 159 insertions(+), 140 deletions(-) diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 120a86c53d..db96847502 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -1621,7 +1621,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger) "TSD and Signs:\n" "%s" "\tTotal emissions %u\n___\n", - &l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_native_decl.flags), + l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_native_decl.flags), l_balance_cur, l_balance_total, l_token_item->auth_signs_valid, l_token_item->auth_signs_total, l_str_tmp->str, @@ -1640,7 +1640,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger) "\tAuth signs (valid/total) %zu/%zu\n" "%s" "\tTotal emissions %u\n___\n", - &l_token_item->ticker, l_type_str, "SIMPLE token has no flags", + l_token_item->ticker, l_type_str, "SIMPLE token has no flags", l_balance_cur, l_balance_total, l_token_item->auth_signs_valid, l_token_item->auth_signs_total, l_str_tmp->str, diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c index e630e2df12..fca08955e0 100644 --- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c +++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c @@ -63,17 +63,20 @@ size_t dap_stream_ch_chain_net_srv_pkt_data_write(dap_stream_ch_t *a_ch, * @param a_str * @return */ -size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id, const char *a_str, ...) +size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id, const char *a_str, ...) { - va_list ap; + va_list ap, ap_copy; va_start(ap, a_str); - + va_copy(ap_copy, ap); size_t l_buf_size = dap_vsnprintf(NULL, 0, a_str, ap); - char* l_buf = DAP_NEW_Z_SIZE(char, l_buf_size); - dap_vsnprintf(l_buf, l_buf_size, a_str, ap); va_end(ap); - size_t ret = dap_stream_ch_chain_net_srv_pkt_data_write(a_ch, a_srv_uid, a_usage_id, l_buf, strlen(l_buf)); + + l_buf_size++; // include trailing 0 + char *l_buf = DAP_NEW_Z_SIZE(char, l_buf_size); + dap_vsprintf(l_buf, a_str, ap_copy); + va_end(ap_copy); + size_t ret = dap_stream_ch_chain_net_srv_pkt_data_write(a_ch, a_srv_uid, a_usage_id, l_buf, l_buf_size); DAP_DELETE(l_buf); return ret; } diff --git a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h index 0b78c06d44..9da89fdedb 100644 --- a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h +++ b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h @@ -38,5 +38,8 @@ size_t dap_stream_ch_chain_net_srv_pkt_data_write(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id , const void * a_data, size_t a_data_size); -size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id, - const char *a_str, ...); +DAP_PRINTF_ATTR(4, 5) size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch, + dap_chain_net_srv_uid_t a_srv_uid, + uint32_t a_usage_id, + const char *a_str, + ...); diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c index 717fc1d715..34a45f8167 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c @@ -56,11 +56,17 @@ size_t dap_stream_ch_chain_net_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type,d */ size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type,dap_chain_net_id_t a_net_id, const char *a_str, ...) { - char l_buf[4096]; - va_list ap; + va_list ap, ap_copy; va_start(ap, a_str); - dap_vsnprintf(l_buf, sizeof(l_buf), a_str, ap); + va_copy(ap_copy, ap); + size_t l_buf_size = dap_vsnprintf(NULL, 0, a_str, ap); va_end(ap); - size_t ret = dap_stream_ch_chain_net_pkt_write(a_ch, a_type, a_net_id, l_buf, strlen(l_buf)); + + l_buf_size++; // include trailing 0 + char *l_buf = DAP_NEW_Z_SIZE(char, l_buf_size); + dap_vsprintf(l_buf, a_str, ap_copy); + va_end(ap_copy); + size_t ret = dap_stream_ch_chain_net_pkt_write(a_ch, a_type, a_net_id, l_buf, l_buf_size); + DAP_DELETE(l_buf); return ret; } 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 cad56b1a88..00272aa590 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 @@ -54,5 +54,5 @@ typedef struct dap_stream_ch_chain_net_pkt{ } DAP_ALIGN_PACKED dap_stream_ch_chain_net_pkt_t; size_t dap_stream_ch_chain_net_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const void * a_data, size_t a_data_size); -size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const char *a_str, ...); +DAP_PRINTF_ATTR(4, 5) size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const char *a_str, ...); diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 39bc5eee2a..19119769bf 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -458,10 +458,9 @@ static bool s_sync_out_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a_ar l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS; if (!l_sync_request->request.id_start) l_flags |= F_DB_LOG_SYNC_FROM_ZERO; - if (l_ch_chain->request_db_log == NULL) - l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags); - else - dap_db_log_list_rewind(l_ch_chain->request_db_log); + if (l_ch_chain->request_db_log != NULL) + dap_db_log_list_delete(l_ch_chain->request_db_log); + l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags); if (l_ch_chain->request_db_log) { if (s_debug_more) @@ -518,10 +517,9 @@ static bool s_sync_update_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS; if (!l_sync_request->request.id_start) l_flags |= F_DB_LOG_SYNC_FROM_ZERO; - if (l_ch_chain->request_db_log == NULL) - l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags); - else - dap_db_log_list_rewind(l_ch_chain->request_db_log); + if (l_ch_chain->request_db_log != NULL) + dap_db_log_list_delete(l_ch_chain->request_db_log); + l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags); l_ch_chain->state = CHAIN_STATE_UPDATE_GLOBAL_DB; l_sync_request->gdb.db_log = l_ch_chain->request_db_log; l_sync_request->request.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net); @@ -860,7 +858,7 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg) } l_group_changed = strcmp(l_last_group, l_obj->group) || l_last_type != l_obj->type; // Send remote side notification about received obj - if (l_sync_request->request.node_addr.uint64 && + /*if (l_sync_request->request.node_addr.uint64 && (l_group_changed || i == l_data_obj_count - 1)) { struct sync_request *l_sync_req_tsd = DAP_DUP(l_sync_request); l_sync_req_tsd->request.id_end = l_last_id; @@ -868,7 +866,7 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg) dap_strdup_printf("%s.del", l_last_group); dap_proc_thread_worker_exec_callback_inter(a_thread, l_sync_request->worker->id, s_gdb_sync_tsd_worker_callback, l_sync_req_tsd); - } + }*/ l_last_id = l_obj->id; l_last_group = l_obj->group; l_last_type = l_obj->type; @@ -963,8 +961,7 @@ static bool s_chain_timer_callback(void *a_arg) l_ch_chain->callback_notify_packet_out(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_TIMEOUT, NULL, 0, l_ch_chain->callback_notify_arg); } - if (l_ch_chain->request_db_log) - s_free_log_list_gdb(l_ch_chain); + s_free_log_list_gdb(l_ch_chain); DAP_DELETE(a_arg); l_ch_chain->activity_timer = NULL; return false; @@ -1589,17 +1586,24 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) */ static void s_free_log_list_gdb ( dap_stream_ch_chain_t * a_ch_chain) { - // free log list - dap_db_log_list_delete(a_ch_chain->request_db_log); - a_ch_chain->request_db_log = NULL; - dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL; - HASH_ITER(hh, a_ch_chain->remote_gdbs, l_hash_item, l_tmp) { - // Clang bug at this, l_hash_item should change at every loop cycle - HASH_DEL(a_ch_chain->remote_gdbs, l_hash_item); - DAP_DELETE(l_hash_item); + if (a_ch_chain->request_db_log) { + // free log list + debug_if(s_debug_more, L_INFO, "[stm_ch_chain:%p] a_ch_chain->request_db_log:%p --- cleanuping ...", a_ch_chain, a_ch_chain->request_db_log); + dap_db_log_list_delete(a_ch_chain->request_db_log); + a_ch_chain->request_db_log = NULL; + } + + if (a_ch_chain->remote_gdbs) { + dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL; + HASH_ITER(hh, a_ch_chain->remote_gdbs, l_hash_item, l_tmp) { + // Clang bug at this, l_hash_item should change at every loop cycle + HASH_DEL(a_ch_chain->remote_gdbs, l_hash_item); + DAP_DELETE(l_hash_item); + } + a_ch_chain->remote_gdbs = NULL; } - a_ch_chain->remote_gdbs = NULL; } + /** * @brief s_ch_chain_go_idle * @param a_ch_chain @@ -1632,6 +1636,7 @@ static void s_ch_chain_go_idle(dap_stream_ch_chain_t *a_ch_chain) } a_ch_chain->remote_atoms = NULL; a_ch_chain->sent_breaks = 0; + s_free_log_list_gdb(a_ch_chain); } struct chain_io_complete { @@ -1726,6 +1731,8 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) break; l_data[i].hash = l_obj->hash; l_data[i].size = l_obj->pkt->data_size; + DAP_DELETE(l_obj->pkt); + DAP_DELETE(l_obj); } if (i) { l_was_sent_smth = true; @@ -1776,7 +1783,6 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) l_request_atom_hash_str); }*/ l_skip_count++; - l_ch_chain->timer_shots = -1; } else { l_hash_item = DAP_NEW_Z(dap_stream_ch_chain_hash_item_t); l_hash_item->hash = l_obj->hash; @@ -1786,9 +1792,11 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) l_pkt = dap_store_packet_multiple(l_pkt, l_obj->pkt); l_ch_chain->stats_request_gdb_processed++; l_pkt_size = sizeof(dap_global_db_pkt_t) + l_pkt->data_size; - if (l_pkt_size >= DAP_CHAIN_PKT_EXPECT_SIZE) - break; } + DAP_DELETE(l_obj->pkt); + DAP_DELETE(l_obj); + if (l_pkt_size >= DAP_CHAIN_PKT_EXPECT_SIZE) + break; } if (l_pkt_size) { l_was_sent_smth = true; diff --git a/modules/channel/chain/include/dap_stream_ch_chain.h b/modules/channel/chain/include/dap_stream_ch_chain.h index df8e1ea843..13580f1ae0 100644 --- a/modules/channel/chain/include/dap_stream_ch_chain.h +++ b/modules/channel/chain/include/dap_stream_ch_chain.h @@ -35,7 +35,7 @@ #include "dap_global_db_remote.h" #define DAP_CHAIN_NODE_SYNC_TIMEOUT 30 // sec -#define DAP_SYNC_TICKS_PER_SECOND 50 +#define DAP_SYNC_TICKS_PER_SECOND 10 typedef struct dap_stream_ch_chain dap_stream_ch_chain_t; typedef void (*dap_stream_ch_chain_callback_packet_t)(dap_stream_ch_chain_t*, uint8_t a_pkt_type, diff --git a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h b/modules/channel/chain/include/dap_stream_ch_chain_pkt.h index 69f2528f4e..531f54d3f6 100644 --- a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h +++ b/modules/channel/chain/include/dap_stream_ch_chain_pkt.h @@ -160,8 +160,8 @@ size_t dap_stream_ch_chain_pkt_write_inter(dap_events_socket_t * a_es_input, dap * @param a_err_string_format * @return */ -inline static size_t dap_stream_ch_chain_pkt_write_error_unsafe(dap_stream_ch_t *a_ch, uint64_t a_net_id, - uint64_t a_chain_id, uint64_t a_cell_id, const char * a_err_string_format,... ) +inline static DAP_PRINTF_ATTR(5, 6) size_t dap_stream_ch_chain_pkt_write_error_unsafe(dap_stream_ch_t *a_ch, uint64_t a_net_id, + uint64_t a_chain_id, uint64_t a_cell_id, const char * a_err_string_format, ...) { va_list l_va; char * l_str; diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 7680cddbc3..66e2c52ab2 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -249,7 +249,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply) l_event_hash_hex_str, &l_round_item_size, NULL, NULL ); if ( l_round_item == NULL ) { dap_cli_server_cmd_set_reply_text(a_str_reply, - "Can't find event in round.new - only place where could be signed the new event\n", + "Can't find event %s in round.new - only place where could be signed the new event\n", l_event_hash_str); ret = -30; }else { @@ -298,7 +298,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply) DAP_DELETE(l_event_new_hash_base58_str); } else { dap_cli_server_cmd_set_reply_text(a_str_reply, - "Can't sign event in round.new\n", + "Can't sign event %s in round.new\n", l_event_hash_str); ret=-1; } diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c index a13f1b1f82..4688ae7953 100644 --- a/modules/consensus/none/dap_chain_cs_none.c +++ b/modules/consensus/none/dap_chain_cs_none.c @@ -174,12 +174,12 @@ int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) l_gdb_priv->chain = a_chain; if(!l_gdb_priv->celled){ - l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX",l_net->pub.name, + l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X,l_net->pub.name, a_chain->id.uint64); }else { // here is not work because dap_chain_net_load() not yet fully performed - l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX.cell-%016llX",l_net->pub.name, - a_chain->id.uint64, a_chain->cells->id.uint64); + l_gdb_priv->group_datums = dap_strdup_printf("chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X".cell-%016"DAP_UINT64_FORMAT_X, + l_net->pub.name, a_chain->id.uint64, a_chain->cells->id.uint64); } // Add group prefix that will be tracking all changes diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 5a8b7e0b3c..ee44cac4de 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -1060,7 +1060,7 @@ void dap_chain_mempool_filter(dap_chain_t *a_chain, int *a_removed){ size_t l_objs_size = 0; dap_time_t l_cut_off_time = dap_time_now() - 2592000; // 2592000 sec = 30 days char l_cut_off_time_str[80] = {'\0'}; - dap_time_to_str_rfc822(&l_cut_off_time_str, 80, l_cut_off_time); + dap_time_to_str_rfc822(l_cut_off_time_str, 80, l_cut_off_time); dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_gdb_group, &l_objs_size); for (size_t i = 0; i < l_objs_size; i++) { dap_chain_datum_t *l_datum = (dap_chain_datum_t*)l_objs[i].value; diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 843ab84cf2..dde08b463e 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -233,8 +233,6 @@ static const char * c_net_states[]={ [NET_STATE_ONLINE]= "NET_STATE_ONLINE" }; -static dap_chain_net_t * s_net_new(const char * a_id, const char * a_name , const char * a_node_role); - // Node link callbacks static void s_node_link_callback_connected(dap_chain_node_client_t * a_node_client, void * a_arg); static void s_node_link_callback_disconnected(dap_chain_node_client_t * a_node_client, void * a_arg); @@ -1344,13 +1342,14 @@ dap_chain_node_role_t dap_chain_net_get_role(dap_chain_net_t * a_net) * @param a_node_role * @return dap_chain_net_t* */ -static dap_chain_net_t *s_net_new(const char * a_id, const char * a_name , - const char * a_node_role) +static dap_chain_net_t *s_net_new(const char *a_id, const char *a_name, + const char *a_native_ticker, const char *a_node_role) { - if (!a_id || !a_name || !a_node_role) + if (!a_id || !a_name || !a_native_ticker || !a_node_role) return NULL; dap_chain_net_t *ret = DAP_NEW_Z_SIZE( dap_chain_net_t, sizeof(ret->pub) + sizeof(dap_chain_net_pvt_t) ); ret->pub.name = strdup( a_name ); + ret->pub.native_ticker = strdup( a_native_ticker ); pthread_rwlock_init(&PVT(ret)->uplinks_lock, NULL); pthread_rwlock_init(&PVT(ret)->downlinks_lock, NULL); pthread_rwlock_init(&PVT(ret)->balancer_lock, NULL); @@ -1482,7 +1481,7 @@ void s_set_reply_text_node_status(char **a_str_reply, dap_chain_net_t * a_net){ char* l_sync_current_link_text_block = NULL; if (PVT(a_net)->state != NET_STATE_OFFLINE) - l_sync_current_link_text_block = dap_strdup_printf(", active links %u from %u", + l_sync_current_link_text_block = dap_strdup_printf(", active links %zu from %u", s_net_get_active_links_count(a_net), HASH_COUNT(PVT(a_net)->net_links)); dap_cli_server_cmd_set_reply_text(a_str_reply, @@ -1758,7 +1757,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply) (long double) l_tx_count / (long double) ( l_to_ts - l_from_ts ); dap_string_append_printf( l_ret_str, "\tSpeed: %.3Lf TPS\n", l_tps ); dap_string_append_printf( l_ret_str, "\tTotal: %"DAP_UINT64_FORMAT_U"\n", l_tx_count ); - dap_cli_server_cmd_set_reply_text( a_str_reply, l_ret_str->str ); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_ret_str->str); dap_string_free( l_ret_str, false ); } else if (strcmp(l_stats_str, "tps") == 0) { struct timespec l_from_time_acc = {}, l_to_time_acc = {}; @@ -2091,6 +2090,7 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) dap_chain_net_t * l_net = s_net_new( dap_config_get_item_str(l_cfg , "general" , "id" ), dap_config_get_item_str(l_cfg , "general" , "name" ), + dap_config_get_item_str(l_cfg , "general" , "native_ticker"), dap_config_get_item_str(l_cfg , "general" , "node-role" ) ); if(!l_net) { @@ -2190,12 +2190,18 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) // init LEDGER model l_net->pub.ledger = dap_chain_ledger_create(l_ledger_flags, l_net->pub.name); // Check if seed nodes are present in local db alias - char **l_seed_aliases = dap_config_get_array_str( l_cfg , "general" ,"seed_nodes_aliases" - ,&l_net_pvt->seed_aliases_count); - l_net_pvt->seed_aliases = l_net_pvt->seed_aliases_count>0 ? - (char **)DAP_NEW_SIZE(char**, sizeof(char*)*PVT(l_net)->seed_aliases_count) : NULL; - for(size_t i = 0; i < PVT(l_net)->seed_aliases_count; i++) { + char **l_seed_aliases = dap_config_get_array_str(l_cfg, "general", "seed_nodes_aliases", + &l_net_pvt->seed_aliases_count); + if (l_net_pvt->seed_aliases_count) + l_net_pvt->seed_aliases = (char **)DAP_NEW_SIZE(char *, sizeof(char *) * l_net_pvt->seed_aliases_count); + for(size_t i = 0; i < l_net_pvt->seed_aliases_count; i++) l_net_pvt->seed_aliases[i] = dap_strdup(l_seed_aliases[i]); + // randomize seed nodes list + for (int j = l_net_pvt->seed_aliases_count - 1; j > 0; j--) { + int n = rand() % j; + char *tmp = l_net_pvt->seed_aliases[n]; + l_net_pvt->seed_aliases[n] = l_net_pvt->seed_aliases[j]; + l_net_pvt->seed_aliases[j] = tmp; } uint16_t l_seed_nodes_addrs_len =0; @@ -2385,27 +2391,19 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) dap_chain_node_addr_t * l_node_addr; if ( l_node_addr_str == NULL) l_node_addr = dap_chain_node_alias_find(l_net, l_node_alias_str); - else{ + else { l_node_addr = DAP_NEW_Z(dap_chain_node_addr_t); - bool parse_succesfully = false; - if (dap_sscanf(l_node_addr_str, "0x%016"DAP_UINT64_FORMAT_x, &l_node_addr->uint64 ) == 1 ){ + if (dap_sscanf(l_node_addr_str, "0x%016"DAP_UINT64_FORMAT_x, &l_node_addr->uint64) == 1) log_it(L_DEBUG, "Parse node address with format 0x016llx"); - parse_succesfully = true; - } - if ( !parse_succesfully && dap_chain_node_addr_from_str(l_node_addr, l_node_addr_str) == 0) { + else if (dap_chain_node_addr_from_str(l_node_addr, l_node_addr_str) == 0) log_it(L_DEBUG, "Parse node address with format 04hX::04hX::04hX::04hX"); - parse_succesfully = true; - } - - if (!parse_succesfully){ + else { log_it(L_ERROR,"Can't parse node address %s", l_node_addr_str); - DAP_DELETE(l_node_addr); - l_node_addr = NULL; + DAP_DEL_Z(l_node_addr); } if(l_node_addr) log_it(L_NOTICE, "Parse node addr " NODE_ADDR_FP_STR " successfully", NODE_ADDR_FP_ARGS(l_node_addr)); l_net_pvt->node_addr = l_node_addr; - } if ( l_node_addr ) { char *l_addr_hash_str = dap_chain_node_addr_to_hash_str(l_node_addr); @@ -2549,7 +2547,6 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) } } } while (l_processed); - l_net->pub.native_ticker = dap_strdup(dap_config_get_item_str(l_cfg , "general" , "native_ticker")); } else { log_it(L_ERROR, "Can't find any chains for network %s", l_net->pub.name); l_net_pvt->load_mode = false; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 9d71832568..3e363090f8 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -219,7 +219,7 @@ static dap_chain_node_info_t* node_info_read_and_reply(dap_chain_net_t * a_net, node_info->hdr.ext_port = 8079; */ size_t node_info_size_must_be = dap_chain_node_info_get_size(node_info); if(node_info_size_must_be != node_info_size) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "node has bad size in base=%u (must be %u)", node_info_size, + dap_cli_server_cmd_set_reply_text(a_str_reply, "node has bad size in base=%zu (must be %zu)", node_info_size, node_info_size_must_be); DAP_DELETE(node_info); DAP_DELETE(l_key); @@ -314,7 +314,7 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info // add alias if(!dap_chain_node_alias_register(a_net, a_alias_str, &a_node_info->hdr.address)) { log_it(L_WARNING, "can't save alias %s", a_alias_str); - dap_cli_server_cmd_set_reply_text(a_str_reply, "alias '%s' can't be mapped to addr=0x%lld", + dap_cli_server_cmd_set_reply_text(a_str_reply, "alias '%s' can't be mapped to addr=0x%"DAP_UINT64_FORMAT_U, a_alias_str, a_node_info->hdr.address.uint64); return -1; } @@ -620,7 +620,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add if(!l_nodes_count || !l_objs) { dap_string_append_printf(l_string_reply, "No records\n"); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_reply->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str); dap_string_free(l_string_reply, true); dap_global_db_objs_delete(l_objs, l_nodes_count); return -1; @@ -708,7 +708,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add } dap_global_db_objs_delete(l_objs, l_nodes_count); } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_reply->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str); dap_string_free(l_string_reply, true); return l_ret; } @@ -788,7 +788,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) if(l_ret > 0) dap_cli_server_cmd_set_reply_text(a_str_reply, "cell added successfully"); else - dap_cli_server_cmd_set_reply_text(a_str_reply, "can't create file for cell 0x%016X ( %s )", + dap_cli_server_cmd_set_reply_text(a_str_reply, "can't create file for cell 0x%016"DAP_UINT64_FORMAT_X" ( %s )", l_cell->id.uint64,l_cell->file_storage_path); dap_chain_cell_close(l_cell); return l_ret; @@ -881,7 +881,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) char *l_value_str = DAP_NEW_Z_SIZE(char, l_value_len * 2 + 2); //size_t ret = dap_bin2hex(l_value_str, l_value, l_value_len); dap_cli_server_cmd_set_reply_text(a_str_reply, "Record found\n" - "lenght:\t%u byte\n" + "lenght:\t%zu byte\n" "hash:\t%s\n" "pinned:\t%s\n" "value:\t0x%s\n\n", l_value_len, l_hash_str, l_is_pinned ? "Yes" : "No", l_value_str); @@ -1944,8 +1944,8 @@ char l_buf[1024]; l_ledger = l_net->pub.ledger; l_net_name = l_net->pub.name; }else{ - dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64, - l_addr_str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find network id 0x%016"DAP_UINT64_FORMAT_X" from address %s", + l_addr->net_id.uint64, l_addr_str); return -1; } @@ -2041,7 +2041,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain); dap_string_t* l_net_str = dap_cli_list_net(); l_str_to_reply = dap_strcat2(l_str_to_reply,l_net_str->str); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_to_reply); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_to_reply); return -102; } @@ -2065,7 +2065,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, l_str_to_reply = dap_strcat2(l_str_to_reply,l_chain->name); l_str_to_reply = dap_strcat2(l_str_to_reply,"\n"); } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_to_reply); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_to_reply); return -103; } } @@ -2436,7 +2436,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a l_token_ticker = obj_token->header.ticker; } else { dap_list_t* l_tickers = NULL; - const char *l_native_ticker = a_net->pub.native_ticker; dap_chain_datum_tx_t *l_tx_parent = NULL; int l_item_in_size = 0; void *l_item_in = dap_chain_datum_tx_item_get((dap_chain_datum_tx_t*)l_datum->data, NULL, TX_ITEM_TYPE_IN_ALL, &l_item_in_size); @@ -2552,7 +2551,7 @@ int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply) else DL_FOREACH(l_net->pub.chains, l_chain) s_com_mempool_list_print_for_chain(l_net, l_chain, l_addr_base58, l_str_tmp, l_hash_out_type); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp, true); return 0; } @@ -2796,7 +2795,7 @@ int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply) } } dap_string_append_printf(l_str_tmp, "\n"); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp, true); } else { dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! Can't find datum %s", l_datum_hash_str); @@ -3784,7 +3783,7 @@ int com_token_emit(int a_argc, char **a_argv, char **a_str_reply) l_str_reply_tmp); DAP_DEL_Z(l_tx_hash_str); } else{ // if transaction was not specified when emission was added we need output only emission result - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_reply_tmp); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_reply_tmp); } DAP_DEL_Z(l_certs); DAP_DEL_Z(l_str_reply_tmp); @@ -3897,7 +3896,7 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply) } dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path); if(!l_wallet) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't open wallet '%s'", l_wallet); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't open wallet '%s'", l_wallet->name); return -12; } @@ -4489,10 +4488,11 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) if(!s_json_get_uint256(l_json_item_obj, "value", &l_value) || IS_ZERO_256(l_value)) { break; } - const char *l_params_str = s_json_get_text(l_json_item_obj, "params"); + /*const char *l_params_str = s_json_get_text(l_json_item_obj, "params"); size_t l_params_size = dap_strlen(l_params_str); - dap_chain_tx_out_cond_t *l_out_cond_item = NULL;//dap_chain_datum_tx_item_out_cond_create_srv_xchange(l_srv_uid, l_net->pub.id, l_token, l_value, l_params_str, l_params_size); - l_item = (const uint8_t*) l_out_cond_item; + dap_chain_tx_out_cond_t *l_out_cond_item = dap_chain_datum_tx_item_out_cond_create_srv_xchange(l_srv_uid, l_net->pub.id, l_token, l_value, l_params_str, l_params_size); + l_item = (const uint8_t*) l_out_cond_item;*/ + l_item = NULL; } break; case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE:{ @@ -4661,7 +4661,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) return -90; } // Completed successfully - dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s with %d items created and added to mempool successfully", l_tx_hash_str, l_items_ready); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s with %zu items created and added to mempool successfully", l_tx_hash_str, l_items_ready); DAP_DELETE(l_tx_hash_str); return l_err_code; } @@ -4821,7 +4821,7 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply) dap_string_append_printf(l_string_ret, "transfer=False\n"); res = -15; } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_ret->str); dap_string_free(l_string_ret, true); DAP_DELETE(l_addr_to); return res; @@ -4843,8 +4843,10 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply) // Check, if network ID is same as ID in destination wallet address. If not - operation is cancelled. if (!dap_chain_addr_is_blank(l_addr_to) && l_addr_to->net_id.uint64 != l_net->pub.id.uint64) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address", - l_addr_to->net_id.uint64, l_net->pub.id.uint64); + dap_cli_server_cmd_set_reply_text(a_str_reply, "destination wallet network ID=0x%"DAP_UINT64_FORMAT_x + " and network ID=0x%"DAP_UINT64_FORMAT_x" is not equal." + " Please, change network name or wallet address", + l_addr_to->net_id.uint64, l_net->pub.id.uint64); return -13; } @@ -4865,7 +4867,7 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply) res = -14; } } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_ret->str); dap_string_free(l_string_ret, true); DAP_DELETE(l_addr_to); @@ -5058,7 +5060,7 @@ int com_tx_history(int a_argc, char ** a_argv, char **a_str_reply) l_str_out ? l_str_out : " empty"); DAP_DELETE(l_addr_str); } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret); DAP_DELETE(l_str_out); DAP_DELETE(l_str_ret); return 0; @@ -5095,14 +5097,14 @@ int com_stats(int argc, char **a_argv, char **a_str_reply) { dap_cpu_monitor_init(); dap_usleep(500000); - char *l_str_reply_prev = dap_strdup_printf(""); + char *l_str_reply_prev = DAP_NEW_Z_SIZE(char, 1); char *l_str_delimiter; dap_cpu_stats_t s_cpu_stats = dap_cpu_get_stats(); for (uint32_t n_cpu_num = 0; n_cpu_num < s_cpu_stats.cpu_cores_count; n_cpu_num++) { if ((n_cpu_num % 4 == 0) && (n_cpu_num != 0)) { l_str_delimiter = dap_strdup_printf("\n"); } else if (n_cpu_num == s_cpu_stats.cpu_cores_count - 1) { - l_str_delimiter = dap_strdup_printf(""); + l_str_delimiter = DAP_NEW_Z_SIZE(char, 1); } else { l_str_delimiter = dap_strdup_printf(" "); } @@ -5180,7 +5182,7 @@ int com_print_log(int a_argc, char **a_argv, char **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "no logs"); return -1; } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret); DAP_DELETE(l_str_ret); return 0; } @@ -5270,7 +5272,7 @@ int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply) dap_cli_server_cmd_set_reply_text (a_str_reply, "Couldn't export JSON to file, error code %d", errno ); #else log_it(L_CRITICAL, "Couldn't export JSON to file, err '%s'", json_util_get_last_err()); - dap_cli_server_cmd_set_reply_text(a_str_reply, json_util_get_last_err()); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", json_util_get_last_err()); #endif json_object_put(l_json); return -1; @@ -5307,7 +5309,7 @@ int cmd_gdb_import(int a_argc, char **a_argv, char ** a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Import error occured: code %d",errno); #else log_it(L_CRITICAL, "Import error occured: %s", json_util_get_last_err()); - dap_cli_server_cmd_set_reply_text(a_str_reply, json_util_get_last_err()); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", json_util_get_last_err()); #endif return -1; } diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 5ea1d1d8c8..6692e7dec3 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -634,12 +634,12 @@ static void s_save_stat_to_database_callback_set_stat (dap_global_db_context_t * static void s_save_stat_to_database_callback_get_last_stat (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_len, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) { char * l_json_str = (char *) a_arg; - int64_t l_key = 0; + uint64_t l_key = 0; if(a_rc == DAP_GLOBAL_DB_RC_SUCCESS) { l_key = strtoll(a_key, NULL, 16); } - char *l_key_str = dap_strdup_printf("%06x", ++l_key); + char *l_key_str = dap_strdup_printf("%06"DAP_UINT64_FORMAT_x, ++l_key); dap_global_db_set(a_group, l_key_str, l_json_str, strlen(l_json_str) + 1,false, s_save_stat_to_database_callback_set_stat, l_json_str); DAP_DELETE(l_key_str); diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index ac11bd752b..0387edc7d4 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -170,7 +170,7 @@ DAP_STATIC_INLINE char *dap_chain_net_get_gdb_group_from_chain_new(dap_chain_t * { dap_chain_net_t *l_net = a_chain ? dap_chain_net_by_id(a_chain->net_id) : NULL; if ( l_net ) - return dap_strdup_printf("chain-gdb.%s.chain-%016llX",l_net->pub.name, a_chain->id.uint64); + return dap_strdup_printf("chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X,l_net->pub.name, a_chain->id.uint64); return NULL; } diff --git a/modules/net/iputils/iputils.h b/modules/net/iputils/iputils.h index 0330b548f1..e75981cb37 100644 --- a/modules/net/iputils/iputils.h +++ b/modules/net/iputils/iputils.h @@ -22,6 +22,8 @@ #include <setjmp.h> #include <sys/time.h> +#include "dap_common.h" + #ifdef __cplusplus extern "C" { #endif @@ -175,7 +177,7 @@ void iputils_reset_verbose(void); // analog printf() -int log_printf(const char *format, ...); +DAP_PRINTF_ATTR(1, 2) int log_printf(const char *format, ...); #define PACKAGE_NAME "iputils" #define PACKAGE_VERSION "0.1" diff --git a/modules/net/iputils/ping.h b/modules/net/iputils/ping.h index 651455289f..cf638f152e 100644 --- a/modules/net/iputils/ping.h +++ b/modules/net/iputils/ping.h @@ -163,7 +163,7 @@ static inline bitmap_t rcvd_test(ping_handle_t *a_ping_handle, uint16_t seq) } #ifndef HAVE_ERROR_H -static void error(int status, int errnum, const char *format, ...) +static DAP_PRINTF_ATTR(3, 4) void error(int status, int errnum, const char *format, ...) { va_list ap; diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c index 4b0b1aa4af..05cdd0fffb 100644 --- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c @@ -826,7 +826,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha } uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str); if (IS_ZERO_256(l_fee)) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)"); return -12; } // Create the stake item @@ -902,7 +902,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha } uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str); if (IS_ZERO_256(l_fee)) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)"); return -12; } uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_token_str); @@ -1036,7 +1036,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha if (l_fee_str) { long double l_fee = strtold(l_fee_str, NULL); if (!l_fee) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double> %"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)"); DAP_DELETE(l_stake); return -12; } diff --git a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c index df0d6ab08c..2856713bd1 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c @@ -9,7 +9,7 @@ static char* get_value_text(uintmax_t a_value) { if(a_value < 2048) - return dap_strdup_printf("%d bytes", a_value); + return dap_strdup_printf("%d bytes", (int)a_value); else if(a_value < 2048 * 1024) return dap_strdup_printf("%.2lf Kb", (double) a_value / 1024); else if(a_value < 2048ll * 1024 * 1024) @@ -33,9 +33,6 @@ static void add_value_text(dap_string_t *l_str, char *l_addstr, uintmax_t a_valu */ int com_vpn_statistics(int a_argc, char ** a_argv, char **a_str_reply) { - dap_stream_ch_t* a_ch; - dap_stream_t * stream; - dap_stream_session_t * session; // get statistics for all actual sessions dap_list_t *l_list = dap_stream_session_get_list_sessions(); dap_string_t *l_str = dap_string_new(NULL); @@ -83,7 +80,7 @@ int com_vpn_statistics(int a_argc, char ** a_argv, char **a_str_reply) // unlock sessions list dap_stream_session_get_list_sessions_unlock(); if(l_conn>0) - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str->str); else dap_cli_server_cmd_set_reply_text(a_str_reply, "No VPN connections"); // free tmp memory @@ -149,7 +146,7 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply) { case CMD_CHECK_RESULT: { char *l_str = dap_chain_net_vpn_client_check_result(l_net, l_hash_out_type); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str); DAP_DELETE(l_str); } break; @@ -179,7 +176,7 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply) l_data_size_to_send = 0;// no send data, only recv size_t l_data_size_to_recv = 10240; int l_timeout_test_ms = -1;// default timeout - int l_res = dap_chain_net_vpn_client_check(l_net, l_str_addr, NULL, l_srv_port, l_data_size_to_send, l_data_size_to_recv, l_timeout_test_ms); + l_res = dap_chain_net_vpn_client_check(l_net, l_str_addr, NULL, l_srv_port, l_data_size_to_send, l_data_size_to_recv, l_timeout_test_ms); } switch (l_res) { case 0: @@ -219,14 +216,12 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Value of datoshi not defined, use -value <value of datoshi> parameter"); break; } - uint64_t l_a_value_datoshi = strtoull(l_str_value_datoshi, NULL, 10); - if(!l_a_value_datoshi) - l_a_value_datoshi = strtoull(l_str_value_datoshi, NULL, 16); - if(!l_a_value_datoshi) { + uint256_t l_a_value_datoshi = dap_chain_balance_scan(l_str_value_datoshi); + if(IS_ZERO_256(l_a_value_datoshi)) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Value of datoshi have to be more then 0"); break; } - int l_res = dap_chain_net_vpn_client_update(l_net, l_str_wallet, l_str_token, l_a_value_datoshi); + int l_res = 0;//dap_chain_net_vpn_client_update(l_net, l_str_wallet, l_str_token, l_a_value_datoshi); if(!l_res) dap_cli_server_cmd_set_reply_text(a_str_reply, "VPN client init successfully"); else{ @@ -285,8 +280,8 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply) case CMD_STATUS: { char *l_wallet_name = NULL, *l_str_token = NULL; - uint64_t l_value_datoshi = 0; - dap_chain_net_vpn_client_get_wallet_info(l_net, &l_wallet_name, &l_str_token, &l_value_datoshi); + uint256_t l_value_datoshi = uint256_0; + //dap_chain_net_vpn_client_get_wallet_info(l_net, &l_wallet_name, &l_str_token, &l_value_datoshi); const char *l_status_txt = ""; switch (dap_chain_net_vpn_client_status()) { @@ -306,8 +301,10 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply) l_status_txt = "VPN client status unknown"; break; } - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nused:\nwallet:%s\nreceipt:%u*1e-9 %s", l_status_txt, - l_wallet_name, l_value_datoshi, l_str_token); + char *l_value_str = dap_chain_balance_to_coins(l_value_datoshi); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nused:\nwallet:%s\nreceipt:%s %s", l_status_txt, + l_wallet_name, l_value_str, l_str_token); + DAP_DELETE(l_value_str); break; } } diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index fd71bd40a0..031f517523 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -352,7 +352,7 @@ static dap_chain_hash_fast_t* dap_chain_net_vpn_client_tx_cond_hash(dap_chain_ne * * return: 0 Ok, 1 Ok, <0 Error */ - +// TODO replace it with 256 bit value int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet_name, const char *a_str_token, uint64_t a_value_datoshi) { @@ -383,11 +383,10 @@ int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet * * return: 0 Ok, 1 Ok, <0 Error */ - +// TODO replace it with 256 bit value int dap_chain_net_vpn_client_get_wallet_info(dap_chain_net_t *a_net, char **a_wallet_name, char **a_str_token, uint64_t *a_value_datoshi) { - size_t l_gdb_group_size = 0; char *l_gdb_group = dap_strdup_printf("local.%s", DAP_CHAIN_NET_SRV_VPN_CDB_GDB_PREFIX); if(a_wallet_name) *a_wallet_name = (char*) dap_global_db_get_sync(l_gdb_group, "wallet_name", NULL, NULL, NULL); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index b26732edd0..acc61e5f06 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -290,8 +290,10 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) char *l_gdb_group; if (!l_dag->is_celled) l_gdb_group = dap_strdup_printf( "dag-%s-%s-round", l_net->pub.gdb_groups_prefix, a_chain->name); - else - l_gdb_group = dap_strdup_printf( "dag-%s-%s-%016llx-round", l_net->pub.gdb_groups_prefix, a_chain->name, 0);//a_chain->cells->id.uint64); + else { + uint64_t l_cell_id = 0; //a_chain->cells->id.uint64; + l_gdb_group = dap_strdup_printf( "dag-%s-%s-%016"DAP_UINT64_FORMAT_x"-round", l_net->pub.gdb_groups_prefix, a_chain->name, l_cell_id); + } l_dag->gdb_group_events_round_new = dap_strdup_printf("%s.%s", l_gdb_group, l_round_new_str); DAP_DELETE(l_gdb_group); DAP_DELETE(l_round_new_str); @@ -1384,7 +1386,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) // Cleaning up dap_global_db_objs_delete(l_objs, l_objs_size); - dap_cli_server_cmd_set_reply_text(a_str_reply,l_str_ret_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret_tmp->str); dap_string_free(l_str_ret_tmp,false); // Spread new mempool changes and dag events in network - going to SYNC_ALL @@ -1689,7 +1691,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) } dap_chain_datum_dump(l_str_tmp, l_datum, l_hash_out_type); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp,false); ret=0; }else { @@ -1727,7 +1729,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) ret = -2; } - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp,false); } else if (!l_from_events_str || (strcmp(l_from_events_str,"events") == 0)) { dap_string_t * l_str_tmp = dap_string_new(NULL); @@ -1745,7 +1747,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); dap_string_append_printf(l_str_tmp,"%s.%s have total %zu events :\n", l_net->pub.name, l_chain->name, l_events_count); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp,false); }else if (l_from_events_str && (strcmp(l_from_events_str,"threshold") == 0) ){ dap_string_t * l_str_tmp = dap_string_new(NULL); @@ -1764,7 +1766,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); dap_string_append_printf(l_str_tmp,"%s.%s have total %zu events in threshold :\n", l_net->pub.name, l_chain->name, l_events_count); - dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str); dap_string_free(l_str_tmp,false); }else { @@ -1810,20 +1812,20 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) DAP_DEL_Z(l_event_new_hash_base58_str); } else { dap_cli_server_cmd_set_reply_text(a_str_reply, - "Can't sign event in round.new\n", + "Can't sign event %s in round.new\n", l_event_hash_str); ret=-1; } } else { dap_cli_server_cmd_set_reply_text(a_str_reply, - "No valid certificate provided for event signing\n", + "No valid certificate provided for event %s signing\n", l_event_hash_str); ret = -50; } DAP_DELETE(l_round_item); } else { dap_cli_server_cmd_set_reply_text(a_str_reply, - "Can't find event in round.new - only place where could be signed the new event\n", + "Can't find event %s in round.new - only place where could be signed the new event\n", l_event_hash_str); ret = -30; } -- GitLab