diff --git a/CMakeLists.txt b/CMakeLists.txt index 61a81f20584496b93acb229992865dedb54180b3..ffdd0d382392a60f3576763f64459b0fd9449488 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,6 @@ add_subdirectory(dap-sdk) add_subdirectory(3rdparty/monero_crypto) add_subdirectory(3rdparty/cuttdb) add_subdirectory(modules/) -add_subdirectory(modules_dynamic) add_library(${PROJECT_NAME} STATIC cellframe-sdk.c) diff --git a/dap-sdk/net/server-udp/dap_udp_server.c b/dap-sdk/net/server-udp/dap_udp_server.c index 280a6746f4d55a180dd4104bbfda4d79415e23a8..12c1c82120c35e0cb5981dc38c1eca371a45f555 100644 --- a/dap-sdk/net/server-udp/dap_udp_server.c +++ b/dap-sdk/net/server-udp/dap_udp_server.c @@ -345,8 +345,8 @@ void dap_udp_server_loop( dap_server_t *d_server ) sb_payload_ready = false; - struct epoll_event pev; - struct epoll_event events[ 16 ]; + struct epoll_event pev = {0, {0}}; + struct epoll_event events[ 16 ] = {{0, {0}}}; pev.events = EPOLLIN | EPOLLERR; pev.data.fd = d_server->socket_listener; diff --git a/dap-sdk/net/stream/ch/dap_stream_ch.c b/dap-sdk/net/stream/ch/dap_stream_ch.c index 6ce73a49d4b1c22712b4c572e66f7717d08d0c66..af9137dd4f713d6a5b9fcbd9484994d2979dff3e 100644 --- a/dap-sdk/net/stream/ch/dap_stream_ch.c +++ b/dap-sdk/net/stream/ch/dap_stream_ch.c @@ -103,6 +103,7 @@ dap_stream_ch_t* dap_stream_ch_new(dap_stream_t* a_stream, uint8_t id) pthread_rwlock_unlock(&a_stream->rwlock); struct dap_stream_ch_table_t *l_new_ch = DAP_NEW_Z(struct dap_stream_ch_table_t); + l_new_ch->ch = ret; pthread_mutex_lock(&s_ch_table_lock); HASH_ADD_PTR(s_ch_table, ch, l_new_ch); pthread_mutex_unlock(&s_ch_table_lock); @@ -120,7 +121,7 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch) if(!a_ch) return false; pthread_mutex_lock(&s_ch_table_lock); - HASH_FIND_PTR(s_ch_table, a_ch, l_ret); + HASH_FIND_PTR(s_ch_table, &a_ch, l_ret); pthread_mutex_unlock(&s_ch_table_lock); return l_ret; } @@ -132,8 +133,8 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch) void dap_stream_ch_delete(dap_stream_ch_t *a_ch) { pthread_mutex_lock(&s_ch_table_lock); - struct dap_stream_ch_table_t *l_ret;; - HASH_FIND_PTR(s_ch_table, a_ch, l_ret); + struct dap_stream_ch_table_t *l_ret; + HASH_FIND_PTR(s_ch_table, &a_ch, l_ret); HASH_DEL(s_ch_table, l_ret); pthread_mutex_unlock(&s_ch_table_lock); diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 49f99545f1a23285076ede10e04aa18cf5b63243..6d1abf4cf3a5c10ff884a89ed9cc27c5d21277ac 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -86,6 +86,11 @@ if (CELLFRAME_MODULES MATCHES "srv-stake") add_subdirectory(service/stake) endif() +# Support for dynamic modules +if (CELLFRAME_MODULES MATCHES "modules-dynamic") + add_subdirectory(modules_dynamic) +endif() + # Unit tests if( BUILD_TESTS) add_subdirectory(test) diff --git a/modules_dynamic/CMakeLists.txt b/modules/modules_dynamic/CMakeLists.txt similarity index 100% rename from modules_dynamic/CMakeLists.txt rename to modules/modules_dynamic/CMakeLists.txt diff --git a/modules_dynamic/cdb/CMakeLists.txt b/modules/modules_dynamic/cdb/CMakeLists.txt similarity index 100% rename from modules_dynamic/cdb/CMakeLists.txt rename to modules/modules_dynamic/cdb/CMakeLists.txt diff --git a/modules_dynamic/cdb/dap_modules_dynamic_cdb.c b/modules/modules_dynamic/cdb/dap_modules_dynamic_cdb.c similarity index 100% rename from modules_dynamic/cdb/dap_modules_dynamic_cdb.c rename to modules/modules_dynamic/cdb/dap_modules_dynamic_cdb.c diff --git a/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h b/modules/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h similarity index 100% rename from modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h rename to modules/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index 3ecd46abc29c7c3e132f1f95be4751f774164818..8ce67e110d60662c97414ff023879980889f7c8a 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -308,7 +308,10 @@ static void* thread_one_client_func(void *args) list = dap_list_next(list); DAP_DELETE(str_cmd_prev); } - log_it(L_INFO, "execute command=%s", str_cmd); + if(l_cmd->overrides.log_cmd_call) + l_cmd->overrides.log_cmd_call(str_cmd); + else + log_it(L_INFO, "execute command=%s", str_cmd); // exec command char **l_argv = dap_strsplit(str_cmd, ";", -1); @@ -733,6 +736,12 @@ void dap_chain_node_cli_cmd_item_create(const char * a_name, cmdfunc_t *a_func, log_it(L_DEBUG,"Added command %s",l_cmd_item->name); } +void dap_chain_node_cli_cmd_item_apply_overrides(const char * a_name, const dap_chain_node_cmd_item_func_overrides_t * a_overrides){ + dap_chain_node_cmd_item_t *l_cmd_item = dap_chain_node_cli_cmd_find(a_name); + if(l_cmd_item) + l_cmd_item->overrides = *a_overrides; +} + /** * @brief dap_chain_node_cli_command_get_first * @return diff --git a/modules/net/include/dap_chain_node_cli.h b/modules/net/include/dap_chain_node_cli.h index e9df748e7ebb56c7c81a2436e018ef33c4c14a18..e9f9e81285841034f5426920590532760acabcd3 100644 --- a/modules/net/include/dap_chain_node_cli.h +++ b/modules/net/include/dap_chain_node_cli.h @@ -40,12 +40,20 @@ typedef int SOCKET; typedef int cmdfunc_t(int argc, char ** argv, void *arg_func, char **str_reply); +typedef void cmd_item_func_override_log_cmd_call(const char*); + +typedef struct dap_chain_node_cmd_item_func_overrides{ + /* use it if you want to prevent logging of some sensetive data */ + cmd_item_func_override_log_cmd_call * log_cmd_call; +} dap_chain_node_cmd_item_func_overrides_t; + typedef struct dap_chain_node_cmd_item{ char name[32]; /* User printable name of the function. */ cmdfunc_t *func; /* Function to call to do the job. */ void *arg_func; /* additional argument of function*/ char *doc; /* Documentation for this function. */ char *doc_ex; /* Full documentation for this function. */ + dap_chain_node_cmd_item_func_overrides_t overrides; /* Used to change default behaviour */ UT_hash_handle hh; } dap_chain_node_cmd_item_t; @@ -60,6 +68,7 @@ long s_recv(SOCKET sock, unsigned char *buf, size_t bufsize, int timeout); dap_chain_node_cmd_item_t* dap_chain_node_cli_cmd_get_first(); dap_chain_node_cmd_item_t* dap_chain_node_cli_cmd_find(const char *a_name); void dap_chain_node_cli_cmd_item_create(const char * a_name, cmdfunc_t *a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex); +void dap_chain_node_cli_cmd_item_apply_overrides(const char * a_name, const dap_chain_node_cmd_item_func_overrides_t * a_overrides); void dap_chain_node_cli_set_reply_text(char **str_reply, const char *str, ...); diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index 10db028050013b28ac642d57ce77e109cad90cdd..2f92c769503adf7510ff220ecc9f3a3a57b4a47e 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -1139,7 +1139,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -1170,7 +1170,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) pthread_mutex_lock(&s_sf_socks_mutex); HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}};; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -1244,7 +1244,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) pthread_mutex_unlock(&s_sf_socks_mutex); pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex)); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = s; ev.events = EPOLLIN | EPOLLERR; @@ -1380,7 +1380,7 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) */ void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock) { - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN | EPOLLERR; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) == -1) { @@ -1409,7 +1409,7 @@ void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock) void * srv_ch_sf_thread(void * a_arg) { UNUSED(a_arg); - struct epoll_event ev, events[SF_MAX_EVENTS] = { 0 }; + struct epoll_event ev = {0, {0}}, events[SF_MAX_EVENTS] = { {0, {0}} }; //pthread_mutex_lock(&sf_socks_mutex); sf_socks_epoll_fd = epoll_create(SF_MAX_EVENTS); sigset_t sf_sigmask; diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 9109e9320c28d6a7b677901982c23649be93ca4c..ef7b2d77df63ed27bc32567ec122c3f7730ca794 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -492,7 +492,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -525,7 +525,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -612,7 +612,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex)); pthread_mutex_unlock(&sf_socks_mutex); - struct epoll_event ev; + struct epoll_event ev = { 0, {0} }; ev.data.fd = s; ev.events = EPOLLIN | EPOLLERR;