@ -27,29 +27,62 @@ extern "C" {
# define ETCP_MAX_BINDINGS 256
// ═══════════════════════════════════════════════════════════════════════════
// ЕДИНЫЙ РЕЕСТР ETCP-идентификаторов. Единственное место определения.
//
// Два независимых пространства имён (отдельные таблицы биндинга):
// • ETCP_ID_* — raw ETCP: etcp_bind() / etcp_send()
// • ETCP_RT_ID_* — router-сервисы: etcp_router_bind() / etcp_route_send()
//
// Одинаковое значение в РАЗНЫХ пространствах — НЕ коллизия (напр. 0x00 =
// ETCP_ID_DATA и ETCP_RT_ID_DATA). Коллизия — дубль значения В ПРЕДЕЛАХ одного
// пространства: последний bind затирает предыдущий обработчик и молча ломает
// сервис (реальный случай: ETCP_RT_ID_CHAT 0x11 затирал ETCP_RT_ID_CONN_MGR
// 0x11 → переставал работать conn_mgr).
//
// Часть констант ETCP_RT_ID_* исторически биндится через etcp_bind()
// (raw-пространство) — помечены «(raw)»; их значения занимают raw-реестр.
//
// raw: 0x00 DATA, 0x01 TOPO_ENTRY, 0x02 NAT_DETECTION, 0x03 SVC_ROUTE,
// 0x04 NTP_TIME, 0x05 BROADCAST, 0x12 NCD_CONTROL, 0x13 GROUP_INVITE,
// 0x20 DB_SYNC, 0x30 CHAT_SYNC, 0x31 MEMBER_SYNC
// router: 0x00 DATA, 0x02 NAT, 0x04 TCP_PROXY_SERVER, 0x05 UDP_PROXY,
// 0x06 ICMP_PROXY, 0x07 MEDIA_DELIVERY, 0x08 TCP_PROXY_CLIENT,
// 0x11 CONN_MGR, 0x32 ADMIN_KEY, 0x33 JOIN, 0x34 DM,
// 0x35 DM_MAILBOX, 0x36 CALL
//
// !!! Новый ID: впиши его в нужный реестр выше и убедись, что значение
// не занято в том же пространстве.
// ═══════════════════════════════════════════════════════════════════════════
// === Raw ETCP packet IDs (etcp_bind/etcp_send) ===
# define ETCP_ID_DATA 0x00 // Пакет для передачи адресату
# define ETCP_ID_NAT_DETECTION 0x02 // NAT-детекция (STUN-like ping через третий узел)
# define ETCP_ID_SVC_ROUTE 0x03 // Транспорт роутера (etcp_router)
# define ETCP_ID_DATA 0x00 // пакет для передачи адресату
# define ETCP_ID_TOPO_ENTRY 0x01 // BGP-топология (topo_group)
# define ETCP_ID_NAT_DETECTION 0x02 // NAT-детекция (STUN-like ping)
# define ETCP_ID_SVC_ROUTE 0x03 // транспорт роутера (etcp_router)
# define ETCP_ID_NTP_TIME 0x04 // NTP time sync P2P
# define ETCP_ID_BROADCAST 0x05 // Broadcast messages between peers
# define ETCP_ID_BROADCAST 0x05 // broadcast-сообщения между пирами
// === Router-сервисы (etcp_router_bind/etcp_route_send) ===
# define ETCP_RT_ID_DATA 0x00 // routing.c — маршрутизация данных
# define ETCP_RT_ID_NAT 0x02 // NAT трафик между узлами
# define ETCP_RT_ID_SVC_ROUTE 0x03 // etcp_router — транспорт роутера
# define ETCP_RT_ID_TCP_PROXY_SERVER 0x04 // TCP proxy server: принимает CONNECT/DATA от клиентов
# define ETCP_RT_ID_TCP_PROXY_CLIENT 0x08 // TCP proxy client: принимает DATA/CLOSE/ERROR/FIN от сервера
# define ETCP_RT_ID_NAT 0x02 // NAT-трафик между узлами
# define ETCP_RT_ID_SVC_ROUTE 0x03 // транспорт роутера (raw, = ETCP_ID_SVC_ROUTE)
# define ETCP_RT_ID_TCP_PROXY_SERVER 0x04 // TCP proxy server (CONNECT/DATA от клиентов)
# define ETCP_RT_ID_UDP_PROXY 0x05 // UDP datagram прокси (client ↔ exit)
# define ETCP_RT_ID_ICMP_PROXY 0x06 // ICMP echo прокси (ping через exit)
# define ETCP_RT_ID_MEDIA_DELIVERY 0x07 // распространение медиа (аудио/видео стриминг)
# define ETCP_RT_ID_MEDIA_DELIVERY 0x07 // распространение медиа (аудио/видео)
# define ETCP_RT_ID_TCP_PROXY_CLIENT 0x08 // TCP proxy client (DATA/CLOSE/ERROR/FIN)
# define ETCP_RT_ID_CONN_MGR 0x11 // Connection Manager — management connections
# define ETCP_RT_ID_NCD_CONTROL 0x12 // node_conn_direct — CLOSE / KEEP_ALIVE control
# define ETCP_RT_ID_ADMIN_KEY 0x32 // chat_admin — передача канального приватного ключа (encrypted+signed)
# define ETCP_RT_ID_DM 0x34 // dm_core — прямой p2p чат (msg/ack/hello)
# define ETCP_RT_ID_DM_MAILBOX 0x35 // dm_mailbox — offline-хранение на storage-узлах (put/pull/ack)
# define ETCP_RT_ID_CALL 0x36 // call — P2P аудио-звонок (сигналинг + медиа)
# define ETCP_RT_ID_NCD_CONTROL 0x12 // node_conn_direct CLOSE/KEEP_ALIVE (raw)
# define ETCP_RT_ID_GROUP_INVITE 0x13 // topo_group_invite (raw)
# define ETCP_RT_ID_DB_SYNC 0x20 // db_sync (raw)
# define ETCP_RT_ID_CHAT_SYNC 0x30 // chat_sync (raw)
# define ETCP_RT_ID_MEMBER_SYNC 0x31 // member_sync/merkle_sync (raw)
# define ETCP_RT_ID_ADMIN_KEY 0x32 // chat_admin — канальный приватный ключ
# define ETCP_RT_ID_JOIN 0x33 // chat_join — join-протокол
# define ETCP_RT_ID_DM 0x34 // dm_core — прямой p2p чат
# define ETCP_RT_ID_DM_MAILBOX 0x35 // dm_mailbox — offline-хранение
# define ETCP_RT_ID_CALL 0x36 // call — P2P аудио-звонок
// Connection status events (instance-level callback)
# define ETCP_CONN_STATUS_NEW 0 // соединение создано