// pkt_normalizer.h (упрощенная версия) #ifndef PKT_NORMALIZER_H #define PKT_NORMALIZER_H #include "../lib/ll_queue.h" #include "../lib/u_async.h" #include /* формат кодограмм: cmd = 0 - пакет для передачи адресату (далее содержимое пакета) cmd = 1 - элемент роутинг-таблицы (далее один маршрут) cmd = 2 - запрос роутинг-таблицы (без данных) */ // Структура для packer struct PKTNORM { // public: struct ll_queue* input; // Входная очередь в packer (через нее отправляем пакеты) struct ll_queue* output; // Выходная очередь из unpacker (через нее принимаем пакеты) uint16_t tx_wait_time; // private: uasync_t* ua; // uasync instance struct ETCP_CONN* etcp; // packer: uint16_t frag_size; // размер фрагмента на которые разбивать uint8_t* data; // буфер (выделяется из пула pn->etcp->instance->data_pool) uint16_t data_ptr; // число заполненных байт uint16_t data_size; // размер выделенной области // struct ll_entry sndpart; // блок ожидающий досборки void* flush_timer; // For timeout flush struct ll_entry* pending; // Partial processed input entry uint16_t pending_in_ptr; // Pointer in pending entry // unpacker: struct ll_entry* recvpart; // блок ожидающий заполнение // uint16_t recvpart_rem; // сколько байт осталось собрать (0 = ждём заголовок нового пакета) // stats: uint32_t alloc_errors; uint32_t logic_errors; uint64_t in_total_pkts; uint64_t in_total_bytes; uint64_t out_total_pkts; uint64_t out_total_bytes; }; // Инициализация пары struct PKTNORM* pn_init(struct ETCP_CONN* etcp);// все что нужно (в т.ч. mtu и ua) берет из etcp // Деинициализация пары void pn_deinit(struct PKTNORM* pn); // Сброс состояния (для переподключения) void pn_reset(struct PKTNORM* pn); // Сброс состояния unpacker (для unpacker) void pn_unpacker_reset_state(struct PKTNORM* pn); // создаёт malloc data, копирует, помещает в input. //void pn_packer_send(struct PKTNORM* pn, uint8_t* data, uint16_t len); #endif // PKT_NORMALIZER_H