From 4502bfb9d80329c152df62f3036b5d61881fbe96 Mon Sep 17 00:00:00 2001 From: "alexey.stratulat" <alexey.stratulat@demlabs.net> Date: Tue, 18 Jun 2024 08:29:37 +0000 Subject: [PATCH] Bugfix 11833 --- modules/net/dap_chain_net_balancer.c | 47 ++++++++++++++--------- modules/net/dap_chain_net_node_list.c | 4 +- modules/net/srv/dap_chain_net_srv_geoip.c | 3 +- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 47b69087d4..c0a5e03f68 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -140,15 +140,42 @@ static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_ne } } +/** + * @brief callback to error in balancer request preparing + * @param a_request - balancer request + * @param a_host_addr - host addr + * @param a_errno - error code + */ +static void s_balancer_link_prepare_error(dap_balancer_link_request_t *a_request, const char *a_host_addr, uint16_t a_host_port, int a_errno) +{ + struct json_object *l_json = s_balancer_states_json_collect(a_request->net, a_host_addr, a_host_port); + char l_err_str[512] = { '\0' }; + snprintf(l_err_str, sizeof(l_err_str) + , "Link from balancer %s:%u in net %s can't be prepared, errno %d" + , a_host_addr, a_host_port, a_request->net->pub.name, a_errno); + log_it(L_WARNING, "%s", l_err_str); + json_object_object_add(l_json, "errorMessage", json_object_new_string(l_err_str)); + dap_notify_server_send_mt(json_object_get_string(l_json)); + json_object_put(l_json); +} + /** * @brief callback to success http balancer request * @param a_response - response * @param a_response_size - a response size * @param a_arg - callback arg (l_balancer_request) */ -void s_http_balancer_link_prepare_success(void *a_response, size_t a_response_size, void *a_arg) +void s_http_balancer_link_prepare_success(void *a_response, + size_t a_response_size, void *a_arg, http_status_code_t a_response_code) { dap_balancer_link_request_t *l_balancer_request = (dap_balancer_link_request_t *)a_arg; + if (a_response_code != 200) { + log_it(L_ERROR, "The server responded with code %d. It is not possible to install the link.", a_response_code); + s_balancer_link_prepare_error(l_balancer_request, l_balancer_request->host_addr, l_balancer_request->host_port, a_response_code); + l_balancer_request->request_info->request_time = dap_time_now(); + DAP_DELETE(l_balancer_request); + return; + } dap_chain_net_links_t *l_link_full_node_list = (dap_chain_net_links_t *)a_response; size_t l_response_size_need = sizeof(dap_chain_net_links_t) + (sizeof(dap_link_info_t) * l_balancer_request->required_links_count); @@ -162,24 +189,6 @@ void s_http_balancer_link_prepare_success(void *a_response, size_t a_response_si DAP_DELETE(l_balancer_request); } -/** - * @brief callback to error in balancer request preparing - * @param a_request - balancer request - * @param a_host_addr - host addr - * @param a_errno - error code - */ -static void s_balancer_link_prepare_error(dap_balancer_link_request_t *a_request, const char *a_host_addr, uint16_t a_host_port, int a_errno) -{ - struct json_object *l_json = s_balancer_states_json_collect(a_request->net, a_host_addr, a_host_port); - char l_err_str[512] = { '\0' }; - snprintf(l_err_str, sizeof(l_err_str) - , "Link from balancer %s:%u in net %s can't be prepared, errno %d" - , a_host_addr, a_host_port, a_request->net->pub.name, a_errno); - log_it(L_WARNING, "%s", l_err_str); - json_object_object_add(l_json, "errorMessage", json_object_new_string(l_err_str)); - dap_notify_server_send_mt(json_object_get_string(l_json)); - json_object_put(l_json); -} /** * @brief callback to error in http balancer request preparing diff --git a/modules/net/dap_chain_net_node_list.c b/modules/net/dap_chain_net_node_list.c index 85d7f8228f..87257742cb 100644 --- a/modules/net/dap_chain_net_node_list.c +++ b/modules/net/dap_chain_net_node_list.c @@ -167,7 +167,9 @@ void dap_chain_net_node_check_http_issue_link(dap_http_simple_t *a_http_simple, dap_http_simple_reply(a_http_simple, &l_response, sizeof(uint8_t)); } -static void s_net_node_link_prepare_success(void *a_response, size_t a_response_size, void *a_arg) { +static void s_net_node_link_prepare_success(void *a_response, size_t a_response_size, void *a_arg, + http_status_code_t http_status_code) { + (void)http_status_code; struct node_link_request *l_node_list_request = (struct node_link_request *)a_arg; pthread_mutex_lock(&l_node_list_request->wait_mutex); l_node_list_request->response = *(uint8_t*)a_response; diff --git a/modules/net/srv/dap_chain_net_srv_geoip.c b/modules/net/srv/dap_chain_net_srv_geoip.c index a5ac230d49..633234a295 100644 --- a/modules/net/srv/dap_chain_net_srv_geoip.c +++ b/modules/net/srv/dap_chain_net_srv_geoip.c @@ -46,7 +46,8 @@ static char *s_geoip_db_file_path = NULL; // share/geoip/GeoLite2-City.mmdb * @param a_response_size * @param a_obj */ -static void m_request_getip_response(void * a_response, size_t a_response_size, void * a_obj) +static void m_request_getip_response(void * a_response, size_t a_response_size, void * a_obj, + http_status_code_t http_status_code) { char *l_addr = (char *) a_obj; //printf("m_request_getip_response %s\n", a_response); -- GitLab