From 302ca1891e0d2e8eb49e29a740f8cfb5f5348816 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Tue, 7 Jun 2022 18:35:41 +0000 Subject: [PATCH] bugs-6279 --- CMakeLists.txt | 2 +- dap-sdk/io/dap_context.c | 14 ++- dap-sdk/io/dap_events.c | 4 +- dap-sdk/io/dap_events_socket.c | 12 +- dap-sdk/io/dap_proc_thread.c | 30 ++--- dap-sdk/io/dap_worker.c | 12 +- dap-sdk/io/include/dap_context.h | 1 + dap-sdk/io/include/dap_events_socket.h | 3 +- dap-sdk/io/include/dap_proc_thread.h | 1 + dap-sdk/io/include/dap_worker.h | 3 - dap-sdk/net/client/dap_client_pvt.c | 2 +- dap-sdk/net/stream/ch/include/dap_stream_ch.h | 13 +-- .../net/stream/ch/include/dap_stream_ch_pkt.h | 7 +- .../net/stream/stream/include/dap_stream.h | 18 +-- modules/channel/chain/dap_stream_ch_chain.c | 6 +- .../consensus/dag-poa/dap_chain_cs_dag_poa.c | 43 ++------ modules/global-db/dap_chain_global_db.c | 9 +- .../dap_chain_global_db_driver_cdb.c | 2 + modules/net/dap_chain_net.c | 12 +- modules/net/dap_chain_node_cli.c | 2 +- modules/net/dap_chain_node_cli_cmd.c | 33 +++--- modules/net/include/dap_chain_net.h | 4 +- modules/service/vpn/dap_chain_net_srv_vpn.c | 41 ++++--- .../vpn/dap_chain_net_vpn_client_tun.c | 4 +- modules/type/dag/dap_chain_cs_dag.c | 5 +- modules/type/dag/dap_chain_cs_dag_event.c | 103 +++++++----------- modules/type/dag/include/dap_chain_cs_dag.h | 3 - .../type/dag/include/dap_chain_cs_dag_event.h | 5 +- modules/wallet/dap_chain_wallet.c | 4 +- 29 files changed, 162 insertions(+), 236 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8b1295351..8f3f2e6fce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -project(cellframe-sdk C) cmake_minimum_required(VERSION 3.10) +project(cellframe-sdk C) set(CMAKE_C_STANDARD 11) set(CELLFRAME_SDK_NATIVE_VERSION "3.2-0") diff --git a/dap-sdk/io/dap_context.c b/dap-sdk/io/dap_context.c index 3c7b735846..2d635d83e4 100644 --- a/dap-sdk/io/dap_context.c +++ b/dap-sdk/io/dap_context.c @@ -789,8 +789,11 @@ int dap_context_thread_loop(dap_context_t * a_context) * generation of unexpected I/O events like POLLOUT and consuming CPU by this. */ dap_events_socket_set_writable_unsafe(l_cur, false);/* Clear "enable write flag" */ - if ( l_cur->callbacks.write_finished_callback ) /* Optionaly call I/O completion routine */ + if ( l_cur->callbacks.write_finished_callback ) { /* Optionaly call I/O completion routine */ + if (l_errno == EWOULDBLOCK || l_errno == EAGAIN || l_errno == EINTR) + l_errno = 0; l_cur->callbacks.write_finished_callback(l_cur, l_cur->callbacks.arg, l_errno); + } } }else{ log_it(L_ERROR, "Wrong bytes sent, %zd more then was in buffer %zd",l_bytes_sent, l_cur->buf_out_size); @@ -1112,7 +1115,12 @@ int dap_context_add_esocket(dap_context_t * a_context, dap_events_socket_t * a_e #else #error "Unimplemented new esocket on context callback for current platform" #endif - + // Add in context HT + a_esocket->me = a_esocket; + if (a_esocket->socket!=0 && a_esocket->socket != INVALID_SOCKET){ + HASH_ADD(hh, a_context->esockets, uuid, sizeof(a_esocket->uuid), a_esocket ); + a_context->event_sockets_count++; + } } @@ -1131,7 +1139,7 @@ dap_events_socket_t *dap_context_esocket_find_by_uuid(dap_context_t * a_context, dap_events_socket_t * l_ret = NULL; if(a_context->esockets ) { //HASH_FIND_PTR( a_worker->context->esockets, &a_es_uuid,l_ret ); - HASH_FIND(hh_worker, a_context->esockets, &a_es_uuid, sizeof(a_es_uuid), l_ret ); + HASH_FIND(hh, a_context->esockets, &a_es_uuid, sizeof(a_es_uuid), l_ret ); } return l_ret; } diff --git a/dap-sdk/io/dap_events.c b/dap-sdk/io/dap_events.c index 64f75ff883..1e8e4cb026 100644 --- a/dap-sdk/io/dap_events.c +++ b/dap-sdk/io/dap_events.c @@ -438,7 +438,7 @@ uint32_t dap_events_worker_get_index_min( ) log_it(L_CRITICAL, "Event socket reactor has not been fired, use dap_events_init() first"); for( uint32_t i = 1; i < s_threads_count; i++ ) { - if ( s_workers[min]->event_sockets_count > s_workers[i]->event_sockets_count ) + if ( s_workers[min]->context->event_sockets_count > s_workers[i]->context->event_sockets_count ) min = i; } @@ -484,6 +484,6 @@ void dap_events_worker_print_all( ) log_it(L_CRITICAL, "Event socket reactor has not been fired, use dap_events_init() first"); for( uint32_t i = 0; i < s_threads_count; i ++ ) { - log_it( L_INFO, "Worker: %d, count open connections: %d", s_workers[i]->id, s_workers[i]->event_sockets_count ); + log_it( L_INFO, "Worker: %d, count open connections: %d", s_workers[i]->id, s_workers[i]->context->event_sockets_count ); } } diff --git a/dap-sdk/io/dap_events_socket.c b/dap-sdk/io/dap_events_socket.c index 7ea684c728..ffa87b084f 100644 --- a/dap-sdk/io/dap_events_socket.c +++ b/dap-sdk/io/dap_events_socket.c @@ -1244,10 +1244,10 @@ void dap_events_socket_remove_and_delete_unsafe( dap_events_socket_t *a_es, bool assert(a_es); #ifdef DAP_EVENTS_CAPS_POLL - if(a_es->worker){ + if(a_es->context->worker){ assert (a_es->poll_index>=0); - a_es->worker->poll[a_es->poll_index].fd=-1; - a_es->worker->poll_esocket[a_es->poll_index]=NULL; + a_es->context->poll[a_es->poll_index].fd=-1; + a_es->context->poll_esocket[a_es->poll_index]=NULL; } #endif @@ -1316,8 +1316,8 @@ void dap_events_socket_remove_from_worker_unsafe( dap_events_socket_t *a_es, dap return; } - a_worker->event_sockets_count--; - HASH_DELETE(hh_worker,a_worker->context->esockets, a_es); + a_worker->context->event_sockets_count--; + HASH_DELETE(hh,a_worker->context->esockets, a_es); #if defined(DAP_EVENTS_CAPS_EPOLL) @@ -1374,7 +1374,7 @@ void dap_events_socket_remove_from_worker_unsafe( dap_events_socket_t *a_es, dap a_worker->context->poll[a_es->poll_index].fd = -1; a_worker->context->poll_compress = true; }else{ - log_it(L_ERROR, "Wrong poll index when remove from worker (unsafe): %u when total count %u", a_es->poll_index, a_worker->poll_count); + log_it(L_ERROR, "Wrong poll index when remove from worker (unsafe): %u when total count %u", a_es->poll_index, a_worker->context->poll_count); } #else #error "Unimplemented new esocket on worker callback for current platform" diff --git a/dap-sdk/io/dap_proc_thread.c b/dap-sdk/io/dap_proc_thread.c index 70d2e1653f..bc40962fdd 100644 --- a/dap-sdk/io/dap_proc_thread.c +++ b/dap-sdk/io/dap_proc_thread.c @@ -291,26 +291,18 @@ int dap_proc_thread_assign_esocket_unsafe(dap_proc_thread_t * a_thread, dap_even a_esocket->proc_thread = a_thread; #ifdef DAP_EVENTS_CAPS_EPOLL - // Init events for EPOLL - a_esocket->ev.events = a_esocket->ev_base_flags ; - if(a_esocket->flags & DAP_SOCK_READY_TO_READ ) - a_esocket->ev.events |= EPOLLIN; - if(a_esocket->flags & DAP_SOCK_READY_TO_WRITE ) - a_esocket->ev.events |= EPOLLOUT; - a_esocket->ev.data.ptr = a_esocket; - return epoll_ctl(a_thread->epoll_ctl, EPOLL_CTL_ADD, a_esocket->socket, &a_esocket->ev); + // Init events for EPOLL + a_esocket->ev.events = a_esocket->ev_base_flags ; + if(a_esocket->flags & DAP_SOCK_READY_TO_READ ) + a_esocket->ev.events |= EPOLLIN; + if(a_esocket->flags & DAP_SOCK_READY_TO_WRITE ) + a_esocket->ev.events |= EPOLLOUT; + a_esocket->ev.data.ptr = a_esocket; + return epoll_ctl(a_thread->epoll_ctl, EPOLL_CTL_ADD, a_esocket->socket, &a_esocket->ev); #elif defined (DAP_EVENTS_CAPS_POLL) - if ( a_thread->poll_count == a_thread->poll_count_max ){ // realloc - a_thread->poll_count_max *= 2; - log_it(L_WARNING, "Too many descriptors (%zu), resizing array twice to %zu", a_thread->poll_count, a_thread->poll_count_max); - a_thread->poll =DAP_REALLOC(a_thread->poll, a_thread->poll_count_max * sizeof(*a_thread->poll)); - a_thread->esockets =DAP_REALLOC(a_thread->esockets, a_thread->poll_count_max * sizeof(*a_thread->esockets)); - } - - a_thread->poll[a_thread->poll_count].fd = a_thread->proc_queue->esocket->fd; - a_thread->poll[a_thread->poll_count].events = a_thread->proc_queue->esocket->poll_base_flags; - a_thread->esockets[a_thread->poll_count] = a_thread->proc_queue->esocket; - a_thread->poll_count++; + int l_ret = dap_context_add_esocket(a_thread->context, a_esocket); + if (l_ret) + log_it(L_CRITICAL,"Can't add event socket's handler to worker i/o poll mechanism with error %d", errno); #elif defined (DAP_EVENTS_CAPS_KQUEUE) /* u_short l_flags = a_esocket->kqueue_base_flags; u_int l_fflags = a_esocket->kqueue_base_fflags; diff --git a/dap-sdk/io/dap_worker.c b/dap-sdk/io/dap_worker.c index 7c5293241a..2c57f62382 100644 --- a/dap-sdk/io/dap_worker.c +++ b/dap-sdk/io/dap_worker.c @@ -195,20 +195,13 @@ static void s_queue_add_es_callback( dap_events_socket_t * a_es, void * a_arg) l_es_new->is_initalized = true; } - int l_ret =dap_context_add_esocket(l_context,l_es_new); + int l_ret = dap_context_add_esocket(l_context, l_es_new); if ( l_ret != 0 ){ log_it(L_CRITICAL,"Can't add event socket's handler to worker i/o poll mechanism with error %d", errno); }else{ - // Add in worker - l_es_new->me = l_es_new; - if (l_es_new->socket!=0 && l_es_new->socket != INVALID_SOCKET){ - HASH_ADD(hh_worker, l_worker->context->esockets, uuid, sizeof(l_es_new->uuid), l_es_new ); - l_worker->event_sockets_count++; - } //log_it(L_DEBUG, "Added socket %d on worker %u", l_es_new->socket, w->id); if (l_es_new->callbacks.worker_assign_callback) l_es_new->callbacks.worker_assign_callback(l_es_new, l_worker); - } } @@ -343,11 +336,10 @@ static bool s_socket_all_check_activity( void * a_arg) dap_worker_t *l_worker = (dap_worker_t*) a_arg; assert(l_worker); dap_events_socket_t *l_es = NULL, *tmp = NULL; - char l_curtimebuf[64]; time_t l_curtime= time(NULL); //dap_ctime_r(&l_curtime, l_curtimebuf); //log_it(L_DEBUG,"Check sockets activity on worker #%u at %s", l_worker->id, l_curtimebuf); - HASH_ITER(hh_worker, l_worker->context->esockets, l_es, tmp ) { + HASH_ITER(hh, l_worker->context->esockets, l_es, tmp ) { if (l_es->type == DESCRIPTOR_TYPE_SOCKET_CLIENT){ if ( !(l_es->flags & DAP_SOCK_SIGNAL_CLOSE) && ( l_curtime >= (l_es->last_time_active + s_connection_timeout) ) && !l_es->no_close ) { diff --git a/dap-sdk/io/include/dap_context.h b/dap-sdk/io/include/dap_context.h index 182a1fb421..fc8bf2a837 100644 --- a/dap-sdk/io/include/dap_context.h +++ b/dap-sdk/io/include/dap_context.h @@ -63,6 +63,7 @@ typedef struct dap_context { #error "Not defined worker for your platform" #endif + atomic_uint event_sockets_count; dap_events_socket_t *esockets; // Hashmap of event sockets // Signal to exit diff --git a/dap-sdk/io/include/dap_events_socket.h b/dap-sdk/io/include/dap_events_socket.h index 52086076a9..2731c37c9b 100644 --- a/dap-sdk/io/include/dap_events_socket.h +++ b/dap-sdk/io/include/dap_events_socket.h @@ -279,8 +279,7 @@ typedef struct dap_events_socket { void *_inheritor; // Inheritor data to specific client type, usualy states for state machine void *_pvt; //Private section, different for different types struct dap_events_socket * me; // pointer on itself - UT_hash_handle hh; - UT_hash_handle hh_worker; // Handle for local CPU storage on worker + UT_hash_handle hh; // Handle for local CPU storage on worker or proc_thread } dap_events_socket_t; // Node of bidirectional list of clients #define SSL(a) (a ? (WOLFSSL *) (a)->_pvt : NULL) diff --git a/dap-sdk/io/include/dap_proc_thread.h b/dap-sdk/io/include/dap_proc_thread.h index e2b1e9fb5e..044b7de01a 100644 --- a/dap-sdk/io/include/dap_proc_thread.h +++ b/dap-sdk/io/include/dap_proc_thread.h @@ -76,3 +76,4 @@ void dap_proc_thread_worker_exec_callback_inter(dap_proc_thread_t * a_thread, si int dap_proc_thread_assign_esocket_unsafe(dap_proc_thread_t * a_thread, dap_events_socket_t * a_esocket); +#define dap_proc_thread_esocket_update_poll_flags(a, b) dap_context_poll_update(b) diff --git a/dap-sdk/io/include/dap_worker.h b/dap-sdk/io/include/dap_worker.h index c9cf8201d4..f26167879d 100644 --- a/dap-sdk/io/include/dap_worker.h +++ b/dap-sdk/io/include/dap_worker.h @@ -30,7 +30,6 @@ #include "dap_events.h" #include "dap_context.h" -typedef struct dap_context dap_context_t; //typedef struct dap_proc_queue dap_proc_queue_t; typedef struct dap_timerfd dap_timerfd_t; typedef struct dap_worker @@ -40,8 +39,6 @@ typedef struct dap_worker dap_proc_queue_t* proc_queue; dap_events_socket_t *proc_queue_input; - atomic_uint event_sockets_count; - // worker control queues dap_events_socket_t *queue_es_new; // Queue socket for new socket dap_events_socket_t **queue_es_new_input; // Queue socket for new socket diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index 56a7fdae61..dddf6f8bae 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -486,7 +486,7 @@ static bool s_stage_status_after(dap_client_pvt_t * a_client_pvt) a_client_pvt->stream_es = dap_events_socket_wrap_no_add(a_client_pvt->events, (int)a_client_pvt->stream_socket, &l_s_callbacks); a_client_pvt->stream_es->flags |= DAP_SOCK_CONNECTING ; // To catch non-blocking error when connecting we should up WRITE flag - //a_client_pvt->stream_es->flags |= DAP_SOCK_READY_TO_WRITE; + a_client_pvt->stream_es->flags |= DAP_SOCK_READY_TO_WRITE; a_client_pvt->stream_es->_inheritor = a_client_pvt; a_client_pvt->stream = dap_stream_new_es_client(a_client_pvt->stream_es); assert(a_client_pvt->stream); diff --git a/dap-sdk/net/stream/ch/include/dap_stream_ch.h b/dap-sdk/net/stream/ch/include/dap_stream_ch.h index c72f3c3003..c74c943fbd 100644 --- a/dap-sdk/net/stream/ch/include/dap_stream_ch.h +++ b/dap-sdk/net/stream/ch/include/dap_stream_ch.h @@ -25,16 +25,15 @@ #include <stdint.h> #include "uthash.h" #include "dap_math_ops.h" -typedef struct dap_stream dap_stream_t; +#include "dap_stream.h" + +#define TECHICAL_CHANNEL_ID 't' + typedef struct dap_stream_worker dap_stream_worker_t; -typedef struct dap_stream_pkt dap_stream_pkt_t; typedef struct dap_stream_ch_proc dap_stream_ch_proc_t; -typedef struct dap_stream_ch dap_stream_ch_t; typedef struct dap_events_socket dap_events_socket_t; -#define TECHICAL_CHANNEL_ID 't' - -typedef void (*dap_stream_ch_callback_t) (dap_stream_ch_t*,void*); +typedef void (* dap_stream_ch_callback_t)(dap_stream_ch_t *, void *); typedef uint64_t dap_stream_ch_uuid_t; typedef struct dap_stream_ch{ @@ -49,7 +48,7 @@ typedef struct dap_stream_ch{ uint64_t bytes_read; } stat; - uint8_t buf[500000]; + uint8_t buf[STREAM_BUF_SIZE_MAX]; dap_stream_ch_proc_t * proc; void * internal; diff --git a/dap-sdk/net/stream/ch/include/dap_stream_ch_pkt.h b/dap-sdk/net/stream/ch/include/dap_stream_ch_pkt.h index 4c9a324a6a..f2b4698d48 100644 --- a/dap-sdk/net/stream/ch/include/dap_stream_ch_pkt.h +++ b/dap-sdk/net/stream/ch/include/dap_stream_ch_pkt.h @@ -26,14 +26,9 @@ #include <stdint.h> #include <stddef.h> - +#include "dap_stream_ch.h" #include "dap_enc_key.h" -typedef uint64_t dap_stream_ch_uuid_t; -typedef struct dap_stream_ch dap_stream_ch_t; -typedef struct dap_stream_session dap_stream_session_t; -typedef struct dap_events_socket dap_events_socket_t; -typedef struct dap_stream_worker dap_stream_worker_t; typedef struct dap_stream_ch_pkt_hdr{ uint8_t id; // Channel id uint8_t enc_type; // Zero if not encrypted diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h index 639b9b7d83..758fbd97a3 100644 --- a/dap-sdk/net/stream/stream/include/dap_stream.h +++ b/dap-sdk/net/stream/stream/include/dap_stream.h @@ -26,28 +26,18 @@ #include <pthread.h> #include <stdbool.h> #include <pthread.h> - +#include "dap_http.h" #include "dap_events_socket.h" #include "dap_config.h" #include "dap_stream_session.h" -#include "dap_stream_ch.h" #include "dap_timerfd.h" #define CHUNK_SIZE_MAX (3 * 1024) - -typedef struct dap_client_remote dap_client_remote_t; -typedef struct dap_udp_server dap_udp_server_t; - - -typedef struct dap_http_client dap_http_client_t; -typedef struct dap_http dap_http_t; -typedef struct dap_stream dap_stream_t; -typedef struct dap_stream_pkt dap_stream_pkt_t; -typedef struct dap_events_socket dap_events_socket_t; #define STREAM_BUF_SIZE_MAX DAP_STREAM_PKT_SIZE_MAX * 4 #define STREAM_KEEPALIVE_TIMEOUT 3 // How often send keeplive messages (seconds) -typedef void (*dap_stream_callback)( dap_stream_t *,void*); +typedef struct dap_stream_ch dap_stream_ch_t; +typedef struct dap_stream_worker dap_stream_worker_t; typedef struct dap_stream { int id; @@ -87,6 +77,8 @@ typedef struct dap_stream { } dap_stream_t; +typedef void (*dap_stream_callback)(dap_stream_t *, void *); + #define DAP_STREAM(a) ((dap_stream_t *) (a)->_inheritor ) int dap_stream_init(dap_config_t * g_config); diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 617dc01786..4ec0585484 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -401,7 +401,7 @@ static bool s_sync_out_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a_ar dap_stream_ch_chain_t *l_ch_chain = DAP_STREAM_CH_CHAIN(l_ch); int l_flags = 0; - if (dap_chain_net_get_add_gdb_group(l_net, l_sync_request->request.node_addr)) + if (dap_chain_net_get_extra_gdb_group(l_net, l_sync_request->request.node_addr)) l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS; if (!l_sync_request->request.id_start) l_flags |= F_DB_LOG_SYNC_FROM_ZERO; @@ -461,7 +461,7 @@ static bool s_sync_update_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a dap_chain_net_add_downlink(l_net, l_ch->stream_worker, l_ch->uuid); dap_stream_ch_chain_t *l_ch_chain = DAP_STREAM_CH_CHAIN(l_ch); int l_flags = 0; - if (dap_chain_net_get_add_gdb_group(l_net, l_sync_request->request.node_addr)) + if (dap_chain_net_get_extra_gdb_group(l_net, l_sync_request->request.node_addr)) l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS; if (!l_sync_request->request.id_start) l_flags |= F_DB_LOG_SYNC_FROM_ZERO; @@ -709,7 +709,7 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg) uint32_t l_last_type = l_store_obj->type; bool l_group_changed = false; uint32_t l_time_store_lim_hours = dap_config_get_item_uint32_default(g_config, "resources", "dap_global_db_time_store_limit", 72); - dap_gdb_time_t l_time_now = dap_gdb_time_now(); + dap_gdb_time_t l_time_now = dap_gdb_time_now() + dap_gdb_time_from_sec(120); // time differnece consideration uint64_t l_limit_time = l_time_store_lim_hours ? l_time_now - dap_gdb_time_from_sec(l_time_store_lim_hours * 3600) : 0; for (size_t i = 0; i < l_data_obj_count; i++) { // obj to add 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 280795fc48..341a78e519 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -258,8 +258,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply) }else { size_t l_event_size = l_round_item->event_size; dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size); - size_t l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, - l_chain_net, l_poa_pvt->events_sign_cert->enc_key); + size_t l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, l_poa_pvt->events_sign_cert->enc_key); if ( l_event_size_new ) { dap_chain_hash_fast_t l_event_new_hash; @@ -415,8 +414,6 @@ static bool s_poa_round_check(dap_chain_t *a_chain) { if (l_objs_size) { for (size_t i = 0; i<l_objs_size; i++) { dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)l_objs[i].value; - size_t l_event_size = l_event_round_item->event_size; - dap_chain_cs_dag_event_t *l_event = (dap_chain_cs_dag_event_t *)l_event_round_item->event_n_signs; if ( (dap_time_now() - l_event_round_item->round_info.ts_update) > (l_poa_pvt->confirmations_timeout+l_poa_pvt->wait_sync_before_complete+10) ) { dap_chain_global_db_gr_del(l_objs[i].key, l_gdb_group_round); @@ -454,7 +451,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev //char * l_max_signs_hash; for (size_t l_index = 0; l_index<l_events_round_size; l_index++) { dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value; - if (!l_event_round_item || !l_events_round[l_index].value_len || !l_event_round_item->event_n_signs) { + if (!l_event_round_item || !l_events_round[l_index].value_len) { dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events); continue; } @@ -655,11 +652,11 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c log_it(L_NOTICE,"Loaded \"%s\" certificate to sign poa event", l_events_sign_cert); } - // Process events from GDB dap_chain_net_t *l_cur_net = dap_chain_net_by_name(a_chain->net_name); dap_chain_node_role_t l_role = dap_chain_net_get_role(l_cur_net); if (l_role.enums == NODE_ROLE_ROOT_MASTER || l_role.enums == NODE_ROLE_ROOT) { l_dag->callback_cs_event_round_sync = s_callback_event_round_sync; + /* Process events from GDB - leads to segfault with previous group truncate size_t l_round_objs_count; dap_global_db_obj_t *l_round_objs = dap_chain_global_db_gr_load(l_dag->gdb_group_events_round_new, &l_round_objs_count); if (l_round_objs) { @@ -669,6 +666,7 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c } dap_chain_global_db_objs_delete(l_round_objs, l_round_objs_count); } + */ } return 0; } @@ -716,7 +714,6 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count, size_t* a_event_size) { dap_return_val_if_fail(a_dag && a_dag->chain && DAP_CHAIN_CS_DAG_POA(a_dag), NULL); - dap_chain_net_t * l_net = dap_chain_net_by_name( a_dag->chain->net_name ); dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA(a_dag); if ( PVT(l_poa)->events_sign_cert == NULL){ log_it(L_ERROR, "Can't sign event with events_sign_cert in [dag-poa] section"); @@ -733,7 +730,7 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a int ret = PVT(l_poa)->callback_pre_sign->callback(a_dag->chain, l_event, *a_event_size, PVT(l_poa)->callback_pre_sign->arg); if (ret) return NULL; - *a_event_size = dap_chain_cs_dag_event_sign_add(&l_event, *a_event_size, l_net, PVT(l_poa)->events_sign_cert->enc_key); + *a_event_size = dap_chain_cs_dag_event_sign_add(&l_event, *a_event_size, PVT(l_poa)->events_sign_cert->enc_key); return l_event; } } @@ -743,8 +740,6 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_op_code, const char *a_group, const char *a_key, const void *a_value, const size_t a_value_size) { - dap_chain_net_t *l_net = dap_chain_net_by_id( a_dag->chain->net_id); - if ( a_value == NULL || a_op_code != DAP_DB$K_OPTYPE_ADD || !a_value || !a_value_size) { return 0; } @@ -767,10 +762,10 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_ || dap_chain_cs_dag_event_round_sign_exists(l_round_item, PVT(l_poa)->events_sign_cert->enc_key)) { // if my sign exists - //if (PVT(l_poa)->auto_round_complete && s_round_event_ready_minimum_check(a_dag, l_event, l_event_size, - // (char *)a_key, &l_round_item->round_info)) + if (PVT(l_poa)->auto_round_complete && s_round_event_ready_minimum_check(a_dag, l_event, l_event_size, + (char *)a_key, &l_round_item->round_info)) // cs done (minimum signs & verify passed) - // s_round_event_cs_done(a_dag, l_event, (char *)a_key, &l_round_item->round_info); + s_round_event_cs_done(a_dag, l_event, (char *)a_key, &l_round_item->round_info); s_round_event_clean_dup(a_dag, a_key); DAP_DELETE(l_round_item); DAP_DELETE(l_event); @@ -782,14 +777,13 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_ if ( !PVT(l_poa)->callback_pre_sign || !PVT(l_poa)->callback_pre_sign->callback || (ret = PVT(l_poa)->callback_pre_sign->callback(a_dag->chain, l_event, l_event_size, PVT(l_poa)->callback_pre_sign->arg)) == 0 ) { - l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, - l_net, PVT(l_poa)->events_sign_cert->enc_key); + l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, PVT(l_poa)->events_sign_cert->enc_key); } else { size_t l_round_item_size_new = 0; bool l_deleted = false; // set sign for reject if ( (l_round_item_size_new = dap_chain_cs_dag_event_round_sign_add(&l_round_item, a_value_size, - l_net, PVT(l_poa)->events_sign_cert->enc_key)) ) { + PVT(l_poa)->events_sign_cert->enc_key)) ) { // event reject log_it(L_NOTICE,"Can't sign Event %s Sign rejected by pre_sign callback, ret code=%d", a_key, ret); l_round_item->round_info.reject_count++; @@ -820,26 +814,13 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_ dap_chain_hash_fast_t l_event_new_hash; dap_chain_cs_dag_event_calc_hash(l_event, l_event_size_new, &l_event_new_hash); l_event_new_hash_hex_str = dap_chain_hash_fast_to_str_new(&l_event_new_hash); - if (dap_chain_cs_dag_event_gdb_set(a_dag, l_event_new_hash_hex_str, l_event, - l_event_size_new, l_round_item, a_group)) { - // a_dag->callback_broadcast(a_dag, l_round_item); - // dap_chain_global_db_gr_del(a_key, a_group); // Delete old event - } - bool l_event_is_ready = s_round_event_ready_minimum_check(a_dag, l_event, l_event_size_new, - l_event_new_hash_hex_str, &l_round_item->round_info); - if (l_event_is_ready && PVT(l_poa)->auto_round_complete) { // cs done (minimum signs & verify passed) - s_round_event_cs_done(a_dag, l_event, l_event_new_hash_hex_str, &l_round_item->round_info); - } + dap_chain_cs_dag_event_gdb_set(a_dag, l_event_new_hash_hex_str, l_event, + l_event_size_new, l_round_item, a_group); } else { l_event_size_new = l_event_size; l_event_new_hash_hex_str = (char *)a_key; } - // bool l_event_is_ready = s_round_event_ready_minimum_check(a_dag, l_event, l_event_size_new, - // l_event_new_hash_hex_str, &l_round_item->round_info); - // if (l_event_is_ready && PVT(l_poa)->auto_round_complete) { // cs done (minimum signs & verify passed) - // s_round_event_cs_done(a_dag, l_event, l_event_new_hash_hex_str, &l_round_item->round_info); - // } // Delete dup s_round_event_clean_dup(a_dag, l_event_new_hash_hex_str); if (l_event_new_hash_hex_str != a_key) diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c index 331c6a9bea..4f2e9a6664 100644 --- a/modules/global-db/dap_chain_global_db.c +++ b/modules/global-db/dap_chain_global_db.c @@ -577,10 +577,9 @@ dap_global_db_obj_t* dap_chain_global_db_load(size_t *a_data_size_out) void dap_global_db_change_notify(dap_store_obj_t *a_store_data) { dap_store_obj_t *l_obj = a_store_data; - dap_list_t *it = s_sync_group_items; - - while (it) { - for (; it; it = it->next) { + dap_list_t *l_items_list = s_sync_group_items; + while (l_items_list) { + for (dap_list_t *it = l_items_list; it; it = it->next) { dap_sync_group_item_t *l_sync_group_item = (dap_sync_group_item_t *)it->data; if (dap_fnmatch(l_sync_group_item->group_mask, l_obj->group, 0)) continue; @@ -592,7 +591,7 @@ void dap_global_db_change_notify(dap_store_obj_t *a_store_data) } return; } - it = it == s_sync_group_items ? s_sync_group_extra_items : NULL; + l_items_list = (l_items_list == s_sync_group_items) ? s_sync_group_extra_items : NULL; } } diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c index e489f50ad8..ad233a126b 100644 --- a/modules/global-db/dap_chain_global_db_driver_cdb.c +++ b/modules/global-db/dap_chain_global_db_driver_cdb.c @@ -394,6 +394,8 @@ dap_store_obj_t *dap_db_driver_cdb_read_last_store_obj(const char* a_group) { CDB *l_cdb = l_cdb_i->cdb; CDBSTAT l_cdb_stat; cdb_stat(l_cdb, &l_cdb_stat); + if (!l_cdb_stat.rnum) + return NULL; void *l_iter = cdb_iterate_new(l_cdb, 0); obj_arg l_arg; l_arg.o = DAP_NEW_Z(dap_store_obj_t); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index cc1a2a0c75..cccefadda6 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -302,7 +302,7 @@ int dap_chain_net_init() "\tMode \"update\" is by default when only new chains and gdb are updated. Mode \"all\" updates everything from zero\n" "net -net <chain net name> get status\n" "\tLook at current status\n" - "net -net <chain net name> stats tx|tps [-from <From time>] [-to <To time>] [-prev_sec <Seconds>] \n" + "net -net <chain net name> stats {tx | tps} [-from <From time>] [-to <To time>] [-prev_sec <Seconds>] \n" "\tTransactions statistics. Time format is <Year>-<Month>-<Day>_<Hours>:<Minutes>:<Seconds> or just <Seconds> \n" "net -net <chain net name> [-mode {update | all}] sync {all | gdb | chains}\n" "\tSyncronyze gdb, chains or everything\n" @@ -451,6 +451,10 @@ static bool s_net_send_records(dap_proc_thread_t *a_thread, void *a_arg) log_it(L_DEBUG, "Notified GDB event does not exist"); return true; } + if (!l_obj->group || !l_obj->key) { + dap_store_obj_free_one(l_obj); + return true; + } l_obj->type = l_arg->type; if (l_obj->type == DAP_DB$K_OPTYPE_DEL) { DAP_DELETE(l_obj->group); @@ -469,8 +473,6 @@ static bool s_net_send_records(dap_proc_thread_t *a_thread, void *a_arg) l_chain = dap_chain_get_chain_from_group_name(l_net->pub.id, l_obj->group); dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t) {}; dap_chain_cell_id_t l_cell_id = l_chain ? l_chain->cells->id : (dap_chain_cell_id_t){}; - if (!l_obj_cur->group) - break; dap_store_obj_pkt_t *l_data_out = dap_store_packet_single(l_obj_cur); dap_store_obj_free_one(l_obj_cur); struct downlink *l_link, *l_tmp; @@ -3236,12 +3238,12 @@ dap_chain_datum_tx_t * dap_chain_net_get_tx_by_hash(dap_chain_net_t * a_net, dap } /** - * @brief dap_chain_net_get_add_gdb_group + * @brief dap_chain_net_get_extra_gdb_group * @param a_net * @param a_node_addr * @return */ -bool dap_chain_net_get_add_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr_t a_node_addr) +bool dap_chain_net_get_extra_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr_t a_node_addr) { if(!a_net || !PVT(a_net) || !PVT(a_net)->gdb_sync_nodes_addrs) return false; diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index 76ec838f98..4e1250bd85 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -1096,7 +1096,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config) "ledger list balance -net <network name>\n" "ledger info -hash <tx_hash> -net <network name> [-unspent]\n" "ledger tx -all -net <network name>\n" - "ledger tx [-addr <addr> | -w <wallet name> | -tx <tx_hash>] [-chain <chain name>] -net <network name>\n"); + "ledger tx {-addr <addr> | -w <wallet name> | -tx <tx_hash>} [-chain <chain name>] -net <network name>\n"); // Token info dap_chain_node_cli_cmd_item_create("token", com_token, "Token info", diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 9ca432efac..d1e0dc7de4 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1598,7 +1598,7 @@ int com_ping(int argc, char** argv, char **str_reply) int n = 4; if(argc < 2) { - dap_chain_node_cli_set_reply_text(str_reply, "host not specified"); + dap_chain_node_cli_set_reply_text(str_reply, "Host not specified"); return -1; } const char *n_str = NULL; @@ -1625,24 +1625,24 @@ int com_ping(int argc, char** argv, char **str_reply) DAP_DELETE(l_ping_handle); if(res >= 0) { if(str_reply) - dap_chain_node_cli_set_reply_text(str_reply, "ping %s time=%.1lf ms", addr, res * 1. / 1000); + dap_chain_node_cli_set_reply_text(str_reply, "Ping %s time=%.1lf ms", addr, res * 1. / 1000); } else { if(str_reply) { switch (-res) { case EDESTADDRREQ: - dap_chain_node_cli_set_reply_text(str_reply, "ping %s error: %s", addr, "Destination address required"); + dap_chain_node_cli_set_reply_text(str_reply, "Ping %s error: %s", addr, "Destination address required"); break; case EADDRNOTAVAIL: - dap_chain_node_cli_set_reply_text(str_reply, "ping %s error: %s", (addr) ? addr : "", + dap_chain_node_cli_set_reply_text(str_reply, "Ping %s error: %s", (addr) ? addr : "", (addr) ? "Host not found" : "Host not defined"); break; case EPFNOSUPPORT: - dap_chain_node_cli_set_reply_text(str_reply, "ping %s error: %s", addr, "Unknown protocol family"); + dap_chain_node_cli_set_reply_text(str_reply, "Ping %s error: %s", addr, "Unknown protocol family"); break; default: - dap_chain_node_cli_set_reply_text(str_reply, "ping %s error(%d)", addr, -res); + dap_chain_node_cli_set_reply_text(str_reply, "Ping %s error(%d)", addr, -res); } } } @@ -1782,11 +1782,13 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) } // check wallet existence - if(!l_is_force){ - dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); - if(l_wallet) { - dap_chain_node_cli_set_reply_text(str_reply, "Wallet already exists"); - dap_chain_wallet_close(l_wallet); + if (!l_is_force) { + char *l_file_name = dap_strdup_printf("%s/%s.dwallet", c_wallets_path, l_wallet_name); + FILE *l_exists = fopen(l_file_name, "rb"); + DAP_DELETE(l_file_name); + if (l_exists) { + dap_chain_node_cli_set_reply_text(str_reply, "Wallet %s already exists", l_wallet_name); + fclose(l_exists); return -1; } } @@ -1809,7 +1811,7 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) if (l_sign_type.type == SIG_TYPE_TESLA) { - dap_chain_node_cli_set_reply_text(str_reply, "Tesla algorithm is not supported, please, use another variant"); + dap_chain_node_cli_set_reply_text(str_reply, "Tesla algorithm is no longer supported, please, use another variant"); return -1; } @@ -2005,8 +2007,6 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch // Select chain if(l_chain_str) { if((*a_chain = dap_chain_net_get_chain_by_name(*a_net, l_chain_str)) == NULL) { // Can't find such chain - dap_chain_node_cli_set_reply_text(a_str_reply, - "%s requires parameter '-chain' to be valid chain name in chain net %s. Current chain %s is not valid", char l_str_to_reply_chain[500] = {0}; char *l_str_to_reply = NULL; dap_sprintf(l_str_to_reply_chain, "%s requires parameter '-chain' to be valid chain name in chain net %s. Current chain %s is not valid\n", @@ -2015,7 +2015,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch dap_chain_t * l_chain; dap_chain_net_t * l_chain_net = *a_net; l_str_to_reply = dap_strcat2(l_str_to_reply,"\nAvailable chains:\n"); - DL_FOREACH(l_chain_net->pub.chains, l_chain){ + DL_FOREACH(l_chain_net->pub.chains, l_chain) { l_str_to_reply = dap_strcat2(l_str_to_reply,"\t"); l_str_to_reply = dap_strcat2(l_str_to_reply,l_chain->name); l_str_to_reply = dap_strcat2(l_str_to_reply,"\n"); @@ -2288,11 +2288,12 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a else dap_string_append_printf(a_str_tmp, "%s.%s: Not found records\n", a_net->pub.name, a_chain->name); for(size_t i = 0; i < l_objs_size; i++) { - dap_chain_datum_t * l_datum = (dap_chain_datum_t*) l_objs[i].value; + dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value; dap_time_t l_ts_create = (dap_time_t) l_datum->header.ts_create; if (!l_datum->header.data_size || (l_datum->header.data_size > l_objs[i].value_len)) { log_it(L_ERROR, "Trash datum in GDB %s.%s, key: %s data_size:%u, value_len:%zu", a_net->pub.name, a_chain->name, l_objs[i].key, l_datum->header.data_size, l_objs[i].value_len); + dap_chain_global_db_gr_del(l_objs[i].key, l_gdb_group_mempool); continue; } char buf[50] = {[0]='\0'}; diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 8e300c0fe4..cf7d197865 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -28,7 +28,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include <stdint.h> #include <string.h> #include "dap_net.h" -#include "dap_stream.h" +#include "dap_stream_ch.h" #include "dap_strfuncs.h" #include "dap_string.h" #include "dap_chain_common.h" @@ -185,7 +185,7 @@ DAP_STATIC_INLINE char * dap_chain_net_get_gdb_group_from_chain(dap_chain_t * l_ dap_chain_t * dap_chain_net_get_chain_by_chain_type(dap_chain_net_t * l_net, dap_chain_type_t a_datum_type); char * dap_chain_net_get_gdb_group_mempool_by_chain_type(dap_chain_net_t * l_net, dap_chain_type_t a_datum_type); dap_chain_net_t **dap_chain_net_list(uint16_t *a_size); -bool dap_chain_net_get_add_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr_t a_node_addr); +bool dap_chain_net_get_extra_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr_t a_node_addr); int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ); void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, const char *a_hash_out_type); diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index 70bf83f326..51ca69ef65 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -246,7 +246,7 @@ static bool s_tun_client_send_data(dap_chain_net_srv_ch_vpn_info_t * l_ch_vpn_in if(l_ch_vpn_info->is_on_this_worker){ dap_events_socket_t * l_es = NULL; - if( (l_es= dap_worker_esocket_find_uuid( l_ch_vpn_info->worker, l_ch_vpn_info->esocket_uuid )) != NULL ){ + if( (l_es= dap_context_esocket_find_by_uuid(l_ch_vpn_info->worker->context, l_ch_vpn_info->esocket_uuid)) != NULL ){ if(l_es != l_ch_vpn_info->esocket){ log_it(L_WARNING, "Was wrong esocket %p on worker #%u, lost %zd data",l_ch_vpn_info->esocket, l_ch_vpn_info->worker->id,a_data_size ); DAP_DELETE(l_pkt_out); @@ -300,7 +300,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void switch (l_msg->type) { case TUN_SOCKET_MSG_ESOCKET_REASSIGNED:{ assert(l_msg->esocket_reassigment.worker_id < s_tun_sockets_count); - dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->worker->id]; + dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->context->worker->id]; assert(l_tun_sock); dap_chain_net_srv_ch_vpn_info_t * l_info = NULL; HASH_FIND(hh,l_tun_sock->clients,&l_msg->esocket_reassigment.addr , sizeof (l_msg->esocket_reassigment.addr), l_info); @@ -308,11 +308,11 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void l_info->worker = dap_events_worker_get(l_msg->esocket_reassigment.worker_id); l_info->queue_msg = s_tun_sockets_queue_msg[l_msg->esocket_reassigment.worker_id]; l_info->is_reassigned_once = true; - l_info->is_on_this_worker =(a_esocket_queue->worker->id == l_msg->esocket_reassigment.worker_id); + l_info->is_on_this_worker =(a_esocket_queue->context->worker->id == l_msg->esocket_reassigment.worker_id); if(dap_log_level_get() <= L_INFO){ char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'}; inet_ntop(AF_INET,&l_msg->esocket_reassigment.addr, l_addrbuf, sizeof (l_addrbuf)); - log_it(L_INFO, "Tun:%u message: addr %s reassign on worker #%u",a_esocket_queue->worker->id, + log_it(L_INFO, "Tun:%u message: addr %s reassign on worker #%u",a_esocket_queue->context->worker->id, l_addrbuf, l_msg->esocket_reassigment.worker_id); } }else{ @@ -321,13 +321,13 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void inet_ntop(AF_INET,&l_msg->esocket_reassigment.addr, l_addrbuf, sizeof (l_addrbuf)); log_it(L_INFO,"Reassigment message for address %s on worker %u comes but no such address was found on tun socket %u", l_addrbuf, l_msg->esocket_reassigment.worker_id, - a_esocket_queue->worker->id); + a_esocket_queue->context->worker->id); } } } break; case TUN_SOCKET_MSG_IP_ASSIGNED:{ assert(l_msg->ip_assigment.worker_id < s_tun_sockets_count); - dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->worker->id]; + dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->context->worker->id]; assert(l_tun_sock); dap_chain_net_srv_ch_vpn_info_t * l_new_info = NULL; @@ -343,7 +343,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void l_new_info->queue_msg = s_tun_sockets_queue_msg[l_msg->ip_assigment.worker_id]; l_new_info->usage_id = l_msg->ip_assigment.usage_id; l_new_info->is_reassigned_once = l_msg->is_reassigned_once; - l_new_info->is_on_this_worker = (l_msg->ip_assigment.worker_id == a_esocket_queue->worker->id); + l_new_info->is_on_this_worker = (l_msg->ip_assigment.worker_id == a_esocket_queue->context->worker->id); l_new_info->esocket = l_msg->esocket; l_new_info->esocket_uuid = l_msg->esocket_uuid; l_new_info->worker = dap_events_worker_get(l_msg->ip_assigment.worker_id); @@ -351,7 +351,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void if(s_debug_more){ char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'}; inet_ntop(AF_INET,&l_msg->ip_assigment.addr, l_addrbuf, sizeof (l_addrbuf)); - log_it(L_DEBUG, "Tun:%u message: addr %s assigned for worker #%u on tun #u",a_esocket_queue->worker->id, + log_it(L_DEBUG, "Tun:%u message: addr %s assigned for worker #%u on tun #u",a_esocket_queue->context->worker->id, l_addrbuf, l_msg->ip_assigment.worker_id); } } @@ -359,7 +359,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void }break; case TUN_SOCKET_MSG_IP_UNASSIGNED:{ assert(l_msg->ip_unassigment.worker_id < s_tun_sockets_count); - dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->worker->id]; + dap_chain_net_srv_vpn_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->context->worker->id]; assert(l_tun_sock); dap_chain_net_srv_ch_vpn_info_t * l_new_info = NULL; @@ -383,12 +383,11 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void if(s_debug_more){ char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'}; inet_ntop(AF_INET,&l_msg->ip_assigment.addr, l_addrbuf, sizeof (l_addrbuf)); - log_it(L_DEBUG, "Tun:%u message: send %u bytes for ch vpn protocol",a_esocket_queue->worker->id, + log_it(L_DEBUG, "Tun:%u message: send %u bytes for ch vpn protocol",a_esocket_queue->context->worker->id, l_msg->ch_vpn_send.pkt->header.op_data.data_size ); } - if(dap_worker_esocket_find_uuid( a_esocket_queue->worker, l_msg->esocket_uuid )== l_msg->esocket ){ - s_tun_client_send_data_unsafe(l_msg->ch_vpn,l_msg->ch_vpn_send.pkt); - } + if (dap_context_esocket_find_by_uuid(a_esocket_queue->context, l_msg->esocket_uuid) == l_msg->esocket) + s_tun_client_send_data_unsafe(l_msg->ch_vpn, l_msg->ch_vpn_send.pkt); DAP_DELETE(l_msg->ch_vpn_send.pkt); }break; default:log_it(L_ERROR,"Wrong tun socket message type %d", l_msg->type); @@ -1366,9 +1365,9 @@ static ch_vpn_pkt_t *s_tun_fifo_read(dap_chain_net_srv_vpn_tun_socket_t *a_tun) static void s_es_tun_delete(dap_events_socket_t * a_es, void * arg) { (void) arg; - if (a_es->worker) { - s_tun_sockets[a_es->worker->id] = NULL; - dap_events_socket_remove_and_delete_unsafe(s_tun_sockets_queue_msg[a_es->worker->id],false); + if (a_es->context->worker) { + s_tun_sockets[a_es->context->worker->id] = NULL; + dap_events_socket_remove_and_delete_unsafe(s_tun_sockets_queue_msg[a_es->context->worker->id],false); log_it(L_NOTICE,"Destroyed TUN event socket"); } } @@ -1432,11 +1431,11 @@ static void s_es_tun_read(dap_events_socket_t * a_es, void * arg) // We found in local table, sending data (if possible) if (l_vpn_info){ if ( !l_vpn_info->is_on_this_worker && !l_vpn_info->is_reassigned_once && s_raw_server->auto_cpu_reassignment ){ - log_it(L_NOTICE, "Reassigning from worker %u to %u", l_vpn_info->worker->id, a_es->worker->id); + log_it(L_NOTICE, "Reassigning from worker %u to %u", l_vpn_info->worker->id, a_es->context->worker->id); l_vpn_info->is_reassigned_once = true; s_tun_send_msg_esocket_reasigned_all_inter(l_vpn_info->ch_vpn, l_vpn_info->esocket,l_vpn_info->esocket_uuid, - l_vpn_info->addr_ipv4,a_es->worker->id); - dap_events_socket_reassign_between_workers_mt( l_vpn_info->worker,l_vpn_info->esocket,a_es->worker); + l_vpn_info->addr_ipv4, a_es->context->worker->id); + dap_events_socket_reassign_between_workers_mt( l_vpn_info->worker, l_vpn_info->esocket, a_es->context->worker); } s_tun_client_send_data(l_vpn_info, a_es->buf_in, l_buf_in_size); }else if(s_debug_more){ @@ -1470,11 +1469,11 @@ static void s_es_tun_new(dap_events_socket_t * a_es, void * arg) (void) arg; dap_chain_net_srv_vpn_tun_socket_t * l_tun_socket = DAP_NEW_Z(dap_chain_net_srv_vpn_tun_socket_t); if ( l_tun_socket ){ - dap_worker_t * l_worker = l_tun_socket->worker = a_es->worker; + dap_worker_t * l_worker = l_tun_socket->worker = a_es->context->worker; uint32_t l_worker_id = l_tun_socket->worker_id = l_worker->id; l_tun_socket->es = a_es; - s_tun_sockets_queue_msg[l_worker_id] = dap_events_socket_create_type_queue_ptr_unsafe(l_worker, s_tun_recv_msg_callback ); + s_tun_sockets_queue_msg[l_worker_id] = dap_context_create_esocket_queue(l_worker->context, s_tun_recv_msg_callback ); s_tun_sockets[l_worker_id] = l_tun_socket; l_tun_socket->queue_tun_msg_input = DAP_NEW_Z_SIZE(dap_events_socket_t*,sizeof(dap_events_socket_t*)* diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c index 296a02586c..2ea066146b 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c +++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c @@ -258,7 +258,7 @@ void m_client_tun_new(dap_events_socket_t * a_es, void * arg) (void) arg; dap_chain_net_srv_vpn_tun_socket_t * l_tun_socket = DAP_NEW_Z(dap_chain_net_srv_vpn_tun_socket_t); if ( l_tun_socket ){ - l_tun_socket->worker = a_es->worker; + l_tun_socket->worker = a_es->context->worker; l_tun_socket->worker_id = l_tun_socket->worker->id; l_tun_socket->es = a_es; //s_tun_sockets_queue_msg[a_es->worker->id] = dap_events_socket_create_type_queue_ptr_unsafe(a_es->worker, s_tun_recv_msg_callback ); @@ -466,7 +466,7 @@ int dap_chain_net_vpn_client_tun_delete(void) { if(s_tun_events_socket) { pthread_mutex_lock(&s_clients_mutex); - dap_events_socket_remove_and_delete_mt(s_tun_events_socket->worker, s_tun_events_socket->uuid); + dap_events_socket_remove_and_delete_mt(s_tun_events_socket->context->worker, s_tun_events_socket->uuid); s_tun_events_socket = NULL; pthread_mutex_unlock(&s_clients_mutex); } diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index a8a752905e..7b7d17cd76 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -151,7 +151,7 @@ int dap_chain_cs_dag_init(void) "dag event sign -net <chain net name> -chain <chain name> -event <event hash>\n" "\tAdd sign to event <event hash> in round.new. Hash doesn't include other signs so event hash\n" "\tdoesn't changes after sign add to event. \n\n" - "dag event dump -net <chain net name> -chain <chain name> -event <event hash> -from {events | events_lasts | round.new | round.<Round id in hex>} [-H {hex | base58(default)}]\n" + "dag event dump -net <chain net name> -chain <chain name> -event <event hash> -from {events | events_lasts | threshold | round.new | round.<Round id in hex>} [-H {hex | base58(default)}]\n" "\tDump event info\n\n" "dag event list -net <chain net name> -chain <chain name> -from {events | events_lasts | threshold | round.new | round.<Round id in hex>}\n\n" "\tShow event list \n\n" @@ -281,7 +281,6 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) l_dag->datum_add_hashes_count = dap_config_get_item_uint16_default(a_chain_cfg,"dag","datum_add_hashes_count",1); l_dag->use_event_round_info = false; l_dag->callback_cs_set_event_round_info = s_dag_chain_cs_set_event_round_info; - l_dag->callback_broadcast = s_dag_chain_cs_event_round_broadcast; char * l_round_new_str = dap_strdup( dap_config_get_item_str_default(a_chain_cfg,"dag","gdb_group_events_round_new", "new")); dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id); @@ -1963,7 +1962,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) if (l_cert && l_cert->enc_key->priv_key_data) { size_t l_event_size = l_round_item->event_size; dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size); - size_t l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, l_net, l_cert->enc_key); + size_t l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size, l_cert->enc_key); if ( l_event_size_new ) { dap_chain_hash_fast_t l_event_new_hash; // dap_chain_cs_dag_event_calc_hash(l_event_new, l_event_size_new, &l_event_new_hash); diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c index 0941d153cb..740587c01e 100644 --- a/modules/type/dag/dap_chain_cs_dag_event.c +++ b/modules/type/dag/dap_chain_cs_dag_event.c @@ -110,48 +110,34 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t * @param l_key * @return */ -size_t dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size, - dap_chain_net_t * a_net, dap_enc_key_t * a_key) +size_t dap_chain_cs_dag_event_sign_add(dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size, dap_enc_key_t * a_key) { assert(a_event_ptr); dap_chain_cs_dag_event_t *l_event = *a_event_ptr; + // check for re-sign with same key + if (dap_chain_cs_dag_event_sign_exists(l_event, a_event_size, a_key)) { + size_t l_pub_key_size = 0; + uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_size); + dap_hash_fast_t l_pkey_hash = {}; + dap_hash_fast(l_pub_key, l_pub_key_size, &l_pkey_hash); + DAP_DEL_Z(l_pub_key); + char l_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE]; + dap_hash_fast_to_str(&l_pkey_hash, l_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE); + log_it(L_DEBUG, "Sign from this key exists: %s", l_hash_str); + return 0; + } size_t l_hashes_size = l_event->header.hash_count*sizeof(dap_chain_hash_fast_t); - dap_chain_datum_t * l_datum = (dap_chain_datum_t*)(l_event->hashes_n_datum_n_signs + l_hashes_size); + dap_chain_datum_t *l_datum = (dap_chain_datum_t *)(l_event->hashes_n_datum_n_signs + l_hashes_size); size_t l_datum_size = dap_chain_datum_size(l_datum); - size_t l_event_size_excl_sign = sizeof(l_event->header)+l_hashes_size+l_datum_size; - size_t l_event_size = a_event_size; - dap_sign_t * l_sign = dap_sign_create(a_key,l_event,l_event_size_excl_sign,0); + size_t l_event_size_excl_sign = sizeof(l_event->header) + l_hashes_size + l_datum_size; + dap_sign_t *l_sign = dap_sign_create(a_key, l_event, l_event_size_excl_sign, 0); size_t l_sign_size = dap_sign_get_size(l_sign); - dap_chain_addr_t l_addr = {0}; - dap_chain_hash_fast_t l_pkey_hash; - dap_sign_get_pkey_hash(l_sign, &l_pkey_hash); - dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, a_net->pub.id); - - size_t l_offset = l_hashes_size+l_datum_size; - // checking re-sign from one address and calc signs size - while ( l_offset+sizeof(l_event->header) < l_event_size ) { - dap_sign_t * l_item_sign = (dap_sign_t *)(l_event->hashes_n_datum_n_signs +l_offset); - size_t l_sign_item_size = dap_sign_get_size(l_item_sign); - dap_chain_addr_t l_item_addr = {0}; - dap_chain_hash_fast_t l_item_pkey_hash; - dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash); - dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id); - // checking re-sign from one address - if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) { - char * l_addr_str = dap_chain_addr_to_str(&l_addr); - log_it(L_DEBUG, "Sign from this addr exists: %s", l_addr_str); - DAP_DELETE(l_sign); - DAP_DELETE(l_addr_str); - return 0; - } - l_offset += l_sign_item_size; - } - - *a_event_ptr = l_event = DAP_REALLOC(l_event, l_event_size+l_sign_size); - memcpy(l_event->hashes_n_datum_n_signs+l_offset, l_sign, l_sign_size); + *a_event_ptr = l_event = DAP_REALLOC(l_event, a_event_size + l_sign_size); + size_t l_event_size = a_event_size - sizeof(l_event->header); + memcpy(l_event->hashes_n_datum_n_signs + l_event_size, l_sign, l_sign_size); l_event->header.signs_count++; DAP_DELETE(l_sign); - return l_event_size+l_sign_size; + return a_event_size + l_sign_size; } static bool s_sign_exists(uint8_t *a_pos, size_t a_len, dap_enc_key_t *a_key) @@ -165,12 +151,13 @@ static bool s_sign_exists(uint8_t *a_pos, size_t a_len, dap_enc_key_t *a_key) size_t l_sign_key_size = 0; uint8_t *l_sign_key = dap_sign_get_pkey(l_item_sign, &l_sign_key_size); if (l_pub_key_size == l_sign_key_size && - !memcmp(&l_pub_key, &l_sign_key, l_pub_key_size)) { + !memcmp(l_pub_key, l_sign_key, l_pub_key_size)) { DAP_DELETE(l_pub_key); return true; } l_offset += l_sign_item_size; } + assert(l_offset == a_pos + a_len); DAP_DELETE(l_pub_key); return false; } @@ -187,7 +174,7 @@ bool dap_chain_cs_dag_event_sign_exists(dap_chain_cs_dag_event_t *a_event, size_ bool dap_chain_cs_dag_event_round_sign_exists(dap_chain_cs_dag_event_round_item_t *a_round_item, dap_enc_key_t *a_key) { uint8_t *l_offset = a_round_item->event_n_signs + (size_t)a_round_item->event_size; - size_t l_signs_size = (size_t)a_round_item->data_size - (size_t)a_round_item->event_size - sizeof(dap_chain_cs_dag_event_round_item_t); + size_t l_signs_size = (size_t)a_round_item->data_size - (size_t)a_round_item->event_size; return s_sign_exists(l_offset, l_signs_size, a_key); } @@ -221,42 +208,26 @@ dap_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event return NULL; } -size_t dap_chain_cs_dag_event_round_sign_add(dap_chain_cs_dag_event_round_item_t **a_round_item_ptr, size_t a_round_item_size, - dap_chain_net_t * a_net, dap_enc_key_t * a_key) { +size_t dap_chain_cs_dag_event_round_sign_add(dap_chain_cs_dag_event_round_item_t **a_round_item_ptr, size_t a_round_item_size, dap_enc_key_t *a_key) +{ dap_chain_cs_dag_event_round_item_t *l_round_item = *a_round_item_ptr; + if (dap_chain_cs_dag_event_round_sign_exists(l_round_item, a_key)) + return 0; dap_sign_t * l_sign = dap_sign_create(a_key, &l_round_item->round_info.datum_hash, sizeof(dap_chain_hash_fast_t), 0); size_t l_sign_size = dap_sign_get_size(l_sign); - dap_chain_addr_t l_addr = {0}; - dap_chain_hash_fast_t l_pkey_hash; - dap_sign_get_pkey_hash(l_sign, &l_pkey_hash); - dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, a_net->pub.id); - - size_t l_offset = (size_t)l_round_item->event_size; - while ( l_offset < (size_t)l_round_item->data_size ) { - dap_sign_t * l_item_sign = (dap_sign_t *)(l_round_item->event_n_signs+l_offset); - size_t l_sign_item_size = dap_sign_get_size(l_item_sign); - dap_chain_addr_t l_item_addr = {0}; - dap_chain_hash_fast_t l_item_pkey_hash; - dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash); - dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id); - if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) { - DAP_DELETE(l_sign); - return 0; - } - l_offset += l_sign_item_size; - } - *a_round_item_ptr = l_round_item = DAP_REALLOC(l_round_item, a_round_item_size+l_sign_size); - memcpy(l_round_item->event_n_signs+l_offset, l_sign, l_sign_size); - DAP_DELETE(l_sign); - l_round_item->data_size += (uint32_t)l_sign_size; - return a_round_item_size+l_sign_size; + size_t l_offset = (size_t)l_round_item->data_size; + *a_round_item_ptr = l_round_item = DAP_REALLOC(l_round_item, a_round_item_size+l_sign_size); + memcpy(l_round_item->event_n_signs+l_offset, l_sign, l_sign_size); + DAP_DELETE(l_sign); + l_round_item->data_size += (uint32_t)l_sign_size; + return a_round_item_size+l_sign_size; } + static bool s_event_broadcast_send(dap_chain_cs_dag_event_round_broadcast_t *l_arg) { dap_chain_net_t *l_net = dap_chain_net_by_id(l_arg->dag->chain->net_id); - if (dap_chain_net_get_state(l_net) == NET_STATE_ONLINE) { + if (dap_chain_net_get_state(l_net) != NET_STATE_SYNC_GDB) dap_chain_net_sync_gdb_broadcast((void *)l_net, l_arg->op_code, l_arg->group, l_arg->key, l_arg->value, l_arg->value_size); - } else if ( l_arg->attempts < 10 ) { l_arg->attempts++; return true; @@ -314,7 +285,9 @@ bool dap_chain_cs_dag_event_gdb_set(dap_chain_cs_dag_t *a_dag, char *a_event_has dap_chain_cs_dag_event_round_item_get_size(l_round_item), a_group); - a_dag->callback_broadcast(a_dag, l_round_item, a_event_hash_str); + /*size_t l_round_item_size = dap_chain_cs_dag_event_round_item_get_size(a_round_item); + dap_chain_cs_dag_event_broadcast(a_dag, DAP_DB$K_OPTYPE_ADD, a_dag->gdb_group_events_round_new, + a_key, a_round_item, l_round_item_size);*/ DAP_DELETE(l_round_item); return ret; } diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h index d96bb74b1f..9431e95de1 100644 --- a/modules/type/dag/include/dap_chain_cs_dag.h +++ b/modules/type/dag/include/dap_chain_cs_dag.h @@ -29,8 +29,6 @@ typedef struct dap_chain_cs_dag dap_chain_cs_dag_t; typedef void (*dap_chain_cs_dag_callback_t)(dap_chain_cs_dag_t *); -typedef void (*dap_chain_cs_dag_callback_broadcast_t)(dap_chain_cs_dag_t *, - dap_chain_cs_dag_event_round_item_t *, const char *a_key); typedef int (*dap_chain_cs_dag_callback_event_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_t *,size_t); typedef dap_chain_cs_dag_event_t * (*dap_chain_cs_dag_callback_event_create_t)(dap_chain_cs_dag_t *, @@ -68,7 +66,6 @@ typedef struct dap_chain_cs_dag char *gdb_group_datums_queue; dap_chain_cs_dag_callback_t callback_delete; - dap_chain_cs_dag_callback_broadcast_t callback_broadcast; dap_chain_cs_dag_callback_event_create_t callback_cs_event_create; dap_chain_cs_dag_callback_event_t callback_cs_verify; dap_chain_cs_dag_callback_get_round_info_t callback_cs_get_round_info; diff --git a/modules/type/dag/include/dap_chain_cs_dag_event.h b/modules/type/dag/include/dap_chain_cs_dag_event.h index 35ab3b6839..614aa50658 100644 --- a/modules/type/dag/include/dap_chain_cs_dag_event.h +++ b/modules/type/dag/include/dap_chain_cs_dag_event.h @@ -95,10 +95,9 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t // dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t * a_event, size_t a_event_size, // size_t * a_event_size_new, // dap_chain_net_t * a_net, dap_enc_key_t * a_key); -size_t dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size, - dap_chain_net_t * a_net, dap_enc_key_t * a_key); +size_t dap_chain_cs_dag_event_sign_add(dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size, dap_enc_key_t * a_key); size_t dap_chain_cs_dag_event_round_sign_add(dap_chain_cs_dag_event_round_item_t **a_round_item_ptr, size_t a_round_item_size, - dap_chain_net_t * a_net, dap_enc_key_t * a_key); + dap_enc_key_t *a_key); bool dap_chain_cs_dag_event_sign_exists(dap_chain_cs_dag_event_t *a_event, size_t a_event_size, dap_enc_key_t * a_key); bool dap_chain_cs_dag_event_round_sign_exists(dap_chain_cs_dag_event_round_item_t *a_round_item, dap_enc_key_t * a_key); dap_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event, size_t a_event_size, uint16_t a_sign_number); diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c index c8395ff5df..f7eee789bb 100644 --- a/modules/wallet/dap_chain_wallet.c +++ b/modules/wallet/dap_chain_wallet.c @@ -409,9 +409,7 @@ dap_chain_wallet_t * dap_chain_wallet_open(const char * a_wallet_name, const cha { if(!a_wallet_name || !a_wallets_path) return NULL; - size_t l_file_name_size = strlen(a_wallet_name)+strlen(a_wallets_path)+13; - char *l_file_name = DAP_NEW_Z_SIZE (char, l_file_name_size); - dap_snprintf(l_file_name, l_file_name_size, "%s/%s.dwallet", a_wallets_path, a_wallet_name); + char *l_file_name = dap_strdup_printf("%s/%s.dwallet", a_wallets_path, a_wallet_name); dap_chain_wallet_t * l_wallet = dap_chain_wallet_open_file(l_file_name); DAP_DELETE(l_file_name); return l_wallet; -- GitLab