diff --git a/CMakeLists.txt b/CMakeLists.txt index 04e29ccfcbef2298790435117ec447ffa675de0b..4d2044726a9470a1b38f9e97e305c4adda8ccccb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 3.10) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "3.0-11") +set(CELLFRAME_SDK_NATIVE_VERSION "3.0-12") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 85bcc06fe19016aafcf0adff7d61d053a83d17e8..7cefb1817f6a59ee6f27de6bd08371aacfe20e06 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -113,6 +113,9 @@ static void s_gdb_in_pkt_error_worker_callback(dap_worker_t *a_thread, void *a_a static bool s_debug_more=false; static uint_fast16_t s_update_pack_size=100; // Number of hashes packed into the one packet static uint_fast16_t s_skip_in_reactor_count=50; // Number of hashes packed to skip in one reactor loop callback out packet +static uint16_t s_size_ban_groups = 0; +static char **s_list_ban_groups = NULL; + /** * @brief dap_stream_ch_chain_init * @return @@ -124,6 +127,7 @@ int dap_stream_ch_chain_init() s_stream_ch_packet_out); s_debug_more = dap_config_get_item_bool_default(g_config,"stream_ch_chain","debug_more",false); s_update_pack_size = dap_config_get_item_int16_default(g_config,"stream_ch_chain","update_pack_size",100); + s_list_ban_groups = dap_config_get_array_str(g_config, "general", "ban_list_sync_groups", &s_size_ban_groups); return 0; } @@ -652,6 +656,16 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg) for (size_t i = 0; i < l_data_obj_count; i++) { // obj to add dap_store_obj_t *l_obj = l_store_obj + i; + if (s_list_ban_groups) { + int l_ret = 0; + for (int i = 0; i < s_size_ban_groups; i++) { + if (!dap_fnmatch(s_list_ban_groups[i], l_obj->group, FNM_NOESCAPE)) { + l_ret = -1; + break; + } + } + if (l_ret == -1) continue; + } 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 && diff --git a/modules/global-db/dap_chain_global_db_hist.c b/modules/global-db/dap_chain_global_db_hist.c index 6ff0e7871008a90a8d6f1ad15fdfb613056dc9e8..21da7d53215ed4c89e3dbe67b0ca3399eff9e3e1 100644 --- a/modules/global-db/dap_chain_global_db_hist.c +++ b/modules/global-db/dap_chain_global_db_hist.c @@ -28,6 +28,9 @@ typedef struct dap_tx_data{ #define LOG_TAG "dap_chain_global_db_hist" +static uint16_t s_size_ban_list = 0; +static char **s_ban_list = NULL; + /** * @brief Packs members of a_rec structure into a single string. * @@ -273,6 +276,31 @@ dap_db_log_list_t* dap_db_log_list_start(dap_chain_node_addr_t a_addr, int a_fla } dap_list_free(l_groups_masks); + static int l_try_read_ban_list = 0; + + if (!l_try_read_ban_list) { + s_ban_list = dap_config_get_array_str(g_config, "general", "ban_list_sync_groups", &s_size_ban_list); + l_try_read_ban_list = 1; + } + + /* delete groups from ban list */ + if (s_size_ban_list > 0) { + for (dap_list_t *l_groups = l_dap_db_log_list->groups; l_groups; ) { + int found = 0; + for (int i = 0; i < s_size_ban_list; i++) { + if (dap_fnmatch(s_ban_list[i], l_groups->data, FNM_NOESCAPE)) { + dap_list_t *l_tmp = l_groups->next; + dap_list_delete_link(l_dap_db_log_list->groups, l_groups); + l_groups = l_tmp; + found = 1; + break; + } + } + if (found) continue; + l_groups = dap_list_next(l_groups); + } + } + for (dap_list_t *l_groups = l_dap_db_log_list->groups; l_groups; l_groups = dap_list_next(l_groups)) { dap_db_log_list_group_t *l_replace = DAP_NEW_Z(dap_db_log_list_group_t); l_replace->name = (char *)l_groups->data;