// etcp.h - Расширенный протокол управления передачей (ETCP Protocol) #ifndef ETCP_H #define ETCP_H #include "etcp_sockets.h" #include "etcp_connections.h" #include "packet_pool.h" #include "ll_queue.h" #include #ifdef __cplusplus extern "C" { #endif // Forward declarations typedef struct utun_instance utun_instance_t; typedef struct ETCP_CONN etcp_t; struct ETCP_CONN { // Node ID (64-bit, генерируется при первом запуске) uint64_t node_id; int mtu; utun_instance_t *instance; // Каналы (соединения) - linked list struct ETCP_LINK* channels; // Пул пакетов (общий для всего ETCP instance) packet_pool_t packet_pool; uint8_t state; // 0 - just created, 1 - initialized, 2 - connection established // Криптография и состояние (TODO: определить sc_context_t) // void* crypto_ctx; ll_queue_t* input_queue;// отправитель -> input_queue -> etcp -> etcp_channel -> отправка (etcp_sockets) ll_queue_t* output_queue;// etcp_sockets -> etcp_channel -> etcp -> output_queue -> получатель }; // Создание пустого ETCP instance (после надо добавить ключи, каналы) struct ETCP_CONN* etcp_create(utun_instance_t *instance); // Уничтожение ETCP instance void etcp_destroy(struct ETCP_CONN* etcp); // Обработать входящий пакет (вызывается из etcp_connections) void etcp_conn_input(struct ETCP_CONN* etcp, packet_buffer_t* pkt); // Получение статистики void etcp_get_stats(struct ETCP_CONN* etcp, size_t* packets_sent, size_t* packets_recv, size_t* pool_allocs, size_t* pool_reuse); #ifdef __cplusplus } #endif #endif // ETCP_H