2024-03-21 19:27:41 +08:00
|
|
|
#ifndef _TCP_REASSEMBLY_H
|
|
|
|
|
#define _TCP_REASSEMBLY_H
|
|
|
|
|
|
2024-04-21 11:30:41 +08:00
|
|
|
#ifdef __cplusplus
|
2024-03-21 19:27:41 +08:00
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
#include "log.h"
|
2024-03-25 17:30:48 +08:00
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
#define TCP_REASSEMBLY_LOG_DEBUG(format, ...) LOG_DEBUG("tcp_reassembly", format, ##__VA_ARGS__)
|
|
|
|
|
#define TCP_REASSEMBLY_LOG_ERROR(format, ...) LOG_ERROR("tcp_reassembly", format, ##__VA_ARGS__)
|
2024-03-25 17:30:48 +08:00
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
struct tcp_segment
|
2024-03-21 19:27:41 +08:00
|
|
|
{
|
2024-04-02 16:21:39 +08:00
|
|
|
uint32_t len;
|
|
|
|
|
const void *data;
|
2024-03-21 19:27:41 +08:00
|
|
|
};
|
|
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
struct tcp_segment *tcp_segment_new(uint32_t seq, const void *data, uint32_t len);
|
|
|
|
|
void tcp_segment_free(struct tcp_segment *seg);
|
2024-03-21 19:27:41 +08:00
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
struct tcp_reassembly *tcp_reassembly_new(uint64_t max_timeout, uint64_t max_seg_num);
|
|
|
|
|
void tcp_reassembly_free(struct tcp_reassembly *assembler);
|
2024-03-21 19:27:41 +08:00
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
// return: 1: success (seg overlap)
|
|
|
|
|
// return: 0: success
|
|
|
|
|
// return: -1: failed (no space)
|
|
|
|
|
int tcp_reassembly_push(struct tcp_reassembly *assembler, struct tcp_segment *seg, uint64_t now);
|
|
|
|
|
struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler);
|
|
|
|
|
struct tcp_segment *tcp_reassembly_expire(struct tcp_reassembly *assembler, uint64_t now);
|
2024-03-21 19:27:41 +08:00
|
|
|
|
2024-04-02 16:21:39 +08:00
|
|
|
void tcp_reassembly_inc_recv_next(struct tcp_reassembly *assembler, uint32_t offset);
|
|
|
|
|
void tcp_reassembly_set_recv_next(struct tcp_reassembly *assembler, uint32_t seq);
|
|
|
|
|
uint32_t tcp_reassembly_get_recv_next(struct tcp_reassembly *assembler);
|
2024-03-21 19:27:41 +08:00
|
|
|
|
2024-04-21 11:30:41 +08:00
|
|
|
#ifdef __cplusplus
|
2024-03-21 19:27:41 +08:00
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|