You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.6 KiB
67 lines
2.6 KiB
// pkt_normalizer.h (упрощенная версия) |
|
#ifndef PKT_NORMALIZER_H |
|
#define PKT_NORMALIZER_H |
|
|
|
#include "../lib/ll_queue.h" |
|
#include "../lib/u_async.h" |
|
#include <stdint.h> |
|
|
|
/* |
|
формат кодограмм: <cmd 1 byte> <data ... n bytes> |
|
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
|