#ifndef __DY_MODBUS_SNIFFER_SESSION_H
#define __DY_MODBUS_SNIFFER_SESSION_H
#include <pthread.h>
#include "dy_common.h"
#include "lnxall_list.h"

#define SNIFFER_DATA_BUF_SIZE	32*1024
#define SNIFFER_ADD_DATA_MASK (1<<1)
#define SNIFFER_REVIEW_DATA_MASK (1<<2)

/******************************************/

typedef struct raw_data_node_s {
    struct list_head list;
    int len;
    char buf[0];
} raw_data_node_t;

typedef struct data_store_info_s {
	int len;
    char *buf;
	int store_flag;
} data_store_info_t;

typedef struct sniffer_data_s {
	void *userParams;
	int len;
	char *data;
} sniffer_data_t;

typedef struct cmd_data_node_s {
    struct list_head list;
	sniffer_data_t sniffer_data;
} cmd_data_node_t;

typedef struct modbus_sniffer_session_s {
	struct list_head cmd_list; //待插入列表
    struct list_head data_list; //待更新列表
    struct list_head query_list; //查询结果列表

	data_store_info_t store_info; //数据缓存
    
    int (*handle_recv_msg)(struct modbus_sniffer_session_s *session, cmd_data_node_t *cmd_msg);
    pthread_mutex_t sniffer_lock;
    pthread_cond_t sniffer_cond;
    int op_code;
	int protocol;
} modbus_sniffer_session_t;


int dy_modbus_sniffer_session_add_cmd(modbus_sniffer_session_t *session, sniffer_data_t *pdata);
int dy_modbus_sniffer_session_add_data(modbus_sniffer_session_t *session, char *buf, int len);

int dy_modbus_sniffer_session_init(modbus_sniffer_session_t *session);
#endif
