- 论坛徽章:
- 0
|
libtcp.so
1.1 TCP重组模块核心数据结构说明
struct t_tuple4
{
u_short source; //源端口,网络序
u_short dest; //目的端口,网络序
u_int saddr; //源ip,网络序
u_int daddr; //目的ip,网络序
}; // 四元组
typedef struct t_tcp_param
{
unsigned char *data; //指向ip头开始处的指针
int skblen; //从ip头开始至报文结束的长度
struct timeval packet_time; //传入的时间
void (*tcp_func)(); //处理中调用的回调函数, 原型为
// void tcp_callback(void *tcp_connection, void *pData);
void (*reforward_func)(); //重传函数,原型为
// void resend_callback(void *tcp_connection, void *pData);
unsigned int id; //作为hash值计算和hash比较的一项
void *pUserData; //回调函数中的pData;
}T_TCP_PARAM; // tcp 重组参数
1.2 TCP重组模块核心函数说明
/*====================================================
函数名: wl_process_tcp
功能: 处理数据包时的调用函数
入参: tcp_param: 传入参数
出参:
返回值:
======================================================*/
void wl_process_tcp(T_TCP_PARAM tcp_param);
/*====================================================
函数名: wl_tcp_init
功能: 在主线程中调用的tcp重组模块初始化函数
入参: size:hash表中桶的总数目, 根据需要进行数目设置
hash表中节点的最大数目是3 * size/4
出参:
返回值:
======================================================*/
int wl_tcp_init(int size);
/*====================================================
函数名: wl_tcp_state
功能: 当回调函数tcp_func调用时, 判断tcp的状态
入参: *a_tcp :tcp 流
出参:*state: 值为WL_JUST_EST,WL_DATA,WL_CLOSE,WL_RESET,WL_TIMED_OUT,WL_EXITING
返回值:
======================================================*/
int wl_tcp_state(void *a_tcp, int *state);
/*====================================================
函数名: wl_get_tuple4
功能: 获取四元组
入参: *a_tcp :tcp 流
出参: *pTupe4:四元组, *pSide:为WL_CLIENT 或WL_SERVER
获取的四元组为第一个syn报文的四元组, 如需获取
当前报文的四元组, 需根据*pSide的值进行判断。
WL_CLIENT和WL_SERVER都表示数据接收方。
四元组中的数据都为网络字节序。
返回值:
======================================================*/
int wl_get_tuple4(void *a_tcp, struct t_tuple4 *pTupe4, int *pSide);
/*====================================================
函数名: wl_discard
功能: 收到数据时, 不立刻读取, 需要由tcp重组缓存
时调用
入参: a_tcp: tcp重组流指针
num:读取的数据字节数, 示例:如果缓存中可读的
有序数据字节数为1440, 即a_tcp->read 等于1440,参数
num为0 表示全部缓存, 参数num设置为300, 表示已
读取前300字节, 则缓存中还会保存后1140字节
出参:
返回值:
======================================================*/
void wl_discard(void * a_tcp, int num);
/*====================================================
函数名: wl_get_stat_info
功能: 获取重传包个数和重传的字节数
入参: *a_tcp :TCP流
side: tcp流的一端, 取值为WL_CLIENT或WL_SERVER
出参: *reForwardNum :重传包个数
*reForwardByte:重传的字节数
返回值:
======================================================*/
int wl_get_stat_info(void *a_tcp, int side, int* reForwardNum, int* reForwardByte);
/*====================================================
函数名: wl_set_stat_info
功能: 设置重传包个数和重传的字节数
入参: *a_tcp :TCP流
side: tcp流的一端, 取值为WL_CLIENT或WL_SERVER
reSendByte: 重传字节数
reSendNum: 重传报文数
出参:
返回值: R_OK R_ERROR
======================================================*/
int wl_set_stat_info(void *a_tcp, int side, int reSendByte, int resendNum);
/*====================================================
函数名: wl_receive_data
功能: 返回收到数据的信息
入参: a_tcp: tcp流指针
出参: *pside: 取值为WL_CLIENT , WL_SERVER, 分别 表示客户端收到
数据和服务端收到数据
**pdata:指向数据的开始处
*data_len :数据的总长度
*new_data_len: 新到数据的长度
返回值: R_OK R_ERROR
======================================================*/
int wl_receive_data(void *a_tcp, int *pside, unsigned char **pdata, int *data_len, int *new_data_len);
/*====================================================
函数名: wl_get_data
功能: 获取指定端的数据
入参: a_tcp: tcp流指针
出参: side: 取值为WL_CLIENT , WL_SERVER
**pdata:指向数据的开始处
*data_len :数据的总长度
返回值: R_OK R_ERROR
======================================================*/
int wl_get_data(void *a_tcp, int side, unsigned char **pdata, int *data_len);
/*====================================================
函数名: wl_get_pkt_time
功能: 获取重传报文的时间
入参: *a_tcp :TCP流
出参: *packt_time:报文的时间
返回值: R_OK R_ERROR
======================================================*/
int wl_get_pkt_time(void *a_tcp, struct timeval *packet_time);
/*====================================================
函数名: wl_get_resend_pkt_seq_len
功能: 获取报文的seq 和重传长度
入参: *a_tcp :TCP流
出参: *pSeq:序列号
*pLen:重传字节数
返回值: R_OK R_ERROR
======================================================*/
int wl_get_resend_pkt_seq_len(void *a_tcp, unsigned int *pSeq, int *pLen);
/*====================================================
函数名: wl_get_resend_pkt_side
功能: 获取重传的数据包的方向
入参: *a_tcp :TCP流
出参: *pSide:方向 WL_CLIENT 或WL_SERVER
返回值: R_OK R_ERROR
======================================================*/
int wl_get_resend_pkt_side(void *a_tcp, int *pSide);
/*====================================================
函数名: wl_get_pkt_head_seq
功能: 获取缓存区头部对应的seq
入参: *a_tcp :TCP流
出参: *pSeq:seq值
返回值: R_OK R_ERROR
======================================================*/
int wl_get_pkt_head_seq(void *a_tcp, unsigned int *pSeq);
libtcp.so.rar
(19.23 KB, 下载次数: 6)
|
|