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