From a05ba53d1402b1427eefc36ac69067e3b9745054 Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Fri, 16 Feb 2024 14:24:21 +0300
Subject: [PATCH] [*] Uplinks propagation for clusters

---
 modules/net/dap_chain_node_client.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index fadccfe536..eac80ec86b 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -268,8 +268,17 @@ static void s_stage_connected_callback(dap_client_t *a_client, void *a_arg)
             l_node_client->callbacks.connected(l_node_client, l_node_client->callbacks_arg);
         dap_stream_ch_chain_net_pkt_hdr_t l_announce = { .version = DAP_STREAM_CH_CHAIN_NET_PKT_VERSION,
                                                          .net_id  = l_node_client->net->pub.id };
+        // Announce net on downlink
         dap_client_write_unsafe(a_client, 'N', DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE,
                                          &l_announce, sizeof(l_announce));
+        // Add uplink to clusters
+        dap_stream_node_addr_t *l_uplink_addr = &l_node_client->info->hdr.address;
+        dap_global_db_cluster_t *it;
+        DL_FOREACH(dap_global_db_instance_get_default()->clusters, it)
+            if (dap_cluster_member_find_unsafe(it->role_cluster, l_uplink_addr))
+                dap_cluster_member_add(it->links_cluster, l_uplink_addr, 0, NULL);
+        dap_chain_net_add_cluster_link(l_node_client->net, l_uplink_addr);
+
         pthread_mutex_lock(&l_node_client->wait_mutex);
         l_node_client->state = NODE_CLIENT_STATE_ESTABLISHED;
         if (s_stream_ch_chain_debug_more)
-- 
GitLab