diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 99fa9dcea378c90274ca53bcb6be7c0a43588332..b85d3a78e2a0af528ccbc3e5bf47bb15ed2ddd9e 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -101,7 +101,13 @@ int dap_chain_net_srv_init(dap_config_t * a_cfg) " -price_unit <Price Unit> -price_token <Token ticker> [-node_addr <Node Address>] [-tx_cond <TX Cond Hash>] \\\n" " [-expires <Unix time when expires>] [-ext <Extension with params>]\\\n" " [-cert <cert name to sign order>]\\\n" - "\tOrder create\n" ); + "\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(); return 0; @@ -167,6 +173,28 @@ void dap_chain_net_srv_deinit(void) } +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 @@ -518,6 +546,56 @@ 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); + int l_subcmd_del = dap_chain_node_cli_find_option_val(argv, l_order_arg_pos + 1, l_order_arg_pos + 2, "delete", NULL) | + dap_chain_node_cli_find_option_val(argv, l_order_arg_pos + 1, l_order_arg_pos + 2, "del", NULL); + + int (*dap_chain_net_srv_vpn_cdb_server_list_static_create)(dap_chain_net_t *a_net) = NULL; + 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) { + *(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){ + dap_string_append_printf(l_string_ret, "Static node list saved, %d orders in list\n", l_init_res); + 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 = -13; + } } else { dap_string_append_printf( l_string_ret, "Unknown subcommand \n"); ret=-3;