Files
utun2/src/transport_layer/etcp_connect.h
T
evgeny a97e8bcc1f docs: update file inventory and module header contracts
Refresh both AGENTS guides and clarify module purpose, usage, ownership, threading, return values and wire formats in headers. Remove the unused timeout_heap freed_count field and unimplemented getter.
2026-10-04 13:10:01 +02:00

34 lines
2.7 KiB
C

#ifndef ETCP_CONNECT_H
#define ETCP_CONNECT_H
#include <stdint.h>
struct UTUN_INSTANCE;
struct ETCP_CONN;
struct TOPO_GROUP_NODE;
typedef void (*etcp_connect_callback_t)(void* arg, struct ETCP_CONN* conn, int type);
/* Внутренний установщик прямого ETCP-транспорта; владельцы используют node_conn_direct.h.
* node->node_id должен находиться в node_registry: оттуда берутся ключ и IPv4/IPv6 адреса.
* Подключение создаёт UDP/STCP-линки либо подписывает callback на текущую попытку к тому же узлу.
* Все вызовы/callbacks — в uasync. flags — непустая маска ETCP_CONNECT_EARLY/LATE (etcp_api.h).
* EARLY означает появление транспорта; LATE — завершение выбора линков. Они не означают READY группы.
* При одном/полностью готовом наборе линков обе запрошенные фазы выдаются подряд;
* иначе после EARLY ждём settle 0.5..2с и удаляем неинициализированные линки.
* Для уже готового соединения callback вызывается внутри etcp_connect, до возврата.
* conn в callback заимствован. type=0/conn=NULL — отказ; initial timeout закрывает соединение.
* Возврат 0 означает принятую попытку/выданный результат; -1 — ошибка, причём некоторые
* ошибки создания также вызывают cb(NULL,0). Обработчик должен учитывать оба способа отказа. */
int etcp_connect(struct UTUN_INSTANCE* instance, struct TOPO_GROUP_NODE* node,
etcp_connect_callback_t cb, void* arg, uint8_t flags);
/* Снять таймеры/контекст по conn без уведомления callbacks. Только teardown соединения,
* когда connect_init_cb больше не может быть вызван; транспорт освобождает вызывающий слой. */
void etcp_connect_cancel_for_conn(struct UTUN_INSTANCE* inst, struct ETCP_CONN* conn);
/* Полная отмена pending-коннекта по node_id: снимает коллбэки с conn (conn остаётся
* жив — переиспользуется, напр. ncd), отменяет таймеры, освобождает ctx. */
void etcp_connect_cancel_by_node(struct UTUN_INSTANCE* inst, uint64_t node_id);
#endif