diff --git a/src/routing_layer/topo_group.c b/src/routing_layer/topo_group.c index 2dceffe90..f27737dd1 100644 --- a/src/routing_layer/topo_group.c +++ b/src/routing_layer/topo_group.c @@ -159,7 +159,7 @@ int topo_group_peer_open(struct TOPO_GROUP* group, uint64_t node_id, struct TOPO if (out) *out = NULL; if (!group || !group->instance || !out || !node_id || node_id == group->instance->node_id || !group->senders_list || group->stopping || (group->group_type == TOPO_GROUP_TYPE_CHAT && - !topo_node_sqlite_member_in_channel(group->instance->topo_sqlite_db, group->channel_id, node_id))) { + !topo_node_sqlite_member_transport_allowed(group->instance->topo_sqlite_db, group->channel_id, node_id))) { DEBUG_WARN(DEBUG_CATEGORY_BGP, "cannot request group peer=%016llx: invalid arguments, stopped group or unknown member", (unsigned long long)node_id); return -1; } diff --git a/src/routing_layer/topo_node_sqlite.h b/src/routing_layer/topo_node_sqlite.h index 1a6dc55ee..15f66c73f 100644 --- a/src/routing_layer/topo_node_sqlite.h +++ b/src/routing_layer/topo_node_sqlite.h @@ -99,6 +99,8 @@ int topo_node_sqlite_member_in_channel(sqlite3* db, const char* channel_id, uint /* Допуск участника: source=0, deleted=0 и admitted=1 последней контрольной точки политики/цепочек. * 1/0, ошибка логируется и даёт 0. BGP-placeholder и неподходящая цепочка доступа не дают. */ int topo_node_sqlite_member_allowed(sqlite3* db, const char* channel_id, uint64_t node_id); +/* Транспорт для первой MEMBERS сверки: полная неудалённая запись, ещё без admitted. 1/0; ошибка запрещает. */ +int topo_node_sqlite_member_transport_allowed(sqlite3* db, const char* channel_id, uint64_t node_id); /* Проверить точный X25519-ключ полного действующего мембера: 1 — есть, 0 — нет/ошибка (закрытый отказ). * node_id вычисляется из key, SQL также сверяет все 32 байта; заглушки source=1 и deleted исключены. */ int topo_node_sqlite_member_key_allowed(sqlite3* db, const char* channel_id, const uint8_t key[32]);