Добавлен group_id в etcp_router и topo_group, удалён msg_transport

- etcp_router: SVC_ROUTE_HDR (+8B), ETCP_ROUTER_CONN/TRANSIT_QUEUE хеши расширены под group_id
- Все caller'ы (proxy, routing, conn_mgr, nat, chatgui, tests) обновлены
- topo_group: глобальный реестр TOPO_NODE по node_id, ref_count=0 при создании
- BGP-обмен активируется для всех групп (а не только дефолтной)
- Протокол: group_id добавлен в WITHDRAW/TABLE_REQ/TABLE_COMPLETE/ERR_GROUP_MISMATCH
- Per-connection коллбэки заменены на instance-level conn_status
- msg_transport полностью удалён из проекта
57/57 тестов
This commit is contained in:
Evgeny committed 2026-07-22 15:51:03 +03:00
1 parent 5265783164
commit 852ce401e7
37 files changed
+375 -1125

No files matched your search

+12
View File
@@ -252,8 +252,20 @@ struct TOPO_NODEQ {
struct TOPO_NODEQ* topo_node_find_by_id(struct TOPO_GROUP* group, uint64_t node_id);
// Владение TOPO_NODE: создаётся с ref_count=0. Владелец вызывает topo_node_ref() чтобы завладеть.
// При отказе от владения — topo_node_unref(). При ref_count=0 узел удаляется.
void topo_node_ref(struct TOPO_NODE* ni);
void topo_node_unref(struct TOPO_NODE* ni);
// Глобальный реестр TOPO_NODE* (по node_id). Каждый узел хранится один раз.
// При помещении в реестр и при получении из реестра владение берётся (ref++).
// При освобождении из реестра владение возвращается (unref, при ref=0 — удаление).
struct TOPO_NODE* topo_node_registry_acquire(struct TOPO_GROUPS* groups, struct TOPO_NODE* ni);
void topo_node_registry_release(struct TOPO_GROUPS* groups, struct TOPO_NODE* ni);
// Освободить узел без учёта ref_count (для ошибок после deserialize, пока ref=0).
void topo_node_free_raw(struct TOPO_GROUPS* groups, struct TOPO_NODE* ni);
void topo_node_free_lists(struct TOPO_GROUP* group, struct TOPO_NODEQ* nq);
int topo_node_dyn_size(const struct TOPOMSG_NODE* msg);