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.
34 lines
2.7 KiB
C
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
|