From 83dc0d91d3c0cf3e4d1fa0ee8645d028e142948e Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Mon, 28 Sep 2020 16:05:46 +0700
Subject: [PATCH] [*] Dirty fix for non-working DNS situation

---
 modules/net/dap_chain_net.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 3130e4e291..10061b1e3e 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -417,7 +417,9 @@ 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) {
+                            int l_max_tries = 5;
+                            int l_tries =0;
+                            while (dap_list_length(l_pvt_net->links_info) < s_max_links_count && l_tries < l_max_tries) {
                                 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);
@@ -437,7 +439,28 @@ static int s_net_states_proc(dap_chain_net_t * l_net)
                                     l_pvt_net->state = NET_STATE_OFFLINE;
                                     break;
                                 }
+                                l_tries++;
                             }
+
+                            if (!l_pvt_net->links){
+                                for (int i = 0; i < MIN(s_max_links_count, l_pvt_net->seed_aliases_count); i++) {
+                                    dap_chain_node_addr_t *l_link_addr = dap_chain_node_alias_find(l_net, l_pvt_net->seed_aliases[i]);
+                                    if (l_link_addr->uint64 == l_own_addr) {
+                                        continue;   // Do not link with self
+                                    }
+                                    dap_chain_node_info_t *l_link_node_info = dap_chain_node_info_read(l_net, l_link_addr);
+                                    if(l_link_node_info) {
+                                        l_pvt_net->links_info = dap_list_append(l_pvt_net->links_info, l_link_node_info);
+                                    }
+                                    else{
+                                        log_it(L_WARNING, "Not found link "NODE_ADDR_FP_STR" in the node list", NODE_ADDR_FPS_ARGS(l_link_addr));
+                                    }
+                                    if (dap_list_length(l_pvt_net->links_info) >= s_max_links_count) {
+                                        break;
+                                    }
+                                }
+                            }
+
                         } break;
                     }
                 } else {
-- 
GitLab