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

// 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