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;