From 5ec46205bc56bae47a2796ce52d9833186f5d2bb Mon Sep 17 00:00:00 2001 From: Alexandr Lysikov <alexander.lysikov@demlabs.net> Date: Thu, 5 Nov 2020 20:21:16 +0500 Subject: [PATCH] added command 'order recheck' --- modules/net/srv/dap_chain_net_srv.c | 63 ++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 1877ab2f38..899bce75ba 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -110,6 +110,9 @@ int dap_chain_net_srv_init(dap_config_t * a_cfg) "\tOrder create\n" "net_srv -net <chain net name> order static [save | delete]\\\n" "\tStatic nodelist create/delete\n" + "net_srv -net <chain net name> order recheck\\\n" + "\tCheck the availability of orders\n" + ); s_load_all(); @@ -175,6 +178,29 @@ void dap_chain_net_srv_deinit(void) dap_chain_net_srv_del_all(); } + +static void* get_cdb_func(const char *func_name) +{ + void *l_ref_func = NULL; + // find func from dynamic library +#if defined (DAP_OS_LINUX) && !defined (__ANDROID__) + const char * s_default_path_modules = "var/modules"; + const char * l_cdb_so_name = "libcellframe-node-cdb.so"; + char *l_lib_path = dap_strdup_printf("%s/%s/%s", g_sys_dir_path, s_default_path_modules, l_cdb_so_name); + void* l_cdb_handle = NULL; + l_cdb_handle = dlopen(l_lib_path, RTLD_NOW); + DAP_DELETE(l_lib_path); + if(!l_cdb_handle) { + log_it(L_ERROR, "Can't load %s module: %s", l_cdb_so_name, dlerror()); + } + else { + l_ref_func = dlsym(l_cdb_handle, func_name); + dlclose(l_cdb_handle); + } +#endif + return l_ref_func; +} + /** * @brief s_cli_net_srv * @param argc @@ -526,6 +552,14 @@ static int s_cli_net_srv( int argc, char **argv, void *arg_func, char **a_str_re dap_string_append_printf( l_string_ret, "Missed some required params\n"); ret=-5; } + }else if( dap_strcmp( l_order_str, "recheck" ) == 0 ){ + //int dap_chain_net_srv_vpn_cdb_server_list_check_orders(dap_chain_net_t *a_net); + int (*dap_chain_net_srv_vpn_cdb_server_list_check_orders)(dap_chain_net_t *a_net) = NULL; + *(void **) (&dap_chain_net_srv_vpn_cdb_server_list_check_orders) = get_cdb_func("dap_chain_net_srv_vpn_cdb_server_list_check_orders"); + int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_check_orders ? (*dap_chain_net_srv_vpn_cdb_server_list_check_orders)(l_net) : -5; + //int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_check_orders(l_net); + ret = -10; + }else if( dap_strcmp( l_order_str, "static" ) == 0 ){ // find the subcommand directly after the 'order' command int l_subcmd_save = dap_chain_node_cli_find_option_val(argv, l_order_arg_pos + 1, l_order_arg_pos + 2, "save", NULL); @@ -536,44 +570,37 @@ static int s_cli_net_srv( int argc, char **argv, void *arg_func, char **a_str_re int (*dap_chain_net_srv_vpn_cdb_server_list_static_delete)(dap_chain_net_t *a_net) = NULL; // find func from dinamic library if(l_subcmd_save || l_subcmd_del) { -#if defined (DAP_OS_LINUX) && !defined (__ANDROID__) - const char * s_default_path_modules = "var/modules"; - const char * l_cdb_so_name = "libcellframe-node-cdb.so"; - char *l_lib_path = dap_strdup_printf("%s/%s/%s", g_sys_dir_path, s_default_path_modules, l_cdb_so_name); - void* l_cdb_handle = NULL; - l_cdb_handle = dlopen(l_lib_path, RTLD_NOW); - DAP_DELETE(l_lib_path); - if(!l_cdb_handle) { - log_it(L_ERROR, "Can't load %s module: %s", l_cdb_so_name, dlerror()); - } - else { - *(void **) (&dap_chain_net_srv_vpn_cdb_server_list_static_create) = dlsym(l_cdb_handle, "dap_chain_net_srv_vpn_cdb_server_list_static_create"); - *(void **) (&dap_chain_net_srv_vpn_cdb_server_list_static_delete) = dlsym(l_cdb_handle, "dap_chain_net_srv_vpn_cdb_server_list_static_delete"); - } -#endif + *(void **) (&dap_chain_net_srv_vpn_cdb_server_list_static_create) = get_cdb_func("dap_chain_net_srv_vpn_cdb_server_list_static_create"); + *(void **) (&dap_chain_net_srv_vpn_cdb_server_list_static_delete) = get_cdb_func("dap_chain_net_srv_vpn_cdb_server_list_static_delete"); } if(l_subcmd_save) { int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_static_create ? (*dap_chain_net_srv_vpn_cdb_server_list_static_create)(l_net) : -5; //int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_static_create(l_net); - if(l_init_res >= 0) + if(l_init_res >= 0){ dap_string_append_printf(l_string_ret, "Static node list saved, %d orders in list\n", l_init_res); - else + ret = 0; + } + else{ dap_string_append_printf(l_string_ret, "Static node list not saved, error code %d\n", l_init_res); + ret = -11; + } } else if(l_subcmd_del) { int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_static_delete ? (*dap_chain_net_srv_vpn_cdb_server_list_static_delete)(l_net) : -5; //int l_init_res = dap_chain_net_srv_vpn_cdb_server_list_static_delete(l_net); if(!l_init_res){ dap_string_append_printf(l_string_ret, "Static node list deleted\n"); + ret = 0; } else if(l_init_res > 0){ dap_string_append_printf(l_string_ret, "Static node list already deleted\n"); + ret = -12; } else dap_string_append_printf(l_string_ret, "Static node list not deleted, error code %d\n", l_init_res); } else { dap_string_append(l_string_ret, "not found subcommand 'save' or 'delete'\n"); - ret = -10; + ret = -13; } } else { dap_string_append_printf(l_string_ret, "Unknown subcommand '%s'\n", l_order_str); -- GitLab