From 23fbdf458495cfe7326d8e330bbf10f4ba5e6d84 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 4 Sep 2026 21:04:18 +0300 Subject: [PATCH] =?UTF-8?q?chat:=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20?= =?UTF-8?q?BGP-=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=83=D0=B7=D0=BB=D0=B0=20=D0=BA=20=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=BF=D0=BF=D0=B5=20(invite=20+=20auto-connect)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routing_layer/topo_group_connect.c | 2 ++ src/routing_layer/topo_group_invite.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/routing_layer/topo_group_connect.c b/src/routing_layer/topo_group_connect.c index dbaae888..75292c41 100644 --- a/src/routing_layer/topo_group_connect.c +++ b/src/routing_layer/topo_group_connect.c @@ -284,6 +284,8 @@ static void tgc_callback(struct NODE_CONN_DIRECT* h, enum ncd_event event, void* if (ok) { struct TOPO_GROUP_NODE* nq = topo_node_find_by_id(gc->group, node_id); if (nq) nq->handle = h; + /* запуск BGP: узел соединён с группой */ + if (conn) topo_group_new_conn(gc->group, conn); } else if (event == NCD_EVENT_TIMEOUT) { struct TOPO_GROUP_NODE* nq = topo_node_find_by_id(gc->group, node_id); if (nq) nq->handle = NULL; diff --git a/src/routing_layer/topo_group_invite.c b/src/routing_layer/topo_group_invite.c index 20cb9c77..6aa9dbcf 100644 --- a/src/routing_layer/topo_group_invite.c +++ b/src/routing_layer/topo_group_invite.c @@ -181,6 +181,13 @@ static void tgi_handle_info_req(struct ETCP_CONN* conn, const uint8_t* data, siz /* ── создаём инфраструктуру группы СРАЗУ ── */ chat_core_ensure_channel_ready(ch_id); + /* запуск BGP: узел соединён с группой, членство подтверждено (inviter, INFO_REQ) */ + { + struct TOPO_GROUP* bgp_grp = topo_groups_find(inst->topo_groups, req->group_id); + if (bgp_grp && bgp_grp->group_type == TOPO_GROUP_TYPE_CHAT) + topo_group_new_conn(bgp_grp, conn); + } + /* ── сериализуем ответ ── */ size_t ch_nl = strlen(ch_name); if (ch_nl > 255) ch_nl = 255; uint8_t inv_flags = (my_join_sig[0] || my_join_ts) ? PEERS_FLAG_HAS_JOIN : 0; @@ -324,6 +331,13 @@ static void tgi_handle_info_resp(struct ETCP_CONN* conn, const uint8_t* data, si DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "invite: membership CONFIRMED by 0x%016llx name=\"%.*s\" ch=%s — full channel ready", (unsigned long long)inv->node_id, (int)nnl, nnl ? (const char*)resp->node_name : "?", ch_id); + /* запуск BGP: узел соединён с группой и членство подтверждено */ + { + struct TOPO_GROUP* bgp_grp = topo_groups_find(inv->inst->topo_groups, inv->group_id); + if (bgp_grp && bgp_grp->group_type == TOPO_GROUP_TYPE_CHAT) + topo_group_new_conn(bgp_grp, conn); + } + /* ── успех: переводим ncd-handle во владение узла, доставляем JOIN ── */ { uint64_t node_id = inv->node_id, group_id = inv->group_id;