From 1ceb8c139980da85fbd17f9a95abcbba9c7aa9ec Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Thu, 30 Jul 2020 18:01:36 +0300 Subject: [PATCH] [*] Synchro partially debugged --- dap-sdk/net/client/dap_client_http.c | 4 +++ dap-sdk/net/client/dap_client_pvt.c | 5 ++++ dap-sdk/net/server/enc_server/dap_enc_http.c | 3 -- dap-sdk/net/stream/ch/dap_stream_ch.c | 4 +++ modules/net/dap_chain_net.c | 30 ++++++++++---------- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/dap-sdk/net/client/dap_client_http.c b/dap-sdk/net/client/dap_client_http.c index 2371d6cd58..baeef39724 100644 --- a/dap-sdk/net/client/dap_client_http.c +++ b/dap-sdk/net/client/dap_client_http.c @@ -341,6 +341,10 @@ void* dap_client_http_request_custom(const char *a_uplink_addr, uint16_t a_uplin // create socket int l_socket = socket( PF_INET, SOCK_STREAM, 0); + if (l_socket == -1) { + log_it(L_ERROR, "Error %d with socket create", errno); + return NULL; + } // set socket param int buffsize = DAP_CLIENT_HTTP_RESPONSE_SIZE_MAX; #ifdef _WIN32 diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index ed75611c32..8455364d9c 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -439,6 +439,11 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) log_it(L_INFO, "Go to stage STREAM_SESSION: process the state ops"); a_client_pvt->stream_socket = socket( PF_INET, SOCK_STREAM, 0); + if (a_client_pvt->stream_socket == -1) { + log_it(L_ERROR, "Error %d with socket create", errno); + a_client_pvt->stage_status = STAGE_STATUS_ERROR; + break; + } #ifdef _WIN32 { int buffsize = 65536; diff --git a/dap-sdk/net/server/enc_server/dap_enc_http.c b/dap-sdk/net/server/enc_server/dap_enc_http.c index 79bbd50a90..e5513c1216 100644 --- a/dap-sdk/net/server/enc_server/dap_enc_http.c +++ b/dap-sdk/net/server/enc_server/dap_enc_http.c @@ -124,9 +124,6 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg) dap_enc_key_delete(msrln_key); *return_code = Http_Status_OK; - - - *return_code = Http_Status_Unauthorized; } else{ log_it(L_ERROR,"Wrong path '%s' in the request to enc_http module",cl_st->http->url_path); *return_code = Http_Status_NotFound; diff --git a/dap-sdk/net/stream/ch/dap_stream_ch.c b/dap-sdk/net/stream/ch/dap_stream_ch.c index 4c4a8148c2..8a93a0106f 100644 --- a/dap-sdk/net/stream/ch/dap_stream_ch.c +++ b/dap-sdk/net/stream/ch/dap_stream_ch.c @@ -132,6 +132,10 @@ void dap_stream_ch_delete(dap_stream_ch_t *a_ch) pthread_mutex_lock(&s_ch_table_lock); struct dap_stream_ch_table_t *l_ret;; HASH_FIND_PTR(s_ch_table, a_ch, l_ret); + if (!l_ret) { + pthread_mutex_unlock(&s_ch_table_lock); + return; + } HASH_DEL(s_ch_table, l_ret); pthread_mutex_unlock(&s_ch_table_lock); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index bcc2ad7616..b1fb31ee51 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -362,7 +362,7 @@ static int s_net_states_proc(dap_chain_net_t * l_net) case NODE_ROLE_ARCHIVE: case NODE_ROLE_CELL_MASTER: { // Add other root nodes as synchronization links - while (dap_list_length(l_pvt_net->links_info) <= s_max_links_count) { + while (dap_list_length(l_pvt_net->links_info) < s_max_links_count) { int i = rand() % l_pvt_net->seed_aliases_count; dap_chain_node_addr_t *l_link_addr = dap_chain_node_alias_find(l_net, l_pvt_net->seed_aliases[i]); dap_chain_node_info_read(l_net, l_link_addr); @@ -373,32 +373,30 @@ static int s_net_states_proc(dap_chain_net_t * l_net) case NODE_ROLE_LIGHT: default: { // Get DNS request result from root nodes as synchronization links - while (dap_list_length(l_pvt_net->links_info) <= s_max_links_count) { + while (dap_list_length(l_pvt_net->links_info) < s_max_links_count) { int i = rand() % l_pvt_net->seed_aliases_count; dap_chain_node_addr_t *l_remote_addr = dap_chain_node_alias_find(l_net, l_pvt_net->seed_aliases[i]); dap_chain_node_info_t *l_remote_node_info = dap_chain_node_info_read(l_net, l_remote_addr); dap_chain_node_info_t *l_link_node_info = DAP_NEW_Z(dap_chain_node_info_t); - int res = dap_dns_client_get_addr(l_remote_node_info->hdr.ext_addr_v4.s_addr, l_net->pub.name, l_link_node_info); + int res = 0;//dap_dns_client_get_addr(l_remote_node_info->hdr.ext_addr_v4.s_addr, l_net->pub.name, l_link_node_info); + memcpy(l_link_node_info, l_remote_node_info, sizeof(dap_chain_node_info_t)); DAP_DELETE(l_remote_node_info); if (res) { DAP_DELETE(l_link_node_info); } else { l_pvt_net->links_info = dap_list_append(l_pvt_net->links_info, l_link_node_info); } + if (l_pvt_net->state_target == NET_STATE_OFFLINE) { + l_pvt_net->state = NET_STATE_OFFLINE; + break; + } } } break; } - if (l_pvt_net->state_target > NET_STATE_LINKS_PREPARE) { - if (l_pvt_net->links_info) { // If links are present - l_pvt_net->state = NET_STATE_LINKS_CONNECTING; - log_it(L_DEBUG, "Prepared %u links, start to establish them", dap_list_length(l_pvt_net->links_info)); - } else { - log_it(L_WARNING, "No links for connecting, try again to find it"); - struct timespec l_sleep = {3, 0}; - nanosleep(&l_sleep, NULL); - } - }else { - log_it(L_WARNING, "Target state is NET_STATE_LINKS_PREPARE? Realy?"); + if (l_pvt_net->state_target != NET_STATE_OFFLINE) { + l_pvt_net->state = NET_STATE_LINKS_CONNECTING; + log_it(L_DEBUG, "Prepared %u links, start to establish them", dap_list_length(l_pvt_net->links_info)); + } else { l_pvt_net->state = l_pvt_net->state_target = NET_STATE_OFFLINE; } } break; @@ -428,8 +426,10 @@ static int s_net_states_proc(dap_chain_net_t * l_net) } } if (l_pvt_net->links) { // We have at least one working link - l_pvt_net->state = NET_STATE_LINKS_ESTABLISHED; + l_pvt_net->state = NET_STATE_SYNC_GDB; } else { // Try to find another links + struct timespec l_sleep = {3, 0}; + nanosleep(&l_sleep, NULL); l_pvt_net->state = NET_STATE_OFFLINE; } } break; -- GitLab