From de835bb824e5304ab8c96099dd1e7c95f7249ae9 Mon Sep 17 00:00:00 2001 From: Aleksandr Lysikov <lysikov@inbox.ru> Date: Tue, 14 May 2019 16:26:34 +0500 Subject: [PATCH] prepere to "master->feature2272" --- dap_chain_node_cli_cmd.c | 278 +++++++++++++++++++-------------------- 1 file changed, 139 insertions(+), 139 deletions(-) diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 803f13e..4c913f5 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -75,7 +75,7 @@ dap_chain_node_addr_t* dap_chain_node_addr_get_by_alias(const char *a_alias) return NULL; const char *a_key = a_alias; size_t l_addr_size = 0; - l_addr = (dap_chain_node_addr_t*) (void*) dap_chain_global_db_gr_get(a_key, &l_addr_size, GROUP_ALIAS); + l_addr = (dap_chain_node_addr_t*) (void*) dap_chain_global_db_gr_get(a_key, &l_addr_size, GROUP_GLOBAL_ALIAS); if(l_addr_size != sizeof(dap_chain_node_addr_t)) { // l_addr = DAP_NEW_Z(dap_chain_node_addr_t); // if(hex2bin((char*) l_addr, (const unsigned char *) addr_str, sizeof(dap_chain_node_addr_t) * 2) == -1) { @@ -99,7 +99,7 @@ static dap_list_t* get_aliases_by_name(dap_chain_node_addr_t *a_addr) dap_list_t *list_aliases = NULL; size_t data_size = 0; // read all aliases - dap_global_db_obj_t **objs = dap_chain_global_db_gr_load(GROUP_ALIAS, &data_size); + dap_global_db_obj_t **objs = dap_chain_global_db_gr_load(GROUP_GLOBAL_ALIAS, &data_size); if(!objs || !data_size) return NULL; for(size_t i = 0; i < data_size; i++) { @@ -140,18 +140,13 @@ static dap_chain_node_addr_t* com_global_db_get_addr(dap_chain_node_info_t *node return address; } -char* com_global_db_get_key_for_addr(dap_chain_node_addr_t *address) -{ - char *a_key = dap_chain_global_db_hash((const uint8_t*) address, sizeof(dap_chain_node_addr_t)); - return a_key; -} /** * Read node from base */ -static dap_chain_node_info_t* dap_chain_node_info_read(dap_chain_node_addr_t *address, char **str_reply) +static dap_chain_node_info_t* dap_chain_node_info_read_and_reply(dap_chain_node_addr_t *address, char **str_reply) { - char *l_key = com_global_db_get_key_for_addr(address); + char *l_key = dap_chain_node_addr_to_hash_str(address); if(!l_key) { dap_chain_node_cli_set_reply_text(str_reply, "can't calculate hash of addr"); @@ -160,7 +155,7 @@ static dap_chain_node_info_t* dap_chain_node_info_read(dap_chain_node_addr_t *ad size_t node_info_size = 0; dap_chain_node_info_t *node_info; // read node - node_info = (dap_chain_node_info_t *) dap_chain_global_db_gr_get(l_key, &node_info_size, GROUP_NODE); + node_info = (dap_chain_node_info_t *) dap_chain_global_db_gr_get(l_key, &node_info_size, GROUP_GLOBAL_ADDRS_LEASED); if(!node_info) { dap_chain_node_cli_set_reply_text(str_reply, "node not found in base"); @@ -188,13 +183,13 @@ static dap_chain_node_info_t* dap_chain_node_info_read(dap_chain_node_addr_t *ad /** * Save node to base */ -static bool dap_chain_node_info_save(dap_chain_node_info_t *node_info, char **str_reply) +static bool dap_chain_node_info_save_and_reply(dap_chain_node_info_t *node_info, char **str_reply) { if(!node_info || !node_info->hdr.address.uint64) { dap_chain_node_cli_set_reply_text(str_reply, "node addr not found"); return false; } - char *a_key = com_global_db_get_key_for_addr(&node_info->hdr.address); + char *a_key = dap_chain_node_addr_to_hash_str(&node_info->hdr.address); if(!a_key) { dap_chain_node_cli_set_reply_text(str_reply, "can't calculate hash for addr"); @@ -202,22 +197,26 @@ static bool dap_chain_node_info_save(dap_chain_node_info_t *node_info, char **st } //char *a_value = dap_chain_node_info_serialize(node_info, NULL); size_t node_info_size = dap_chain_node_info_get_size(node_info); - bool res = dap_chain_global_db_gr_set(a_key, (const uint8_t *) node_info, node_info_size, GROUP_NODE); + bool res = dap_chain_global_db_gr_set(a_key, (const uint8_t *) node_info, node_info_size, GROUP_GLOBAL_ADDRS_LEASED); DAP_DELETE(a_key); //DAP_DELETE(a_value); return res; } + + + + /** * Handler of command 'global_db node add' * * str_reply[out] for reply * return 0 Ok, -1 error */ -static int com_global_db_add(dap_chain_node_info_t *node_info, const char *alias_str, +static int com_global_db_add(dap_chain_node_info_t *a_node_info, const char *alias_str, const char *cell_str, const char *ipv4_str, const char *ipv6_str, char **str_reply) { - if(!node_info->hdr.address.uint64) { + if(!a_node_info->hdr.address.uint64) { dap_chain_node_cli_set_reply_text(str_reply, "not found -addr parameter"); return -1; } @@ -231,9 +230,9 @@ static int com_global_db_add(dap_chain_node_info_t *node_info, const char *alias } else { if(ipv4_str) - inet_pton(AF_INET, ipv4_str, &(node_info->hdr.ext_addr_v4)); + inet_pton(AF_INET, ipv4_str, &(a_node_info->hdr.ext_addr_v4)); if(ipv6_str) - inet_pton(AF_INET6, ipv6_str, &(node_info->hdr.ext_addr_v6)); + inet_pton(AF_INET6, ipv6_str, &(a_node_info->hdr.ext_addr_v6)); } // check match addr to cell or no /*dap_chain_node_addr_t *addr = dap_chain_node_gen_addr(&node_info->hdr.cell_id); @@ -243,16 +242,16 @@ static int com_global_db_add(dap_chain_node_info_t *node_info, const char *alias }*/ if(alias_str) { // add alias - if(!dap_chain_node_alias_register(alias_str, &node_info->hdr.address)) { + if(!dap_chain_node_alias_register(alias_str, &a_node_info->hdr.address)) { log_it(L_WARNING, "can't save alias %s", alias_str); dap_chain_node_cli_set_reply_text(str_reply, "alias '%s' can't be mapped to addr=0x%lld", - alias_str, node_info->hdr.address.uint64); + alias_str, a_node_info->hdr.address.uint64); return -1; } } // write to base - bool res = dap_chain_node_info_save(node_info, str_reply); + bool res = dap_chain_node_info_save_and_reply(a_node_info, str_reply); if(res) dap_chain_node_cli_set_reply_text(str_reply, "node added"); else @@ -287,11 +286,11 @@ static int com_global_db_del(dap_chain_node_info_t *node_info, const char *alias dap_chain_node_cli_set_reply_text(str_reply, "alias not found"); return -1; } - char *a_key = com_global_db_get_key_for_addr(address); + char *a_key = dap_chain_node_addr_to_hash_str(address); if(a_key) { // delete node - bool res = dap_chain_global_db_gr_del(a_key, GROUP_NODE); + bool res = dap_chain_global_db_gr_del(a_key, GROUP_GLOBAL_ADDRS_LEASED); if(res) { // delete all aliases for node address { @@ -341,7 +340,7 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, } // TODO check the presence of link in the node base if(0) { - dap_chain_node_cli_set_reply_text(str_reply, "node 0x%llx not found in base", link->uint64); + dap_chain_node_cli_set_reply_text(str_reply, "node 0x%016llx not found in base", link->uint64); return -1; } @@ -351,8 +350,11 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, dap_chain_node_cli_set_reply_text(str_reply, "alias not found"); return -1; } - dap_chain_node_info_t *node_info_read = dap_chain_node_info_read(address, str_reply); - if(!node_info_read) + + + dap_chain_node_info_t * l_node_info_read = dap_chain_node_info_read_and_reply(address, str_reply); + size_t l_node_info_read_size = dap_chain_node_info_get_size( l_node_info_read); + if(! l_node_info_read) return -1; int cmd_int = 0; @@ -363,10 +365,10 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, // find link in node_info_read int index_link = -1; - for(size_t i = 0; i < node_info_read->hdr.links_number; i++) { - if(node_info_read->links[i].uint64 == link->uint64) { + for(size_t i = 0; i < l_node_info_read->hdr.links_number; i++) { + if( l_node_info_read->links[i].uint64 == link->uint64) { // link already present - index_link = i; + index_link = (int) i; break; } } @@ -374,8 +376,9 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, // add link if(cmd_int == 1) { if(index_link == -1) { - memcpy(&(node_info_read->links[node_info_read->hdr.links_number]), link, sizeof(dap_chain_node_addr_t)); - node_info_read->hdr.links_number++; + l_node_info_read = DAP_REALLOC ( l_node_info_read,l_node_info_read_size += sizeof (*link) ); + memcpy(&( l_node_info_read->links[ l_node_info_read->hdr.links_number]), link, sizeof(dap_chain_node_addr_t)); + l_node_info_read->hdr.links_number++; res_successful = true; } } @@ -383,16 +386,17 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, else if(cmd_int == 2) { // move link list to one item prev if(index_link >= 0) { - for(unsigned int j = (unsigned int) index_link; j < (node_info_read->hdr.links_number - 1); j++) { - memcpy(&(node_info_read->links[j]), &(node_info_read->links[j + 1]), sizeof(dap_chain_node_addr_t)); + for(unsigned int j = (unsigned int) index_link; j < ( l_node_info_read->hdr.links_number - 1); j++) { + memcpy(&( l_node_info_read->links[j]), &( l_node_info_read->links[j + 1]), sizeof(dap_chain_node_addr_t)); } - node_info_read->hdr.links_number--; + l_node_info_read->hdr.links_number--; res_successful = true; + l_node_info_read = DAP_REALLOC ( l_node_info_read,l_node_info_read_size -= sizeof (*link) ); } } // save edited node_info if(res_successful) { - bool res = dap_chain_node_info_save(node_info_read, str_reply); + bool res = dap_chain_node_info_save_and_reply( l_node_info_read, str_reply); if(res) { res_successful = true; if(cmd_int == 1) @@ -420,7 +424,7 @@ static int com_global_db_link(dap_chain_node_info_t *node_info, const char *cmd, } DAP_DELETE(address); - DAP_DELETE(node_info_read); + DAP_DELETE( l_node_info_read); if(res_successful) return 0; return -1; @@ -444,7 +448,7 @@ static int com_global_db_dump(dap_chain_node_info_t *a_node_info, const char *al // read all nodes dap_chain_node_info_t *node_info; // read all node - l_objs = dap_chain_global_db_gr_load(GROUP_NODE, &l_nodes_count); + l_objs = dap_chain_global_db_gr_load(GROUP_GLOBAL_ADDRS_LEASED, &l_nodes_count); /*for(size_t i = 0; i < l_nodes_count; i++) { dap_global_db_obj_t *l_obj = l_objs[i]; dap_chain_node_info_t *node_info = (dap_chain_node_info_t *) l_obj->value; @@ -467,7 +471,7 @@ static int com_global_db_dump(dap_chain_node_info_t *a_node_info, const char *al break; } // read node - dap_chain_node_info_t *node_info_read = dap_chain_node_info_read(address, str_reply); + dap_chain_node_info_t *node_info_read = dap_chain_node_info_read_and_reply(address, str_reply); if(!node_info_read) { DAP_DELETE(address); break; @@ -501,9 +505,9 @@ static int com_global_db_dump(dap_chain_node_info_t *a_node_info, const char *al // get links in form of string dap_string_t *links_string = dap_string_new(NULL); - for(int i = 0; i < node_info_read->hdr.links_number; i++) { + for(unsigned int i = 0; i < node_info_read->hdr.links_number; i++) { dap_chain_node_addr_t link_addr = node_info_read->links[i]; - dap_string_append_printf(links_string, "\nlink%02d address : 0x%llx", i, link_addr.uint64); + dap_string_append_printf(links_string, "\nlink%02d address : 0x%016llx", i, link_addr.uint64); } if(i) @@ -511,14 +515,14 @@ static int com_global_db_dump(dap_chain_node_info_t *a_node_info, const char *al // set short reply with node param if(l_objs) dap_string_append_printf(l_string_reply, - "node address 0x%llx\tcell 0x%llx\tipv4 %s\tnumber of links %d", - node_info_read->hdr.address, node_info_read->hdr.cell_id, + "node address 0x%016llx\tcell 0x%016llx\tipv4 %s\tnumber of links %u", + node_info_read->hdr.address.uint64, node_info_read->hdr.cell_id.uint64, str_ip4, node_info_read->hdr.links_number); else // set full reply with node param dap_string_append_printf(l_string_reply, - "node address 0x%llx\ncell 0x%llx%s\nipv4 %s\nipv6 %s\nlinks %d%s", - node_info_read->hdr.address, node_info_read->hdr.cell_id, aliases_string->str, + "node address 0x%016llx\ncell 0x%016llx%s\nipv4 %s\nipv6 %s\nlinks %u%s", + node_info_read->hdr.address.uint64, node_info_read->hdr.cell_id.uint64, aliases_string->str, str_ip4, str_ip6, node_info_read->hdr.links_number, links_string->str); dap_string_free(aliases_string, true); @@ -539,12 +543,12 @@ static int com_global_db_dump(dap_chain_node_info_t *a_node_info, const char *al } /** - * Handler of command 'global_db node get' + * Handler of command 'global_db node cur_node_get' * * str_reply[out] for reply * return 0 Ok, -1 error */ -static int com_global_db_get(char **a_str_reply) +static int com_global_db_cur_node_get(char **a_str_reply) { // get cur node addr uint64_t l_addr = dap_db_get_cur_node_addr(); @@ -557,12 +561,12 @@ static int com_global_db_get(char **a_str_reply) } /** - * Handler of command 'global_db node set' + * Handler of command 'global_db node cur_node_set' * * str_reply[out] for reply * return 0 Ok, -1 error */ -static int com_global_db_set(dap_chain_node_info_t *a_node_info, const char *a_alias_str, char **a_str_reply) +static int com_global_db_cur_node_set(dap_chain_node_info_t *a_node_info, const char *a_alias_str, char **a_str_reply) { if(!a_node_info->hdr.address.uint64 && !a_alias_str) { dap_chain_node_cli_set_reply_text(a_str_reply, "addr not found"); @@ -575,17 +579,17 @@ static int com_global_db_set(dap_chain_node_info_t *a_node_info, const char *a_a return -1; } // read node - dap_chain_node_info_t *l_node_info_read = dap_chain_node_info_read(l_address, a_str_reply); + dap_chain_node_info_t *l_node_info_read = dap_chain_node_info_read_and_reply(l_address, a_str_reply); if(!l_node_info_read) { DAP_DELETE(l_address); return -1; } // set cur node addr if(dap_db_set_cur_node_addr(l_node_info_read->hdr.address.uint64)) { - dap_chain_node_cli_set_reply_text(a_str_reply, "new address for node has been set"); + dap_chain_node_cli_set_reply_text(a_str_reply, "new address for current node has been set"); return 0; } - dap_chain_node_cli_set_reply_text(a_str_reply, "new address for node has not been set"); + dap_chain_node_cli_set_reply_text(a_str_reply, "new address for current node has not been set"); return -1; } @@ -595,33 +599,31 @@ static int com_global_db_set(dap_chain_node_info_t *a_node_info, const char *a_a * str_reply[out] for reply * return 0 Ok, -1 error */ -static int com_global_db_set_remote(dap_chain_node_info_t *a_node_info, const char *a_alias_str, char **a_str_reply) +static int com_global_db_cur_node_set_from_remote(dap_chain_node_info_t *a_node_info, const char *a_alias_str, char **a_str_reply) { if(!a_node_info->hdr.address.uint64 && !a_alias_str) { dap_chain_node_cli_set_reply_text(a_str_reply, "addr not found"); + DAP_DELETE(a_node_info); return -1; } // find addr by alias or addr_str dap_chain_node_addr_t *l_address = com_global_db_get_addr(a_node_info, &a_node_info->hdr.address, a_alias_str); if(!l_address) { dap_chain_node_cli_set_reply_text(a_str_reply, "alias not found"); + DAP_DELETE(a_node_info); return -1; } // read node - dap_chain_node_info_t *l_node_info_read = dap_chain_node_info_read(l_address, a_str_reply); + dap_chain_node_info_t *l_node_info_read = dap_chain_node_info_read_and_reply(l_address, a_str_reply); if(!l_node_info_read) { DAP_DELETE(l_address); + DAP_DELETE(a_node_info); return -1; } - // get cur node addr - uint64_t l_cur_node_addr = dap_db_get_cur_node_addr(); //0x12345 - if(!l_cur_node_addr) { - dap_chain_node_cli_set_reply_text(a_str_reply, "current node has no address"); - return -1; - } - dap_chain_node_info_t *l_node_info = dap_chain_node_info_read(l_address, a_str_reply); + dap_chain_node_info_t *l_node_info = dap_chain_node_info_read_and_reply(l_address, a_str_reply); if(!l_node_info) { + DAP_DELETE(a_node_info); return -1; } // start connect @@ -633,7 +635,7 @@ static int com_global_db_set_remote(dap_chain_node_info_t *a_node_info, const ch } // wait connected int timeout_ms = 15000; //15 sec = 15000 ms - int res = chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); + int res = dap_chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); if(res != 1) { dap_chain_node_cli_set_reply_text(a_str_reply, "no response from node"); // clean client struct @@ -655,7 +657,7 @@ static int com_global_db_set_remote(dap_chain_node_info_t *a_node_info, const ch // wait for finishing of request timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms - res = chain_node_client_wait(client, NODE_CLIENT_STATE_GET_NODE_ADDR, timeout_ms); + res = dap_chain_node_client_wait(client, NODE_CLIENT_STATE_GET_NODE_ADDR, timeout_ms); DAP_DELETE(l_node_info); dap_client_disconnect(client->client); dap_chain_node_client_close(client); @@ -671,15 +673,13 @@ static int com_global_db_set_remote(dap_chain_node_info_t *a_node_info, const ch DAP_DELETE(client->recv_data); client->recv_data = NULL; dap_chain_node_cli_set_reply_text(a_str_reply, "new address for remote node has been set 0x%x", addr); + } return 0; default: dap_chain_node_cli_set_reply_text(a_str_reply, "error"); return -1; } - - dap_chain_node_cli_set_reply_text(a_str_reply, "not implement"); - return -1; } /** @@ -687,130 +687,124 @@ static int com_global_db_set_remote(dap_chain_node_info_t *a_node_info, const ch * * return 0 OK, -1 Err */ -int com_global_db(int argc, const char ** argv, char **str_reply) +int com_global_db(int a_argc, const char ** a_argv, char **a_str_reply) { enum { - CMD_NONE, CMD_ADD, CMD_DEL, CMD_LINK, CMD_DUMP, CMD_GET, CMD_SET, CMD_REMOTE_SET + CMD_NONE, CMD_ADD, CMD_DEL, CMD_LINK, CMD_DUMP, CMD_CUR_NODE_GET, CMD_CUR_NODE_SET, CMD_CUR_NODE_SET_FROM_REMOTE }; //printf("com_global_db\n"); int arg_index = 1; // find 'node' as first parameter only - arg_index = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "node", NULL); - if(!arg_index || argc < 3) { - dap_chain_node_cli_set_reply_text(str_reply, "parameters are not valid"); + arg_index = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "node", NULL); + if(!arg_index || a_argc < 3) { + dap_chain_node_cli_set_reply_text(a_str_reply, "parameters are not valid"); return -1; } int arg_index_n = ++arg_index; // find command (add, delete, etc) as second parameter only int cmd_num = CMD_NONE; - if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "add", NULL)) + if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "add", NULL)) != 0) { cmd_num = CMD_ADD; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "del", NULL)) + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "del", NULL)) != 0) { cmd_num = CMD_DEL; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "link", NULL)) + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "link", NULL)) != 0) { cmd_num = CMD_LINK; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "dump", NULL)) + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "dump", NULL)) != 0) { cmd_num = CMD_DUMP; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "get", NULL)) - != 0) { - cmd_num = CMD_GET; + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "cur_node_get", NULL)) != 0) { + cmd_num = CMD_CUR_NODE_GET; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "set", NULL)) - != 0) { - cmd_num = CMD_SET; + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "cur_node_set", NULL)) != 0) { + cmd_num = CMD_CUR_NODE_SET; } - else if((arg_index_n = dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "remote_set", + else if((arg_index_n = dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "cur_node_set_from_remote", NULL)) != 0) { - cmd_num = CMD_REMOTE_SET; + cmd_num = CMD_CUR_NODE_SET_FROM_REMOTE; } if(cmd_num == CMD_NONE) { - dap_chain_node_cli_set_reply_text(str_reply, "command %s not recognized", argv[1]); + dap_chain_node_cli_set_reply_text(a_str_reply, "command %s not recognized", a_argv[1]); return -1; } //arg_index = arg_index_n; // no need, they are already equal must be assert(arg_index == arg_index_n); arg_index++; - const char *addr_str = NULL, *alias_str = NULL, *cell_str = NULL, *link_str = NULL; + const char *l_addr_str = NULL, *alias_str = NULL, *l_cell_str = NULL, *l_link_str = NULL; const char *ipv4_str = NULL, *ipv6_str = NULL; // find addr, alias - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-addr", &addr_str); - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-alias", &alias_str); - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-cell", &cell_str); - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-ipv4", &ipv4_str); - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-ipv6", &ipv6_str); - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-link", &link_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-addr", &l_addr_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-alias", &alias_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-cell", &l_cell_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-ipv4", &ipv4_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-ipv6", &ipv6_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-link", &l_link_str); // struct to write to the global db - dap_chain_node_info_t node_info; - dap_chain_node_addr_t link; - memset(&node_info, 0, sizeof(dap_chain_node_info_t)); - memset(&link, 0, sizeof(dap_chain_node_addr_t)); - if(addr_str) { - dap_digit_from_string(addr_str, node_info.hdr.address.raw, sizeof(node_info.hdr.address.raw)); + dap_chain_node_addr_t l_link={0}; + dap_chain_node_info_t *l_node_info; + size_t l_node_info_size = sizeof (l_node_info->hdr)+sizeof(l_link); + l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t,l_node_info_size); + + if(l_addr_str) { + dap_digit_from_string(l_addr_str, l_node_info->hdr.address.raw, sizeof(l_node_info->hdr.address.raw) ); } - if(cell_str) { - dap_digit_from_string(cell_str, node_info.hdr.cell_id.raw, sizeof(node_info.hdr.cell_id.raw)); //DAP_CHAIN_CELL_ID_SIZE); + if(l_cell_str) { + dap_digit_from_string(l_cell_str, l_node_info->hdr.cell_id.raw, sizeof(l_node_info->hdr.cell_id.raw)); //DAP_CHAIN_CELL_ID_SIZE); } - if(link_str) { - dap_digit_from_string(link_str, link.raw, sizeof(link.raw)); + if(l_link_str) { + dap_digit_from_string(l_link_str, l_link.raw, sizeof(l_link.raw)); } switch (cmd_num) { // add new node to global_db case CMD_ADD: - if(!arg_index || argc < 8) { - dap_chain_node_cli_set_reply_text(str_reply, "invalid parameters"); + if(!arg_index || a_argc < 8) { + dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameters"); return -1; } // handler of command 'global_db node add' - return com_global_db_add(&node_info, alias_str, cell_str, ipv4_str, ipv6_str, str_reply); + return com_global_db_add(l_node_info, alias_str, l_cell_str, ipv4_str, ipv6_str, a_str_reply); //break; case CMD_DEL: // handler of command 'global_db node del' - return com_global_db_del(&node_info, alias_str, str_reply); - break; + return com_global_db_del(l_node_info, alias_str, a_str_reply); case CMD_LINK: - if(dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "add", NULL)) + if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "add", NULL)) // handler of command 'global_db node link add -addr <node address> -link <node address>' - return com_global_db_link(&node_info, "add", alias_str, &link, str_reply); - else if(dap_chain_node_cli_find_option_val(argv, arg_index, min(argc, arg_index + 1), "del", NULL)) + return com_global_db_link(l_node_info, "add", alias_str, &l_link, a_str_reply); + else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "del", NULL)) // handler of command 'global_db node link del -addr <node address> -link <node address>' - return com_global_db_link(&node_info, "del", alias_str, &link, str_reply); + return com_global_db_link(l_node_info, "del", alias_str, &l_link, a_str_reply); else { - dap_chain_node_cli_set_reply_text(str_reply, "command not recognize, supported format:\n" + dap_chain_node_cli_set_reply_text(a_str_reply, "command not recognize, supported format:\n" "global_db node link <add|del] [-addr <node address> | -alias <node alias>] -link <node address>"); + DAP_DELETE(l_node_info); return -1; } - break; case CMD_DUMP: // handler of command 'global_db node dump' - return com_global_db_dump(&node_info, alias_str, str_reply); - break; - case CMD_GET: - // handler of command 'global_db node get' - return com_global_db_get(str_reply); - break; - case CMD_SET: - // handler of command 'global_db node set' - return com_global_db_set(&node_info, alias_str, str_reply); - break; - case CMD_REMOTE_SET: + return com_global_db_dump(l_node_info, alias_str, a_str_reply); + case CMD_CUR_NODE_GET: + // handler of command 'global_db cur_node get' + return com_global_db_cur_node_get(a_str_reply); + case CMD_CUR_NODE_SET: + // handler of command 'global_db cur_node set' + return com_global_db_cur_node_set(l_node_info, alias_str, a_str_reply); + case CMD_CUR_NODE_SET_FROM_REMOTE: // handler of command 'global_db node remote_set' - return com_global_db_set_remote(&node_info, alias_str, str_reply); - break; + return com_global_db_cur_node_set_from_remote(l_node_info, alias_str, a_str_reply); default: - dap_chain_node_cli_set_reply_text(str_reply, "command %s not recognized", argv[1]); + dap_chain_node_cli_set_reply_text(a_str_reply, "command %s not recognized", a_argv[1]); return -1; } return -1; @@ -909,13 +903,14 @@ int com_node(int argc, const char ** argv, char **str_reply) } // get cur node addr - uint64_t l_cur_node_addr = dap_db_get_cur_node_addr(); //0x12345 - if(!l_cur_node_addr) { - dap_chain_node_cli_set_reply_text(str_reply, "node has no address"); + dap_chain_node_addr_t l_cur_node_addr; + l_cur_node_addr.uint64 = dap_db_get_cur_node_addr(); //0x12345 + if(!l_cur_node_addr.uint64) { + dap_chain_node_cli_set_reply_text(str_reply, "Current node has no address"); return -1; } - dap_chain_node_info_t *node_info = dap_chain_node_info_read(&address, str_reply); + dap_chain_node_info_t *node_info = dap_chain_node_info_read_and_reply(&address, str_reply); if(!node_info) { return -1; } @@ -928,7 +923,7 @@ int com_node(int argc, const char ** argv, char **str_reply) } // wait connected int timeout_ms = 15000; //15 sec = 15000 ms - int res = chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); + int res = dap_chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); if(res != 1) { dap_chain_node_cli_set_reply_text(str_reply, "no response from node"); // clean client struct @@ -942,7 +937,7 @@ int com_node(int argc, const char ** argv, char **str_reply) // Get last timestamp in log time_t l_timestamp_start = dap_db_log_get_last_timestamp(); size_t l_data_send_len = 0; - uint8_t *l_data_send = dap_stream_ch_chain_net_make_packet(l_cur_node_addr, node_info->hdr.address.uint64, + uint8_t *l_data_send = dap_stream_ch_chain_net_make_packet(l_cur_node_addr.uint64, node_info->hdr.address.uint64, l_timestamp_start, NULL, 0, &l_data_send_len); uint8_t l_ch_id = dap_stream_ch_chain_net_get_id(); // Channel id for global_db sync @@ -960,7 +955,7 @@ int com_node(int argc, const char ** argv, char **str_reply) // wait for finishing of request timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms // TODO add progress info to console - res = chain_node_client_wait(client, NODE_CLIENT_STATE_END, timeout_ms); + res = dap_chain_node_client_wait(client, NODE_CLIENT_STATE_END, timeout_ms); DAP_DELETE(node_info); dap_client_disconnect(client->client); dap_chain_node_client_close(client); @@ -997,7 +992,7 @@ int com_node(int argc, const char ** argv, char **str_reply) return -1; } - dap_chain_node_info_t *node_info = dap_chain_node_info_read(&address, str_reply); + dap_chain_node_info_t *node_info = dap_chain_node_info_read_and_reply(&address, str_reply); if(!node_info) return -1; int timeout_ms = 10000; //10 sec = 10000 ms @@ -1009,7 +1004,7 @@ int com_node(int argc, const char ** argv, char **str_reply) return -1; } // wait handshake - int res = chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); + int res = dap_chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms); if(res != 1) { dap_chain_node_cli_set_reply_text(str_reply, "no response from node"); // clean client struct @@ -1651,7 +1646,6 @@ int com_mempool_list(int argc, const char ** argv, char ** a_str_reply) dap_chain_net_t * l_net = NULL; if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index,argc,argv,a_str_reply,&l_chain, &l_net) != 0){ - dap_chain_node_cli_set_reply_text(a_str_reply, "Error! Need both -net <network name> and -chain <chain name> params\n"); return -1; } @@ -2185,8 +2179,8 @@ int com_tx_cond_create(int argc, const char ** argv, char **str_reply) const dap_chain_addr_t *addr_cond = dap_chain_wallet_get_addr(l_wallet_cond); dap_chain_net_srv_abstract_t l_cond; - dap_chain_net_srv_abstract_set(&l_cond, SERV_CLASS_PERMANENT, SERV_ID_VPN, l_value, SERV_UNIT_MB, - "test vpn service"); +// dap_chain_net_srv_abstract_set(&l_cond, SERV_CLASS_PERMANENT, SERV_ID_VPN, l_value, SERV_UNIT_MB, +// "test vpn service"); int res = dap_chain_mempool_tx_create_cond(l_key, l_key_cond, addr_from, addr_cond, NULL, l_token_ticker, l_value, 0, (const void*) &l_cond, sizeof(dap_chain_net_srv_abstract_t)); @@ -2323,7 +2317,7 @@ int com_print_log(int argc, const char ** argv, char **str_reply) l_ts_after = (l_str_ts_after) ? strtoll(l_str_ts_after, 0, 10) : -1; l_limit = (l_str_limit) ? strtol(l_str_limit, 0, 10) : -1; - if(l_ts_after<0 || !l_str_ts_after) { + if(l_ts_after < 0 || !l_str_ts_after) { dap_chain_node_cli_set_reply_text(str_reply, "requires valid parameter 'l_ts_after'"); return -1; } @@ -2332,8 +2326,14 @@ int com_print_log(int argc, const char ** argv, char **str_reply) return -1; } - char *l_str_ret = NULL; + // get logs from list + char *l_str_ret = log_get_item(l_ts_after, l_limit); + if(!l_str_ret) { + dap_chain_node_cli_set_reply_text(str_reply, "no logs"); + return -1; + } dap_chain_node_cli_set_reply_text(str_reply, l_str_ret); - return -1; + DAP_DELETE(l_str_ret); + return 0; } -- GitLab