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.
 
 
 
 
 
 

53 lines
1.8 KiB

// pkt_normalizer.h
#ifndef PKT_NORMALIZER_H
#define PKT_NORMALIZER_H
#include "ll_queue.h"
#include <stdint.h>
/* Default fragment reassembly timeout in uasync timebase units (0.1 ms) */
#ifndef PKT_NORMALIZER_FRAGMENT_TIMEOUT
#define PKT_NORMALIZER_FRAGMENT_TIMEOUT 5000 /* 500 ms */
#endif
typedef struct pn_struct pn_struct;
typedef struct pkt_normalizer_pair pkt_normalizer_pair;
struct pn_struct {
ll_queue_t* input;
ll_queue_t* output;
int is_packer;
union {
struct {
uint8_t* buf;
size_t len;
size_t cap;
} packer;
struct {
uint8_t* buf; /* буфер для сборки фрагментов */
size_t len; /* текущая накопленная длина */
size_t total_len; /* ожидаемая общая длина из первого фрагмента */
size_t cap; /* ёмкость буфера */
int error_count; /* счетчик ошибок сборки */
int in_fragment; /* флаг: идет сборка фрагментов (1) или нет (0) */
void* fragment_timeout_id; /* ID таймаута для сборки фрагментов */
} unpacker;
} u;
};
pn_struct* pkt_normalizer_init(int is_packer); // 1 for packer, 0 for unpacker
void pkt_normalizer_deinit(pn_struct* pn);
pkt_normalizer_pair* pkt_normalizer_pair_init(void);
void pkt_normalizer_pair_deinit(pkt_normalizer_pair* pair);
/* Error handling */
int pkt_normalizer_get_error_count(const pn_struct* pn);
void pkt_normalizer_reset_error_count(pn_struct* pn);
struct pkt_normalizer_pair {
pn_struct* packer;
pn_struct* unpacker;
};
#endif // PKT_NORMALIZER_H