From a7fe41e4df5baf8e2fcba9d25b999eb0fa82511f Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Fri, 4 Oct 2024 14:17:54 +0700 Subject: [PATCH 01/33] [+]exec_cmd http --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index f2b762fcfb..0e4a8af4bf 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit f2b762fcfbf3d799029d9a52963b09fefd9e711b +Subproject commit 0e4a8af4bf206fc6ce5c90d3bb4f4426f7847589 -- GitLab From 8d12fefcebc7c72bf57f6c082b379dcef3060bcc Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Fri, 4 Oct 2024 14:22:24 +0700 Subject: [PATCH 02/33] ... --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 0e4a8af4bf..137194f397 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 0e4a8af4bf206fc6ce5c90d3bb4f4426f7847589 +Subproject commit 137194f3972fc70c496e7bb2a97274d6f9004a32 -- GitLab From 0e2875691b089fab9e335f4b9e94c620499f4cf5 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 9 Oct 2024 17:11:53 +0700 Subject: [PATCH 03/33] [*] http json --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 137194f397..0809235356 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 137194f3972fc70c496e7bb2a97274d6f9004a32 +Subproject commit 0809235356b18200560c866e95294cda39ff3a68 -- GitLab From 6153bdc93ac4962eee3a98aa67374a7ea09a66a9 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Mon, 14 Oct 2024 14:24:45 +0700 Subject: [PATCH 04/33] [*] fix exec_cmd --- dap-sdk | 2 +- modules/net/dap_chain_node_cli.c | 3 ++ modules/net/dap_chain_node_cli_cmd.c | 43 ++++++++++++++++++++ modules/net/include/dap_chain_node_cli_cmd.h | 2 + 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 0809235356..188dd5b6c0 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 0809235356b18200560c866e95294cda39ff3a68 +Subproject commit 188dd5b6c0dca38a173d1dcc3413f562dfa3c920 diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index 99484040af..13e8e6799b 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -342,6 +342,9 @@ int dap_chain_node_cli_init(dap_config_t * g_config) "decree info -net <net_name>\n" "Displays information about the parameters of the decrees in the network.\n"); + dap_cli_server_cmd_add ("exit", com_exec_cmd, "Execute command on remote node", + "exec_cmd -net <net_name> -addr <node_addr> -cmd <command,and,all,args,separated,by,commas>\n" ); + // Exit - always last! dap_cli_server_cmd_add ("exit", com_exit, "Stop application and exit", "exit\n" ); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 2aa446bd15..66ef5a5659 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -103,6 +103,8 @@ #include "dap_json_rpc_errors.h" #include "dap_http_ban_list_client.h" #include "dap_chain_datum_tx_voting.h" +#include "dap_json_rpc.h" +#include "dap_json_rpc_request.h" #define LOG_TAG "chain_node_cli_cmd" @@ -8538,3 +8540,44 @@ void dap_notify_new_client_send_info(dap_events_socket_t *a_es, UNUSED_ARG void } json_object_put(l_json_wallets); } + +int com_exec_cmd(int argc, char **argv, void **reply) { + json_object ** a_json_arr_reply = (json_object **) reply; + if (!dap_json_rpc_exec_cmd_inited()) { + log_it(L_ERROR, "Json-rpc module doesn't inited, check confings"); + return -1; + } + + const char * l_cmd_arg_str = NULL, * l_ip_str = NULL, * l_net_str = NULL; + int arg_index = 1; + dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-cmd", &l_cmd_arg_str); + dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_ip_str); + dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_str); + if (!l_cmd_arg_str || ! l_ip_str || !l_net_str) { + dap_json_rpc_error_add(-1, "Command exec_cmd require args -cmd, -addr, -net"); + } + dap_chain_net_t* l_net = NULL; + l_net = dap_chain_net_by_name(l_net_str); + + dap_json_rpc_params_t * params = dap_json_rpc_params_create(); + char *l_cmd_str = dap_strdup(l_cmd_arg_str); + for(int i = 0; l_cmd_str[i] != '\0'; i++) { + if (l_cmd_str[i] == ',') + l_cmd_str[i] = ';'; + } + dap_json_rpc_params_add_data(params, l_cmd_str, TYPE_PARAM_STRING); + uint64_t l_id_response = dap_json_rpc_response_get_new_id(); + char ** l_cmd_arr_str = dap_strsplit(l_cmd_str, ";", -1); + dap_json_rpc_request_t *a_request = dap_json_rpc_request_creation(l_cmd_arr_str[0], params, l_id_response); + dap_strfreev(l_cmd_arr_str); + // char * request_str = dap_json_rpc_request_to_json_string(a_request); + dap_chain_node_addr_t l_node_addr; + dap_chain_node_addr_from_str(&l_node_addr, l_ip_str); + dap_chain_node_info_t *l_remote = dap_chain_node_info_read(l_net, &l_node_addr); + DAP_DEL_Z(l_cmd_str); + if (!dap_json_rpc_request_send(a_request, dap_json_rpc_response_accepted, l_remote->ext_host, l_remote->ext_port, dap_json_rpc_error_callback)) + log_it(L_INFO, "com_exec sent request to %s:%d", l_remote->ext_host, l_remote->ext_port); + + json_object_array_add(*a_json_arr_reply, json_object_new_string("DONE")); + return 0; +} diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h index bf894e4123..cb6e5eb6c1 100644 --- a/modules/net/include/dap_chain_node_cli_cmd.h +++ b/modules/net/include/dap_chain_node_cli_cmd.h @@ -363,3 +363,5 @@ int com_signer(int a_argc, char **a_argv, void **a_str_reply); int cmd_remove(int a_argc, char **a_argv, void **a_str_reply); void dap_notify_new_client_send_info(dap_events_socket_t *a_es, void *a_arg); + +int com_exec_cmd(int argc, char **argv, void **reply); -- GitLab From cd14ea41255f769b4e439f3b7849347483e84fd5 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Mon, 14 Oct 2024 15:19:00 +0700 Subject: [PATCH 05/33] [*] fix exec_cmd --- modules/net/dap_chain_node_cli.c | 2 +- modules/net/dap_chain_node_cli_cmd.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index 13e8e6799b..7de59d2354 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -342,7 +342,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config) "decree info -net <net_name>\n" "Displays information about the parameters of the decrees in the network.\n"); - dap_cli_server_cmd_add ("exit", com_exec_cmd, "Execute command on remote node", + dap_cli_server_cmd_add ("exec_cmd", com_exec_cmd, "Execute command on remote node", "exec_cmd -net <net_name> -addr <node_addr> -cmd <command,and,all,args,separated,by,commas>\n" ); // Exit - always last! diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 66ef5a5659..64a501efa3 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8544,17 +8544,18 @@ void dap_notify_new_client_send_info(dap_events_socket_t *a_es, UNUSED_ARG void int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; if (!dap_json_rpc_exec_cmd_inited()) { - log_it(L_ERROR, "Json-rpc module doesn't inited, check confings"); + dap_json_rpc_error_add(-1, "Json-rpc module doesn't inited, check confings"); return -1; } - const char * l_cmd_arg_str = NULL, * l_ip_str = NULL, * l_net_str = NULL; + const char * l_cmd_arg_str = NULL, * l_addr_str = NULL, * l_net_str = NULL; int arg_index = 1; dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-cmd", &l_cmd_arg_str); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_ip_str); + dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_str); dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_str); - if (!l_cmd_arg_str || ! l_ip_str || !l_net_str) { + if (!l_cmd_arg_str || ! l_addr_str || !l_net_str) { dap_json_rpc_error_add(-1, "Command exec_cmd require args -cmd, -addr, -net"); + return -2; } dap_chain_net_t* l_net = NULL; l_net = dap_chain_net_by_name(l_net_str); @@ -8572,9 +8573,13 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_strfreev(l_cmd_arr_str); // char * request_str = dap_json_rpc_request_to_json_string(a_request); dap_chain_node_addr_t l_node_addr; - dap_chain_node_addr_from_str(&l_node_addr, l_ip_str); + dap_chain_node_addr_from_str(&l_node_addr, l_addr_str); dap_chain_node_info_t *l_remote = dap_chain_node_info_read(l_net, &l_node_addr); DAP_DEL_Z(l_cmd_str); + if (!l_remote) { + dap_json_rpc_error_add(-1, "Can't find remote node: %s", l_addr_str); + return -3; + } if (!dap_json_rpc_request_send(a_request, dap_json_rpc_response_accepted, l_remote->ext_host, l_remote->ext_port, dap_json_rpc_error_callback)) log_it(L_INFO, "com_exec sent request to %s:%d", l_remote->ext_host, l_remote->ext_port); -- GitLab From 90c1e2394ac4bc4c788b32b387233cc309e4b60b Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Mon, 14 Oct 2024 17:46:04 +0700 Subject: [PATCH 06/33] [*] sub up --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 188dd5b6c0..dda5cbce37 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 188dd5b6c0dca38a173d1dcc3413f562dfa3c920 +Subproject commit dda5cbce37bcec5906c8bee9081f51b44f91525b -- GitLab From 2580789b1d851913198fe8c6e7795d0bab052f14 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 17 Oct 2024 17:05:33 +0700 Subject: [PATCH 07/33] [+] json enc --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 120 +++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/dap-sdk b/dap-sdk index dda5cbce37..f78db0429f 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit dda5cbce37bcec5906c8bee9081f51b44f91525b +Subproject commit f78db0429fe83e344840ad96dd82ef70dd5ea3ce diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 64a501efa3..d25e17bc22 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -105,6 +105,8 @@ #include "dap_chain_datum_tx_voting.h" #include "dap_json_rpc.h" #include "dap_json_rpc_request.h" +#include "dap_client_pvt.h" +#include "dap_enc.h" #define LOG_TAG "chain_node_cli_cmd" @@ -8569,20 +8571,122 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_json_rpc_params_add_data(params, l_cmd_str, TYPE_PARAM_STRING); uint64_t l_id_response = dap_json_rpc_response_get_new_id(); char ** l_cmd_arr_str = dap_strsplit(l_cmd_str, ";", -1); - dap_json_rpc_request_t *a_request = dap_json_rpc_request_creation(l_cmd_arr_str[0], params, l_id_response); + dap_json_rpc_request_t *l_request = dap_json_rpc_request_creation(l_cmd_arr_str[0], params, l_id_response); dap_strfreev(l_cmd_arr_str); // char * request_str = dap_json_rpc_request_to_json_string(a_request); dap_chain_node_addr_t l_node_addr; dap_chain_node_addr_from_str(&l_node_addr, l_addr_str); - dap_chain_node_info_t *l_remote = dap_chain_node_info_read(l_net, &l_node_addr); - DAP_DEL_Z(l_cmd_str); - if (!l_remote) { - dap_json_rpc_error_add(-1, "Can't find remote node: %s", l_addr_str); - return -3; + + dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, NULL); + if(!node_info) + return -6; + int timeout_ms = 5000; //5 sec = 5000 ms + // start handshake + dap_chain_node_client_t *l_client = dap_chain_node_client_connect_default_channels(l_net,node_info); + if(!l_client) { + // dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't connect"); + DAP_DELETE(node_info); + return -7; + } + // wait handshake + int res = dap_chain_node_client_wait(l_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); + if (res) { + // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); + // clean client struct + dap_chain_node_client_close_unsafe(l_client); + DAP_DELETE(node_info); + return -8; } - if (!dap_json_rpc_request_send(a_request, dap_json_rpc_response_accepted, l_remote->ext_host, l_remote->ext_port, dap_json_rpc_error_callback)) - log_it(L_INFO, "com_exec sent request to %s:%d", l_remote->ext_host, l_remote->ext_port); + char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request); + + // if (!dap_json_rpc_request_send(l_request, dap_json_rpc_response_accepted, node_info->ext_host, node_info->ext_port, dap_json_rpc_error_callback)) + // log_it(L_INFO, "com_exec sent request to %s:%d", node_info->ext_host, node_info->ext_port); + + dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(l_client->client); + const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d", + l_client_internal->client->active_channels, l_client_internal->session_key_type, + l_client_internal->session_key_block_size, 0); + + bool is_query_enc = true; + const char * a_query = "type=tcp,maxconn=4"; + size_t l_sub_url_size = l_sub_url ? strlen(l_sub_url) : 0; + size_t l_query_size = a_query ? strlen(a_query) : 0; + + size_t l_sub_url_enc_size_max = l_sub_url_size ? (5 * l_sub_url_size + 16) : 0; + char *l_sub_url_enc = l_sub_url_size ? DAP_NEW_Z_SIZE(char, l_sub_url_enc_size_max + 1) : NULL; + + size_t l_query_enc_size_max = (is_query_enc) ? (l_query_size * 5 + 16) : l_query_size; + char *l_query_enc = + (is_query_enc) ? (l_query_size ? DAP_NEW_Z_SIZE(char, l_query_enc_size_max + 1) : NULL) : (char*) a_query; + + size_t l_request_data_size = strlen(l_request_data_str); + size_t l_request_enc_size_max = l_request_data_size ? l_request_data_size * 2 + 16 : 0; + char * l_request_enc = l_request_data_size ? DAP_NEW_Z_SIZE(char, l_request_enc_size_max + 1) : NULL; + size_t l_request_enc_size = 0; + + // l_client_internal->request_response_callback = dap_json_rpc_response_accepted; + // l_client_internal->request_error_callback = dap_json_rpc_error_callback; + l_client_internal->is_encrypted = true; + dap_enc_data_type_t l_enc_type; + + if(l_client_internal->uplink_protocol_version >= 21) + l_enc_type = DAP_ENC_DATA_TYPE_B64_URLSAFE; + else + l_enc_type = DAP_ENC_DATA_TYPE_B64; + + if(l_sub_url_size) + dap_enc_code(l_client_internal->session_key, + l_sub_url, l_sub_url_size, + l_sub_url_enc, l_sub_url_enc_size_max, + l_enc_type); + + if(is_query_enc && l_query_size) + dap_enc_code(l_client_internal->session_key, + a_query, l_query_size, + l_query_enc, l_query_enc_size_max, + l_enc_type); + + if(l_request_data_size) + l_request_enc_size = dap_enc_code(l_client_internal->session_key, + l_request_data_str, l_request_data_size, + l_request_enc, l_request_enc_size_max, + DAP_ENC_DATA_TYPE_RAW); + + size_t l_path_size= l_query_enc_size_max + l_sub_url_enc_size_max + 1; + const char * path = "exec_cmd"; + char *l_path = DAP_NEW_Z_SIZE(char, l_path_size); + l_path[0] = '\0'; + if(path) { + if(l_sub_url_size){ + if(l_query_size){ + snprintf(l_path, l_path_size, "%s/%s?%s", path?path:"", + l_sub_url_enc?l_sub_url_enc:"", + l_query_enc?l_query_enc:""); + }else{ + snprintf(l_path, l_path_size, "%s/%s", path, l_sub_url_enc); + } + } else { + dap_stpcpy(l_path, path); + } + } + + size_t l_size_required = l_client_internal->session_key_id ? strlen(l_client_internal->session_key_id) + 40 : 40; + char *l_custom = DAP_NEW_Z_SIZE(char, l_size_required); + size_t l_off = snprintf(l_custom, l_size_required, "KeyID: %s\r\n", l_client_internal->session_key_id ? l_client_internal->session_key_id : "NULL"); + if (l_client_internal->is_close_session) + snprintf(l_custom + l_off, l_size_required - l_off, "%s\r\n", "SessionCloseAfterRequest: true"); + + l_client_internal->http_client = dap_client_http_request(l_client_internal->worker, l_client_internal->client->link_info.uplink_addr, + l_client_internal->client->link_info.uplink_port, + "POST", "application/json", + l_path, l_request_enc, l_request_enc_size, NULL, + dap_json_rpc_response_accepted, NULL, l_client_internal, l_custom); + DAP_DEL_Z(l_sub_url_enc); + DAP_DEL_Z(l_custom); + DAP_DEL_Z(l_query_enc); + DAP_DEL_Z(l_path); + DAP_DEL_Z(l_request_enc); json_object_array_add(*a_json_arr_reply, json_object_new_string("DONE")); return 0; } -- GitLab From 345cb2d9e9c81e3444b10a036a3e3b211c097bc6 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Sun, 20 Oct 2024 20:36:13 +0700 Subject: [PATCH 08/33] [*] fix exec_cmd --- modules/net/dap_chain_node_cli_cmd.c | 37 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index d25e17bc22..82d657a014 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8580,29 +8580,30 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, NULL); if(!node_info) return -6; - int timeout_ms = 5000; //5 sec = 5000 ms - // start handshake - dap_chain_node_client_t *l_client = dap_chain_node_client_connect_default_channels(l_net,node_info); - if(!l_client) { - // dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't connect"); - DAP_DELETE(node_info); - return -7; - } - // wait handshake - int res = dap_chain_node_client_wait(l_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); - if (res) { - // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); - // clean client struct - dap_chain_node_client_close_unsafe(l_client); - DAP_DELETE(node_info); - return -8; - } + // int timeout_ms = 5000; //5 sec = 5000 ms + // // start handshake + // dap_chain_node_client_t *l_client = dap_chain_node_client_connect_default_channels(l_net,node_info); + // if(!l_client) { + // // dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't connect"); + // DAP_DELETE(node_info); + // return -7; + // } + // // wait handshake + // int res = dap_chain_node_client_wait(l_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); + // if (res) { + // // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); + // // clean client struct + // dap_chain_node_client_close_unsafe(l_client); + // DAP_DELETE(node_info); + // return -8; + // } char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request); // if (!dap_json_rpc_request_send(l_request, dap_json_rpc_response_accepted, node_info->ext_host, node_info->ext_port, dap_json_rpc_error_callback)) // log_it(L_INFO, "com_exec sent request to %s:%d", node_info->ext_host, node_info->ext_port); - dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(l_client->client); + dap_client_pvt_t * l_client_internal = NULL; + dap_client_pvt_new(l_client_internal); const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d", l_client_internal->client->active_channels, l_client_internal->session_key_type, -- GitLab From 51263258dbc5e43f5ebc81c0437230f8108b0f4a Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Mon, 21 Oct 2024 12:25:17 +0700 Subject: [PATCH 09/33] [*] --- modules/net/dap_chain_node_cli_cmd.c | 100 +++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 12 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 82d657a014..ebf766c373 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8543,6 +8543,18 @@ void dap_notify_new_client_send_info(dap_events_socket_t *a_es, UNUSED_ARG void json_object_put(l_json_wallets); } +static void s_stage_connected_callback(dap_client_t* a_client, void * a_arg) { + dap_chain_node_client_t *l_node_client = DAP_CHAIN_NODE_CLIENT(a_client); + UNUSED(a_arg); + if(l_node_client) { + pthread_mutex_lock(&l_node_client->wait_mutex); + l_node_client->state = NODE_CLIENT_STATE_ESTABLISHED; + pthread_cond_signal(&l_node_client->wait_cond); + pthread_mutex_unlock(&l_node_client->wait_mutex); + } +} + + int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; if (!dap_json_rpc_exec_cmd_inited()) { @@ -8580,30 +8592,93 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, NULL); if(!node_info) return -6; - // int timeout_ms = 5000; //5 sec = 5000 ms - // // start handshake + int timeout_ms = 5000; //5 sec = 5000 ms + // start handshake // dap_chain_node_client_t *l_client = dap_chain_node_client_connect_default_channels(l_net,node_info); // if(!l_client) { // // dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't connect"); // DAP_DELETE(node_info); // return -7; // } - // // wait handshake - // int res = dap_chain_node_client_wait(l_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); - // if (res) { - // // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); - // // clean client struct - // dap_chain_node_client_close_unsafe(l_client); - // DAP_DELETE(node_info); - // return -8; + + dap_chain_node_client_t * l_node_client = dap_chain_node_client_create(l_net, node_info, NULL, NULL); + + l_node_client->client = dap_client_new(NULL, l_node_client); + l_node_client->client->_inheritor = l_node_client; + dap_client_set_uplink_unsafe(l_node_client->client, &l_node_client->info->address, node_info->ext_host, node_info->ext_port); + + dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(l_node_client->client); + + dap_client_go_stage(l_node_client->client, STAGE_ENC_INIT, s_stage_connected_callback); + + int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); + if (res) { + // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); + // clean client struct + dap_chain_node_client_close_unsafe(l_node_client); + DAP_DELETE(node_info); + return -8; + } + + // if (!*l_client_pvt->client->link_info.uplink_addr || !l_client_pvt->client->link_info.uplink_port) { + // log_it(L_ERROR, "Client remote address is empty"); + // l_client_pvt->stage_status = STAGE_STATUS_ERROR; + // l_client_pvt->last_error = ERROR_WRONG_ADDRESS; + // return -1; // } + + // if (l_client_pvt->session_key_open) + // dap_enc_key_delete(l_client_pvt->session_key_open); + // l_client_pvt->session_key_open = dap_enc_key_new_generate(l_client_pvt->session_key_open_type, NULL, 0, NULL, 0, + // l_client_pvt->session_key_block_size); + // if (!l_client_pvt->session_key_open) { + // log_it(L_ERROR, "Insufficient memory! May be a huge memory leak present"); + // l_client_pvt->stage_status = STAGE_STATUS_ERROR; + // l_client_pvt->last_error = ERROR_OUT_OF_MEMORY; + // return -1; + // } + // size_t l_data_size = l_client_pvt->session_key_open->pub_key_data_size; + // uint8_t *l_data = DAP_NEW_Z_SIZE(uint8_t, l_data_size); + // memcpy(l_data, l_client_pvt->session_key_open->pub_key_data, l_client_pvt->session_key_open->pub_key_data_size); + + // dap_cert_t *l_node_cert = dap_cert_find_by_name(DAP_STREAM_NODE_ADDR_CERT_NAME); + // size_t l_sign_count = 0; + // if (l_client_pvt->client->auth_cert) + // l_sign_count += s_add_cert_sign_to_data(l_client_pvt->client->auth_cert, &l_data, &l_data_size, + // l_client_pvt->session_key_open->pub_key_data, + // l_client_pvt->session_key_open->pub_key_data_size); + // l_sign_count += s_add_cert_sign_to_data(l_node_cert, &l_data, &l_data_size, + // l_client_pvt->session_key_open->pub_key_data, + // l_client_pvt->session_key_open->pub_key_data_size); + + + // size_t l_data_str_size_max = DAP_ENC_BASE64_ENCODE_SIZE(l_data_size); + // char *l_data_str = DAP_NEW_Z_SIZE(char, l_data_str_size_max + 1); + // // DAP_ENC_DATA_TYPE_B64_URLSAFE not need because send it by POST request + // size_t l_data_str_enc_size = dap_enc_base64_encode(l_data, l_data_size, l_data_str, DAP_ENC_DATA_TYPE_B64); + + + // char l_enc_init_url[1024] = { '\0' }; + // snprintf(l_enc_init_url, sizeof(l_enc_init_url), DAP_UPLINK_PATH_ENC_INIT + // "/gd4y5yh78w42aaagh" "?enc_type=%d,pkey_exchange_type=%d,pkey_exchange_size=%zd,block_key_size=%zd,protocol_version=%d,sign_count=%zu", + // l_client_pvt->session_key_type, l_client_pvt->session_key_open_type, l_client_pvt->session_key_open->pub_key_data_size, + // l_client_pvt->session_key_block_size, DAP_CLIENT_PROTOCOL_VERSION, l_sign_count); + // int l_res = dap_client_pvt_request(l_client_pvt, l_enc_init_url, + // l_data_str, l_data_str_enc_size, s_enc_init_response, s_enc_init_error); + + + + + + // wait handshake + char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request); // if (!dap_json_rpc_request_send(l_request, dap_json_rpc_response_accepted, node_info->ext_host, node_info->ext_port, dap_json_rpc_error_callback)) // log_it(L_INFO, "com_exec sent request to %s:%d", node_info->ext_host, node_info->ext_port); - dap_client_pvt_t * l_client_internal = NULL; - dap_client_pvt_new(l_client_internal); + + // dap_client_pvt_new(l_client_internal); const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d", l_client_internal->client->active_channels, l_client_internal->session_key_type, @@ -8683,6 +8758,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { "POST", "application/json", l_path, l_request_enc, l_request_enc_size, NULL, dap_json_rpc_response_accepted, NULL, l_client_internal, l_custom); + log_it(L_MSG, "enc request = %s", l_request_enc); DAP_DEL_Z(l_sub_url_enc); DAP_DEL_Z(l_custom); DAP_DEL_Z(l_query_enc); -- GitLab From 83e3ff8738e5d8a666cab874c75083ee10b6935c Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Mon, 21 Oct 2024 15:20:40 +0700 Subject: [PATCH 10/33] [*] fix --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 221 ++++++++++++++++++--------- 2 files changed, 148 insertions(+), 75 deletions(-) diff --git a/dap-sdk b/dap-sdk index f78db0429f..a1003ac894 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit f78db0429fe83e344840ad96dd82ef70dd5ea3ce +Subproject commit a1003ac89487bfc41ed22fec2bd9e722470de433 diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index ebf766c373..f645761897 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8554,6 +8554,139 @@ static void s_stage_connected_callback(dap_client_t* a_client, void * a_arg) { } } +struct exec_cmd_request { + dap_client_pvt_t * client_pvt; +#ifdef DAP_OS_WINDOWS + CONDITION_VARIABLE wait_cond; + CRITICAL_SECTION wait_crit_sec; +#else + pthread_cond_t wait_cond; + pthread_mutex_t wait_mutex; +#endif + char* response; + size_t response_size; +}; + +enum ExecCmdRetCode { + EXEC_CMD_OK = 1, + EXEC_CMD_ERR_NO_SERVER, + EXEC_CMDERR_HANDSHAKE, + EXEC_CMD_ERR_WAIT_TIMEOUT, + EXEC_CMD_ERR_UNKNOWN +}; + +static struct exec_cmd_request* s_exec_cmd_request_init(dap_client_pvt_t * a_client_pvt) +{ + struct exec_cmd_request *l_exec_cmd_request = DAP_NEW_Z(struct exec_cmd_request); + if (!l_exec_cmd_request) + return NULL; + l_exec_cmd_request->client_pvt = a_client_pvt; +#ifdef DAP_OS_WINDOWS + InitializeCriticalSection(&l_exec_cmd_request->wait_crit_sec); + InitializeConditionVariable(&l_exec_cmd_request->wait_cond); +#else + pthread_mutex_init(&l_exec_cmd_request->wait_mutex, NULL); +#ifdef DAP_OS_DARWIN + pthread_cond_init(&l_exec_cmd_request->wait_cond, NULL); +#else + pthread_condattr_t attr; + pthread_condattr_init(&attr); + pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + pthread_cond_init(&l_exec_cmd_request->wait_cond, &attr); +#endif +#endif + return l_exec_cmd_request; +} + +static void s_exec_cmd_response_handler(void *a_response, size_t a_response_size, void *a_arg, + http_status_code_t http_status_code) { + (void)http_status_code; + struct exec_cmd_request *l_exec_cmd_request = (struct exec_cmd_request *)a_arg; +#ifdef DAP_OS_WINDOWS + EnterCriticalSection(&l_exec_cmd_request->wait_crit_sec); +#else + pthread_mutex_lock(&l_exec_cmd_request->wait_mutex); +#endif + + dap_client_pvt_t * l_client_pvt = l_exec_cmd_request->client_pvt; + l_client_pvt->http_client = NULL; + size_t l_response_dec_size_max = a_response_size ? a_response_size * 2 + 16 : 0; + char * l_response_dec = a_response_size ? DAP_NEW_Z_SIZE(char, l_response_dec_size_max) : NULL; + size_t l_response_dec_size = 0; + if(a_response_size) + l_response_dec_size = dap_enc_decode(l_client_pvt->session_key, + a_response, a_response_size, + l_response_dec, l_response_dec_size_max, + DAP_ENC_DATA_TYPE_RAW); + + l_exec_cmd_request->response = l_response_dec; + l_exec_cmd_request->response_size = l_response_dec_size; +#ifdef DAP_OS_WINDOWS + WakeConditionVariable(&l_exec_cmd_request->wait_cond); + LeaveCriticalSection(&l_exec_cmd_request->wait_crit_sec); +#else + pthread_cond_signal(&l_exec_cmd_request->wait_cond); + pthread_mutex_unlock(&l_exec_cmd_request->wait_mutex); +#endif +} + +static void s_exec_cmd_error_handler(int a_error_code, void *a_arg){ + struct exec_cmd_request * l_exec_cmd_request = (struct exec_cmd_request *)a_arg; +#ifdef DAP_OS_WINDOWS + EnterCriticalSection(&l_exec_cmd_request->wait_crit_sec); + l_exec_cmd_request->response = a_error_code; + WakeConditionVariable(&l_exec_cmd_request->wait_cond); + LeaveCriticalSection(&l_exec_cmd_request->wait_crit_sec); +#else + pthread_mutex_lock(&l_exec_cmd_request->wait_mutex); + // l_exec_cmd_request->response = a_error_code; + pthread_cond_signal(&l_exec_cmd_request->wait_cond); + pthread_mutex_unlock(&l_exec_cmd_request->wait_mutex); +#endif +} + + +static int dap_chain_exec_cmd_list_wait(struct exec_cmd_request *a_exec_cmd_request, int a_timeout_ms) { +#ifdef DAP_OS_WINDOWS + EnterCriticalSection(&a_exec_cmd_request->wait_crit_sec); + if (a_exec_cmd_request->response) + return LeaveCriticalSection(&a_exec_cmd_request->wait_crit_sec), a_exec_cmd_request->response; + while (!a_exec_cmd_request->response) { + if ( !SleepConditionVariableCS(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_crit_sec, a_timeout_ms) ) + a_exec_cmd_request->response = GetLastError() == ERROR_TIMEOUT ? ERR_WAIT_TIMEOUT : ERR_UNKNOWN; + } + return LeaveCriticalSection(&a_exec_cmd_request->wait_crit_sec), a_exec_cmd_request->response; +#else + pthread_mutex_lock(&a_exec_cmd_request->wait_mutex); + if(a_exec_cmd_request->response) { + pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex); + return EXEC_CMD_OK; + } + struct timespec l_cond_timeout; +#ifdef DAP_OS_DARWIN + l_cond_timeout = (struct timespec){ .tv_sec = a_timeout_ms / 1000 }; +#else + clock_gettime(CLOCK_MONOTONIC, &l_cond_timeout); + l_cond_timeout.tv_sec += a_timeout_ms / 1000; +#endif + while (!a_exec_cmd_request->response) { + switch ( +#ifdef DAP_OS_DARWIN + pthread_cond_timedwait_relative_np(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_mutex, &l_cond_timeout) +#else + pthread_cond_timedwait(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_mutex, &l_cond_timeout) +#endif + ) { + case ETIMEDOUT: + a_exec_cmd_request->response = "ERR_WAIT_TIMEOUT"; + default: + break; + } + } + pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex); + return EXEC_CMD_ERR_WAIT_TIMEOUT; +#endif +} int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; @@ -8585,7 +8718,6 @@ int com_exec_cmd(int argc, char **argv, void **reply) { char ** l_cmd_arr_str = dap_strsplit(l_cmd_str, ";", -1); dap_json_rpc_request_t *l_request = dap_json_rpc_request_creation(l_cmd_arr_str[0], params, l_id_response); dap_strfreev(l_cmd_arr_str); - // char * request_str = dap_json_rpc_request_to_json_string(a_request); dap_chain_node_addr_t l_node_addr; dap_chain_node_addr_from_str(&l_node_addr, l_addr_str); @@ -8593,24 +8725,15 @@ int com_exec_cmd(int argc, char **argv, void **reply) { if(!node_info) return -6; int timeout_ms = 5000; //5 sec = 5000 ms - // start handshake - // dap_chain_node_client_t *l_client = dap_chain_node_client_connect_default_channels(l_net,node_info); - // if(!l_client) { - // // dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't connect"); - // DAP_DELETE(node_info); - // return -7; - // } - dap_chain_node_client_t * l_node_client = dap_chain_node_client_create(l_net, node_info, NULL, NULL); + //handshake l_node_client->client = dap_client_new(NULL, l_node_client); l_node_client->client->_inheritor = l_node_client; dap_client_set_uplink_unsafe(l_node_client->client, &l_node_client->info->address, node_info->ext_host, node_info->ext_port); - dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(l_node_client->client); - dap_client_go_stage(l_node_client->client, STAGE_ENC_INIT, s_stage_connected_callback); - + //wait handshake int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); if (res) { // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); @@ -8620,65 +8743,8 @@ int com_exec_cmd(int argc, char **argv, void **reply) { return -8; } - // if (!*l_client_pvt->client->link_info.uplink_addr || !l_client_pvt->client->link_info.uplink_port) { - // log_it(L_ERROR, "Client remote address is empty"); - // l_client_pvt->stage_status = STAGE_STATUS_ERROR; - // l_client_pvt->last_error = ERROR_WRONG_ADDRESS; - // return -1; - // } - - // if (l_client_pvt->session_key_open) - // dap_enc_key_delete(l_client_pvt->session_key_open); - // l_client_pvt->session_key_open = dap_enc_key_new_generate(l_client_pvt->session_key_open_type, NULL, 0, NULL, 0, - // l_client_pvt->session_key_block_size); - // if (!l_client_pvt->session_key_open) { - // log_it(L_ERROR, "Insufficient memory! May be a huge memory leak present"); - // l_client_pvt->stage_status = STAGE_STATUS_ERROR; - // l_client_pvt->last_error = ERROR_OUT_OF_MEMORY; - // return -1; - // } - // size_t l_data_size = l_client_pvt->session_key_open->pub_key_data_size; - // uint8_t *l_data = DAP_NEW_Z_SIZE(uint8_t, l_data_size); - // memcpy(l_data, l_client_pvt->session_key_open->pub_key_data, l_client_pvt->session_key_open->pub_key_data_size); - - // dap_cert_t *l_node_cert = dap_cert_find_by_name(DAP_STREAM_NODE_ADDR_CERT_NAME); - // size_t l_sign_count = 0; - // if (l_client_pvt->client->auth_cert) - // l_sign_count += s_add_cert_sign_to_data(l_client_pvt->client->auth_cert, &l_data, &l_data_size, - // l_client_pvt->session_key_open->pub_key_data, - // l_client_pvt->session_key_open->pub_key_data_size); - // l_sign_count += s_add_cert_sign_to_data(l_node_cert, &l_data, &l_data_size, - // l_client_pvt->session_key_open->pub_key_data, - // l_client_pvt->session_key_open->pub_key_data_size); - - - // size_t l_data_str_size_max = DAP_ENC_BASE64_ENCODE_SIZE(l_data_size); - // char *l_data_str = DAP_NEW_Z_SIZE(char, l_data_str_size_max + 1); - // // DAP_ENC_DATA_TYPE_B64_URLSAFE not need because send it by POST request - // size_t l_data_str_enc_size = dap_enc_base64_encode(l_data, l_data_size, l_data_str, DAP_ENC_DATA_TYPE_B64); - - - // char l_enc_init_url[1024] = { '\0' }; - // snprintf(l_enc_init_url, sizeof(l_enc_init_url), DAP_UPLINK_PATH_ENC_INIT - // "/gd4y5yh78w42aaagh" "?enc_type=%d,pkey_exchange_type=%d,pkey_exchange_size=%zd,block_key_size=%zd,protocol_version=%d,sign_count=%zu", - // l_client_pvt->session_key_type, l_client_pvt->session_key_open_type, l_client_pvt->session_key_open->pub_key_data_size, - // l_client_pvt->session_key_block_size, DAP_CLIENT_PROTOCOL_VERSION, l_sign_count); - // int l_res = dap_client_pvt_request(l_client_pvt, l_enc_init_url, - // l_data_str, l_data_str_enc_size, s_enc_init_response, s_enc_init_error); - - - - - - // wait handshake - - char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request); - - // if (!dap_json_rpc_request_send(l_request, dap_json_rpc_response_accepted, node_info->ext_host, node_info->ext_port, dap_json_rpc_error_callback)) - // log_it(L_INFO, "com_exec sent request to %s:%d", node_info->ext_host, node_info->ext_port); - - - // dap_client_pvt_new(l_client_internal); + size_t l_request_data_size = 0; + char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request, &l_request_data_size); const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d", l_client_internal->client->active_channels, l_client_internal->session_key_type, @@ -8696,7 +8762,6 @@ int com_exec_cmd(int argc, char **argv, void **reply) { char *l_query_enc = (is_query_enc) ? (l_query_size ? DAP_NEW_Z_SIZE(char, l_query_enc_size_max + 1) : NULL) : (char*) a_query; - size_t l_request_data_size = strlen(l_request_data_str); size_t l_request_enc_size_max = l_request_data_size ? l_request_data_size * 2 + 16 : 0; char * l_request_enc = l_request_data_size ? DAP_NEW_Z_SIZE(char, l_request_enc_size_max + 1) : NULL; size_t l_request_enc_size = 0; @@ -8753,12 +8818,20 @@ int com_exec_cmd(int argc, char **argv, void **reply) { if (l_client_internal->is_close_session) snprintf(l_custom + l_off, l_size_required - l_off, "%s\r\n", "SessionCloseAfterRequest: true"); + struct exec_cmd_request* l_exec_cmd_request = s_exec_cmd_request_init(l_client_internal); + l_client_internal->http_client = dap_client_http_request(l_client_internal->worker, l_client_internal->client->link_info.uplink_addr, l_client_internal->client->link_info.uplink_port, "POST", "application/json", l_path, l_request_enc, l_request_enc_size, NULL, - dap_json_rpc_response_accepted, NULL, l_client_internal, l_custom); - log_it(L_MSG, "enc request = %s", l_request_enc); + s_exec_cmd_response_handler, s_exec_cmd_error_handler, l_exec_cmd_request, l_custom); + + int l_ret = dap_chain_exec_cmd_list_wait(l_exec_cmd_request, 10000); + // switch (l_ret) { + // case EXEC_CMD_OK: { + json_object_array_add(*a_json_arr_reply, json_object_new_string(l_exec_cmd_request->response)); + // } + // } DAP_DEL_Z(l_sub_url_enc); DAP_DEL_Z(l_custom); DAP_DEL_Z(l_query_enc); -- GitLab From d35087110d83e0c829af5520b32d7eb0d36f2c64 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 11:34:16 +0700 Subject: [PATCH 11/33] [*] refactoring --- modules/net/dap_chain_node_cli_cmd.c | 233 +-------------------------- 1 file changed, 3 insertions(+), 230 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index f645761897..eb39d5604e 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8554,140 +8554,6 @@ static void s_stage_connected_callback(dap_client_t* a_client, void * a_arg) { } } -struct exec_cmd_request { - dap_client_pvt_t * client_pvt; -#ifdef DAP_OS_WINDOWS - CONDITION_VARIABLE wait_cond; - CRITICAL_SECTION wait_crit_sec; -#else - pthread_cond_t wait_cond; - pthread_mutex_t wait_mutex; -#endif - char* response; - size_t response_size; -}; - -enum ExecCmdRetCode { - EXEC_CMD_OK = 1, - EXEC_CMD_ERR_NO_SERVER, - EXEC_CMDERR_HANDSHAKE, - EXEC_CMD_ERR_WAIT_TIMEOUT, - EXEC_CMD_ERR_UNKNOWN -}; - -static struct exec_cmd_request* s_exec_cmd_request_init(dap_client_pvt_t * a_client_pvt) -{ - struct exec_cmd_request *l_exec_cmd_request = DAP_NEW_Z(struct exec_cmd_request); - if (!l_exec_cmd_request) - return NULL; - l_exec_cmd_request->client_pvt = a_client_pvt; -#ifdef DAP_OS_WINDOWS - InitializeCriticalSection(&l_exec_cmd_request->wait_crit_sec); - InitializeConditionVariable(&l_exec_cmd_request->wait_cond); -#else - pthread_mutex_init(&l_exec_cmd_request->wait_mutex, NULL); -#ifdef DAP_OS_DARWIN - pthread_cond_init(&l_exec_cmd_request->wait_cond, NULL); -#else - pthread_condattr_t attr; - pthread_condattr_init(&attr); - pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); - pthread_cond_init(&l_exec_cmd_request->wait_cond, &attr); -#endif -#endif - return l_exec_cmd_request; -} - -static void s_exec_cmd_response_handler(void *a_response, size_t a_response_size, void *a_arg, - http_status_code_t http_status_code) { - (void)http_status_code; - struct exec_cmd_request *l_exec_cmd_request = (struct exec_cmd_request *)a_arg; -#ifdef DAP_OS_WINDOWS - EnterCriticalSection(&l_exec_cmd_request->wait_crit_sec); -#else - pthread_mutex_lock(&l_exec_cmd_request->wait_mutex); -#endif - - dap_client_pvt_t * l_client_pvt = l_exec_cmd_request->client_pvt; - l_client_pvt->http_client = NULL; - size_t l_response_dec_size_max = a_response_size ? a_response_size * 2 + 16 : 0; - char * l_response_dec = a_response_size ? DAP_NEW_Z_SIZE(char, l_response_dec_size_max) : NULL; - size_t l_response_dec_size = 0; - if(a_response_size) - l_response_dec_size = dap_enc_decode(l_client_pvt->session_key, - a_response, a_response_size, - l_response_dec, l_response_dec_size_max, - DAP_ENC_DATA_TYPE_RAW); - - l_exec_cmd_request->response = l_response_dec; - l_exec_cmd_request->response_size = l_response_dec_size; -#ifdef DAP_OS_WINDOWS - WakeConditionVariable(&l_exec_cmd_request->wait_cond); - LeaveCriticalSection(&l_exec_cmd_request->wait_crit_sec); -#else - pthread_cond_signal(&l_exec_cmd_request->wait_cond); - pthread_mutex_unlock(&l_exec_cmd_request->wait_mutex); -#endif -} - -static void s_exec_cmd_error_handler(int a_error_code, void *a_arg){ - struct exec_cmd_request * l_exec_cmd_request = (struct exec_cmd_request *)a_arg; -#ifdef DAP_OS_WINDOWS - EnterCriticalSection(&l_exec_cmd_request->wait_crit_sec); - l_exec_cmd_request->response = a_error_code; - WakeConditionVariable(&l_exec_cmd_request->wait_cond); - LeaveCriticalSection(&l_exec_cmd_request->wait_crit_sec); -#else - pthread_mutex_lock(&l_exec_cmd_request->wait_mutex); - // l_exec_cmd_request->response = a_error_code; - pthread_cond_signal(&l_exec_cmd_request->wait_cond); - pthread_mutex_unlock(&l_exec_cmd_request->wait_mutex); -#endif -} - - -static int dap_chain_exec_cmd_list_wait(struct exec_cmd_request *a_exec_cmd_request, int a_timeout_ms) { -#ifdef DAP_OS_WINDOWS - EnterCriticalSection(&a_exec_cmd_request->wait_crit_sec); - if (a_exec_cmd_request->response) - return LeaveCriticalSection(&a_exec_cmd_request->wait_crit_sec), a_exec_cmd_request->response; - while (!a_exec_cmd_request->response) { - if ( !SleepConditionVariableCS(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_crit_sec, a_timeout_ms) ) - a_exec_cmd_request->response = GetLastError() == ERROR_TIMEOUT ? ERR_WAIT_TIMEOUT : ERR_UNKNOWN; - } - return LeaveCriticalSection(&a_exec_cmd_request->wait_crit_sec), a_exec_cmd_request->response; -#else - pthread_mutex_lock(&a_exec_cmd_request->wait_mutex); - if(a_exec_cmd_request->response) { - pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex); - return EXEC_CMD_OK; - } - struct timespec l_cond_timeout; -#ifdef DAP_OS_DARWIN - l_cond_timeout = (struct timespec){ .tv_sec = a_timeout_ms / 1000 }; -#else - clock_gettime(CLOCK_MONOTONIC, &l_cond_timeout); - l_cond_timeout.tv_sec += a_timeout_ms / 1000; -#endif - while (!a_exec_cmd_request->response) { - switch ( -#ifdef DAP_OS_DARWIN - pthread_cond_timedwait_relative_np(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_mutex, &l_cond_timeout) -#else - pthread_cond_timedwait(&a_exec_cmd_request->wait_cond, &a_exec_cmd_request->wait_mutex, &l_cond_timeout) -#endif - ) { - case ETIMEDOUT: - a_exec_cmd_request->response = "ERR_WAIT_TIMEOUT"; - default: - break; - } - } - pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex); - return EXEC_CMD_ERR_WAIT_TIMEOUT; -#endif -} - int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; if (!dap_json_rpc_exec_cmd_inited()) { @@ -8742,101 +8608,8 @@ int com_exec_cmd(int argc, char **argv, void **reply) { DAP_DELETE(node_info); return -8; } - - size_t l_request_data_size = 0; - char* l_request_data_str = dap_json_rpc_request_to_http_str(l_request, &l_request_data_size); - - const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d", - l_client_internal->client->active_channels, l_client_internal->session_key_type, - l_client_internal->session_key_block_size, 0); - - bool is_query_enc = true; - const char * a_query = "type=tcp,maxconn=4"; - size_t l_sub_url_size = l_sub_url ? strlen(l_sub_url) : 0; - size_t l_query_size = a_query ? strlen(a_query) : 0; - - size_t l_sub_url_enc_size_max = l_sub_url_size ? (5 * l_sub_url_size + 16) : 0; - char *l_sub_url_enc = l_sub_url_size ? DAP_NEW_Z_SIZE(char, l_sub_url_enc_size_max + 1) : NULL; - - size_t l_query_enc_size_max = (is_query_enc) ? (l_query_size * 5 + 16) : l_query_size; - char *l_query_enc = - (is_query_enc) ? (l_query_size ? DAP_NEW_Z_SIZE(char, l_query_enc_size_max + 1) : NULL) : (char*) a_query; - - size_t l_request_enc_size_max = l_request_data_size ? l_request_data_size * 2 + 16 : 0; - char * l_request_enc = l_request_data_size ? DAP_NEW_Z_SIZE(char, l_request_enc_size_max + 1) : NULL; - size_t l_request_enc_size = 0; - - // l_client_internal->request_response_callback = dap_json_rpc_response_accepted; - // l_client_internal->request_error_callback = dap_json_rpc_error_callback; - l_client_internal->is_encrypted = true; - dap_enc_data_type_t l_enc_type; - - if(l_client_internal->uplink_protocol_version >= 21) - l_enc_type = DAP_ENC_DATA_TYPE_B64_URLSAFE; - else - l_enc_type = DAP_ENC_DATA_TYPE_B64; - - if(l_sub_url_size) - dap_enc_code(l_client_internal->session_key, - l_sub_url, l_sub_url_size, - l_sub_url_enc, l_sub_url_enc_size_max, - l_enc_type); - - if(is_query_enc && l_query_size) - dap_enc_code(l_client_internal->session_key, - a_query, l_query_size, - l_query_enc, l_query_enc_size_max, - l_enc_type); - - if(l_request_data_size) - l_request_enc_size = dap_enc_code(l_client_internal->session_key, - l_request_data_str, l_request_data_size, - l_request_enc, l_request_enc_size_max, - DAP_ENC_DATA_TYPE_RAW); - - size_t l_path_size= l_query_enc_size_max + l_sub_url_enc_size_max + 1; - const char * path = "exec_cmd"; - char *l_path = DAP_NEW_Z_SIZE(char, l_path_size); - l_path[0] = '\0'; - if(path) { - if(l_sub_url_size){ - if(l_query_size){ - snprintf(l_path, l_path_size, "%s/%s?%s", path?path:"", - l_sub_url_enc?l_sub_url_enc:"", - l_query_enc?l_query_enc:""); - }else{ - snprintf(l_path, l_path_size, "%s/%s", path, l_sub_url_enc); - } - } else { - dap_stpcpy(l_path, path); - } - } - - size_t l_size_required = l_client_internal->session_key_id ? strlen(l_client_internal->session_key_id) + 40 : 40; - char *l_custom = DAP_NEW_Z_SIZE(char, l_size_required); - size_t l_off = snprintf(l_custom, l_size_required, "KeyID: %s\r\n", l_client_internal->session_key_id ? l_client_internal->session_key_id : "NULL"); - if (l_client_internal->is_close_session) - snprintf(l_custom + l_off, l_size_required - l_off, "%s\r\n", "SessionCloseAfterRequest: true"); - - struct exec_cmd_request* l_exec_cmd_request = s_exec_cmd_request_init(l_client_internal); - - l_client_internal->http_client = dap_client_http_request(l_client_internal->worker, l_client_internal->client->link_info.uplink_addr, - l_client_internal->client->link_info.uplink_port, - "POST", "application/json", - l_path, l_request_enc, l_request_enc_size, NULL, - s_exec_cmd_response_handler, s_exec_cmd_error_handler, l_exec_cmd_request, l_custom); - - int l_ret = dap_chain_exec_cmd_list_wait(l_exec_cmd_request, 10000); - // switch (l_ret) { - // case EXEC_CMD_OK: { - json_object_array_add(*a_json_arr_reply, json_object_new_string(l_exec_cmd_request->response)); - // } - // } - DAP_DEL_Z(l_sub_url_enc); - DAP_DEL_Z(l_custom); - DAP_DEL_Z(l_query_enc); - DAP_DEL_Z(l_path); - DAP_DEL_Z(l_request_enc); - json_object_array_add(*a_json_arr_reply, json_object_new_string("DONE")); + char * l_response = NULL; + dap_json_rpc_request_send(l_client_internal, l_request, l_response); + json_object_array_add(*a_json_arr_reply, json_object_new_string(l_response)); return 0; } -- GitLab From 67b27b9e8a3b94102bd535233ab70b6ffffbb300 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 16:40:39 +0700 Subject: [PATCH 12/33] [*] refactor --- modules/net/dap_chain_node_cli_cmd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index eb39d5604e..f6b4ddb1b9 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8602,14 +8602,22 @@ int com_exec_cmd(int argc, char **argv, void **reply) { //wait handshake int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); if (res) { - // dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); - // clean client struct + log_it(L_ERROR, "No response from node"); + dap_json_rpc_error_add(-8, "No reponse from node"); dap_chain_node_client_close_unsafe(l_node_client); DAP_DELETE(node_info); return -8; } + + //send response char * l_response = NULL; - dap_json_rpc_request_send(l_client_internal, l_request, l_response); - json_object_array_add(*a_json_arr_reply, json_object_new_string(l_response)); + dap_json_rpc_request_send(l_client_internal, l_request, &l_response); + + if (l_response) { + json_object * l_json_response = json_tokener_parse(l_response); + json_object_array_add(*a_json_arr_reply, l_json_response); + } else { + json_object_array_add(*a_json_arr_reply, json_object_new_string("Empty reply")); + } return 0; } -- GitLab From 3b4bb15f76f9df08afa9f86fce6b480d61d3574c Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 20:43:03 +0700 Subject: [PATCH 13/33] [*] fix build --- modules/net/dap_chain_node_cli_cmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 0ebe61d385..4f3159a478 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8555,7 +8555,7 @@ static void s_stage_connected_callback(dap_client_t* a_client, void * a_arg) { int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; if (!dap_json_rpc_exec_cmd_inited()) { - dap_json_rpc_error_add(-1, "Json-rpc module doesn't inited, check confings"); + dap_json_rpc_error_add(*a_json_arr_reply, -1, "Json-rpc module doesn't inited, check confings"); return -1; } @@ -8565,7 +8565,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_str); dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_str); if (!l_cmd_arg_str || ! l_addr_str || !l_net_str) { - dap_json_rpc_error_add(-1, "Command exec_cmd require args -cmd, -addr, -net"); + dap_json_rpc_error_add(*a_json_arr_reply, -1, "Command exec_cmd require args -cmd, -addr, -net"); return -2; } dap_chain_net_t* l_net = NULL; @@ -8601,7 +8601,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, timeout_ms); if (res) { log_it(L_ERROR, "No response from node"); - dap_json_rpc_error_add(-8, "No reponse from node"); + dap_json_rpc_error_add(*a_json_arr_reply, -8, "No reponse from node"); dap_chain_node_client_close_unsafe(l_node_client); DAP_DELETE(node_info); return -8; -- GitLab From 13467735dca93641e7fe516e16b9aa8b037e6e09 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 21:45:49 +0700 Subject: [PATCH 14/33] [*] merge --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 2369891071..0acc278966 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 2369891071a68216ad58c42627fe24dcfa96a859 +Subproject commit 0acc278966e3f53ed62941660edb5dcf01c57244 -- GitLab From b4879381fc6f37364e5e5b88a716af16364d3b98 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 21:50:01 +0700 Subject: [PATCH 15/33] [*] some fix --- modules/net/dap_chain_node_cli_cmd.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 4f3159a478..e8b3e3a485 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8586,8 +8586,11 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_chain_node_addr_from_str(&l_node_addr, l_addr_str); dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, NULL); - if(!node_info) + if(!node_info) { + log_it(L_DEBUG, "Can't find node with addr: %s", l_node_addr); + dap_json_rpc_error_add(*a_json_arr_reply, -6, "Can't find node with addr: %s", l_node_addr); return -6; + } int timeout_ms = 5000; //5 sec = 5000 ms dap_chain_node_client_t * l_node_client = dap_chain_node_client_create(l_net, node_info, NULL, NULL); -- GitLab From d955cbf324fa2961dfee9d28db8713a79fa4740c Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 21:50:36 +0700 Subject: [PATCH 16/33] [*] sub up --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 0acc278966..a939eaa5aa 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 0acc278966e3f53ed62941660edb5dcf01c57244 +Subproject commit a939eaa5aac824fc208fa48b9943a6ef977090ec -- GitLab From 2476594e55ee25eb4b0be96b0ec083062d465b28 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Tue, 22 Oct 2024 23:46:49 +0700 Subject: [PATCH 17/33] [*] fix --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dap-sdk b/dap-sdk index a939eaa5aa..af95f2d61f 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit a939eaa5aac824fc208fa48b9943a6ef977090ec +Subproject commit af95f2d61ffca0151c825a2e7f468971397748da diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index e8b3e3a485..84a160c948 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8587,8 +8587,8 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, NULL); if(!node_info) { - log_it(L_DEBUG, "Can't find node with addr: %s", l_node_addr); - dap_json_rpc_error_add(*a_json_arr_reply, -6, "Can't find node with addr: %s", l_node_addr); + log_it(L_DEBUG, "Can't find node with addr: %s", l_addr_str); + dap_json_rpc_error_add(*a_json_arr_reply, -6, "Can't find node with addr: %s", l_addr_str); return -6; } int timeout_ms = 5000; //5 sec = 5000 ms @@ -8620,5 +8620,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { } else { json_object_array_add(*a_json_arr_reply, json_object_new_string("Empty reply")); } + + dap_chain_node_client_close_mt(l_node_client); return 0; } -- GitLab From f5ff3d12df37f470f8d9eda92db334535e778f45 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 23 Oct 2024 00:13:31 +0700 Subject: [PATCH 18/33] [*] fix err --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dap-sdk b/dap-sdk index af95f2d61f..6a4bd9f931 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit af95f2d61ffca0151c825a2e7f468971397748da +Subproject commit 6a4bd9f931e0645695c83e98113bbbaf0ae9d0c1 diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 84a160c948..7852ab7015 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8611,12 +8611,11 @@ int com_exec_cmd(int argc, char **argv, void **reply) { } //send response - char * l_response = NULL; + json_object * l_response = NULL; dap_json_rpc_request_send(l_client_internal, l_request, &l_response); if (l_response) { - json_object * l_json_response = json_tokener_parse(l_response); - json_object_array_add(*a_json_arr_reply, l_json_response); + json_object_array_add(*a_json_arr_reply, l_response); } else { json_object_array_add(*a_json_arr_reply, json_object_new_string("Empty reply")); } -- GitLab From 323238c69cae44e7e535f35975c6e3e059d706eb Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 23 Oct 2024 11:23:04 +0700 Subject: [PATCH 19/33] [*] sub up --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 6a4bd9f931..142a1919f0 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 6a4bd9f931e0645695c83e98113bbbaf0ae9d0c1 +Subproject commit 142a1919f08e19970bd68e898ab6061118fe492e -- GitLab From acad97f0ba3a3ff0a5e9c9e35566e8480f48a8d4 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Tue, 29 Oct 2024 16:28:36 +0700 Subject: [PATCH 20/33] [*] err handler --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 142a1919f0..75cf3ef4f5 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 142a1919f08e19970bd68e898ab6061118fe492e +Subproject commit 75cf3ef4f567f89095bcb5ad6da42f5dce4478a4 -- GitLab From 5d57d133fb9f7ccc69af5631ec4ecbb844945cf0 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 30 Oct 2024 12:42:18 +0700 Subject: [PATCH 21/33] [*] fix leaks --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dap-sdk b/dap-sdk index 142a1919f0..4d7dec28f7 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 142a1919f08e19970bd68e898ab6061118fe492e +Subproject commit 4d7dec28f790622ac2f729fbad1d95dec97c2cfa diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 7852ab7015..5bd7ed2db1 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8606,7 +8606,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { log_it(L_ERROR, "No response from node"); dap_json_rpc_error_add(*a_json_arr_reply, -8, "No reponse from node"); dap_chain_node_client_close_unsafe(l_node_client); - DAP_DELETE(node_info); + DAP_DEL_Z(node_info); return -8; } @@ -8619,7 +8619,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { } else { json_object_array_add(*a_json_arr_reply, json_object_new_string("Empty reply")); } - - dap_chain_node_client_close_mt(l_node_client); + DAP_DEL_Z(node_info); + dap_json_rpc_request_free(l_request); return 0; } -- GitLab From 9c6ba19324f9c5879d694b9583355c51292fb7f1 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 30 Oct 2024 12:43:05 +0700 Subject: [PATCH 22/33] [*] sub up --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 4d7dec28f7..35005eecc0 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 4d7dec28f790622ac2f729fbad1d95dec97c2cfa +Subproject commit 35005eecc017edce57b728de65d06a041da1a842 -- GitLab From 26e1282e0cbf259521ed1ba5a2717d92db034b64 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 30 Oct 2024 15:48:41 +0700 Subject: [PATCH 23/33] [*] sub up --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 88a46f20ed..ceab8de09d 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 88a46f20ed096abaf50eacf5c991b6a2c552ca9e +Subproject commit ceab8de09dbdec712c17ad80b7bac316083a6a92 -- GitLab From d631634c8c94d544070b8ad2ad3b62a26d803630 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 30 Oct 2024 15:55:50 +0700 Subject: [PATCH 24/33] [*] fix --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index ceab8de09d..d4989c7e44 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit ceab8de09dbdec712c17ad80b7bac316083a6a92 +Subproject commit d4989c7e448a6da993e27d084fab974663721f33 -- GitLab From a57550f3f5c511b74de38aec182ef5c07607eb7e Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 31 Oct 2024 14:03:51 +0700 Subject: [PATCH 25/33] [*] fix lock --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index d4989c7e44..d9be7bc026 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit d4989c7e448a6da993e27d084fab974663721f33 +Subproject commit d9be7bc026e42030d847ee2a645436be2da1e26c -- GitLab From 71fa557159b3525e6f448ec032e514941c2032a7 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 31 Oct 2024 14:16:39 +0700 Subject: [PATCH 26/33] ...| --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index d9be7bc026..6e6c77c255 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit d9be7bc026e42030d847ee2a645436be2da1e26c +Subproject commit 6e6c77c255089cf55022f94065f48d785c92deaa -- GitLab From dacfb1ddbedc2e066ac4d4b076ccffb2c07ad719 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Sat, 2 Nov 2024 13:25:13 +0700 Subject: [PATCH 27/33] [*] fix error --- modules/net/dap_chain_node_cli_cmd.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index c514dc77e3..b213a6f1cf 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8768,6 +8768,17 @@ static void s_stage_connected_callback(dap_client_t* a_client, void * a_arg) { } } +static void s_stage_connected_error_callback(dap_client_t* a_client, void * a_arg) { + dap_chain_node_client_t *l_node_client = DAP_CHAIN_NODE_CLIENT(a_client); + UNUSED(a_arg); + if(l_node_client) { + pthread_mutex_lock(&l_node_client->wait_mutex); + l_node_client->state = NODE_CLIENT_STATE_ERROR; + pthread_cond_signal(&l_node_client->wait_cond); + pthread_mutex_unlock(&l_node_client->wait_mutex); + } +} + int com_exec_cmd(int argc, char **argv, void **reply) { json_object ** a_json_arr_reply = (json_object **) reply; if (!dap_json_rpc_exec_cmd_inited()) { @@ -8811,7 +8822,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_chain_node_client_t * l_node_client = dap_chain_node_client_create(l_net, node_info, NULL, NULL); //handshake - l_node_client->client = dap_client_new(NULL, l_node_client); + l_node_client->client = dap_client_new(s_stage_connected_error_callback, l_node_client); l_node_client->client->_inheritor = l_node_client; dap_client_set_uplink_unsafe(l_node_client->client, &l_node_client->info->address, node_info->ext_host, node_info->ext_port); dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(l_node_client->client); -- GitLab From 5933c16992d1289f38d988f244df3ddc952ee635 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 6 Nov 2024 12:42:49 +0700 Subject: [PATCH 28/33] [*] add net check --- modules/net/dap_chain_node_cli_cmd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index b213a6f1cf..189ae08989 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8797,6 +8797,10 @@ int com_exec_cmd(int argc, char **argv, void **reply) { } dap_chain_net_t* l_net = NULL; l_net = dap_chain_net_by_name(l_net_str); + if (!l_net) [ + dap_json_rpc_error_add(*a_json_arr_reply, -1, "Can't find net %s", l_net_str); + return -3; + ] dap_json_rpc_params_t * params = dap_json_rpc_params_create(); char *l_cmd_str = dap_strdup(l_cmd_arg_str); -- GitLab From 0f9268ee100fe56e9a76fe4fadd6b56006ce58c8 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 6 Nov 2024 12:51:46 +0700 Subject: [PATCH 29/33] [*] fix --- modules/net/dap_chain_node_cli_cmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 189ae08989..eb9e4c8fcd 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8792,13 +8792,13 @@ int com_exec_cmd(int argc, char **argv, void **reply) { dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_str); dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_str); if (!l_cmd_arg_str || ! l_addr_str || !l_net_str) { - dap_json_rpc_error_add(*a_json_arr_reply, -1, "Command exec_cmd require args -cmd, -addr, -net"); + dap_json_rpc_error_add(*a_json_arr_reply, -2, "Command exec_cmd require args -cmd, -addr, -net"); return -2; } dap_chain_net_t* l_net = NULL; l_net = dap_chain_net_by_name(l_net_str); if (!l_net) [ - dap_json_rpc_error_add(*a_json_arr_reply, -1, "Can't find net %s", l_net_str); + dap_json_rpc_error_add(*a_json_arr_reply, -3, "Can't find net %s", l_net_str); return -3; ] @@ -8841,7 +8841,7 @@ int com_exec_cmd(int argc, char **argv, void **reply) { return -8; } - //send response + //send request json_object * l_response = NULL; dap_json_rpc_request_send(l_client_internal, l_request, &l_response); -- GitLab From c93a3bbaad03587cb80aa1c905ed82b92146cd29 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 6 Nov 2024 12:56:35 +0700 Subject: [PATCH 30/33] [*] fix build --- modules/net/dap_chain_node_cli_cmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index eb9e4c8fcd..d57ed48c6c 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8797,10 +8797,10 @@ int com_exec_cmd(int argc, char **argv, void **reply) { } dap_chain_net_t* l_net = NULL; l_net = dap_chain_net_by_name(l_net_str); - if (!l_net) [ + if (!l_net){ dap_json_rpc_error_add(*a_json_arr_reply, -3, "Can't find net %s", l_net_str); return -3; - ] + } dap_json_rpc_params_t * params = dap_json_rpc_params_create(); char *l_cmd_str = dap_strdup(l_cmd_arg_str); -- GitLab From 0e5ba2e11a2e705705ba4648b535496957810ee6 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Wed, 6 Nov 2024 14:46:48 +0700 Subject: [PATCH 31/33] [*] subup --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 6e6c77c255..2e8eae0cc0 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 6e6c77c255089cf55022f94065f48d785c92deaa +Subproject commit 2e8eae0cc0687efac9a018576361e22703a2407b -- GitLab From 61482b4ee5ee5d2b72b936fb4784d9445b462017 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 7 Nov 2024 11:36:31 +0700 Subject: [PATCH 32/33] [*] subup --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 2e8eae0cc0..39a40320ea 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 2e8eae0cc0687efac9a018576361e22703a2407b +Subproject commit 39a40320ead624929297216eae957872450fef52 -- GitLab From ac769fa45cf7c6577babbe6aa64904b21fb8a1ac Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 7 Nov 2024 16:19:23 +0700 Subject: [PATCH 33/33] [*] subup --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 39a40320ea..9898f5774d 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 39a40320ead624929297216eae957872450fef52 +Subproject commit 9898f5774dea5c5dfaffce489e79611465efb302 -- GitLab