⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc_ctl_define.h

📁 epoll机制的收发程序 只能在2.6内核上使用
💻 H
字号:
/*
 * 文 件 名:rc_ctl_define.h
 * 功    能:链接控制部分的公共的宏定义及类型的定义
 * 作    者:马云龙
 * E_mail : mayunlong21@163.com
 * 开始时间:2007-4-23 16:05
 * 结束时间:2007-4-27 13:12
 * 修改时间:
 */
#ifndef		RC_CTL_DEFINE_H//2007-4-23 16:06
#define		RC_CTL_DEFINE_H

#include	<sys/epoll.h>

#include	"rc_pub_define.h"
#include	"rc_pub_type.h"

#include	"include/mysql.h"
#include	"rc_mysql_util.h"

#define		XML_USED
#ifdef		XML_USED
#define		XML_LEN_TYPE_USED_NO	//发送xml时不使用长度和类型
#endif

#define		MYSQL_USED_YES		//使用数据库

#define		DETAILED_INFO_SEND_TASK		//在发送任务队列中保存详细信息
#ifdef		MYSQL_USED_YES
//#define		MYSQL_SAVE_USED_YES			//使用保存数据库的功能
#endif

#ifndef		DEBUG_MYL_01
#define		NUM_PTHREAD_R_N_CAM				50	//从网络读摄像机的线程的数量
#define		NUM_PTHREAD_W_N_CAM				20	//向网络写摄像机的线程的数量
#define		NUM_PTHREAD_R_N_ATX				50	//从网络读控件的线程的数量
#define		NUM_PTHREAD_W_N_ATX				20	//向网络写控件的线程的数量
#else
#define		NUM_PTHREAD_R_N_CAM				5	//从网络读摄像机的线程的数量
#define		NUM_PTHREAD_W_N_CAM				1	//向网络写摄像机的线程的数量
#define		NUM_PTHREAD_R_N_ATX				5	//从网络读控件的线程的数量
#define		NUM_PTHREAD_W_N_ATX				2	//向网络写控件的线程的数量
#endif



#define		MAX_NUM_SOCKET			65535//最大链接数

#define		MAX_LEN_CONNECT_BUF				2048	//链接控制的接收缓冲区大小

#define		MAX_PACKETS_SND			10	//一个sock上最大可以发送的数据包的个数


#define		VAL_SIGNAL_CGI				12		//cgi要处理的信号
#define		TIME_SEC_ALIVE_TASK			240		//任务的最大存活时间(秒)


#define		SPACE_DELAY_LINK_MIN			5		//延迟链接的时间间隔(分钟)
#define		PORT_LISTEN_CON_CAM				5000	//链接控制监听摄像机的端口号码
#define		PORT_LISTEN_CON_ATX				5001	//链接控制监听控件的端口号码
#define		PORT_LISTEN_VIDEO				3000	//默认的视频端口

#define		DEFAULT_PATH_LOG_CTL			"/log/ctl"//默认的视频转发端的日志路径


#define		KEY_PORT_SERVER_ATX		"AtxServerPort"	//链接控制端的控件用的监听端口的关键字
#define		KEY_PORT_SERVER_CAM		"CamServerPort"//链接控制端的摄像机用的监听端口的关键字
#define		KEY_IP_SERVER_VIDEO		"VideoServerip"	//视频服务器ip的关键字
#define		KEY_PORT_SERVER_VIDEO	"VideoServerPort"//视频服务器的端口的关键字
#define		KEY_SPACE_CONNECT_CTL	"CtlConnectSpace"//链接控制端的链接间隔
#define		KEY_MAX_FPS				"MaxFps"		//最大帧率
#define		KEY_MAX_FPS				"MaxFps"		//最大帧率
#define		KEY_PATH_LOG_CTL		"CtlLogPath"//链接控制端日志文件路径


enum type_action {
	TYPE_ACTION_CAMERA = 1,//摄像机的动作
	TYPE_ACTION_CGI,//cgi的动作
};
/*
enum state_operation {//操作的状态
	STATE_OPERATION_NO = 0,//没有任何操作
	STATE_OPERATION_READ,//正在读
	STATE_OPERATION_WRITE,//正在写
	
};*/

typedef struct __struct_task_sended {//已经发送过的任务相关的结构体
	unsigned long int				createtime;//创建任务的时间
	unsigned long int				logintime;//链接时间
	struct_buf_fifo					*oldtask;//任务
	struct __struct_task_sended		*next;
}struct_task_sended;

typedef struct __struct_data_net {//网络数据缓冲区的结构体
	char							*buf;//数据指针
	unsigned int					size;//要发送或者接收的数据长度
	unsigned int					len;//已经接收或者发送的数据总长度
}struct_data_net;

typedef struct __struct_data_net_s {//要发送的数据队列结构体
	struct_data_net					data;
	struct_buf_fifo					*msg_fifo;//管道发送来的消息
	struct __struct_data_net_s		*next;
}struct_data_net_s;

typedef struct __struct_task_net_r {//读线程池任务队列结构体
	int								sockfd;//需要读的文件描述符
//	char							opt;//是否正在操作0没有操作非0有在操作
//	struct_data_net					data;//读数据缓冲区
	struct __struct_task_net_r		*next;//下一个任务的指针
}struct_task_net_r;

typedef struct __struct_task_net_w {//写线程池任务队列结构体
	int								sockfd;//需要写的文件描述符
#ifdef		DETAILED_INFO_SEND_TASK
	unsigned char					type;//链接类型:摄像机还是控件
	char							serial[MAX_LEN_SERIAL];//摄像机序列号
#endif
	pthread_mutex_t					mutex_opt;//操作互斥锁
	int								errors;//连续写出错的次数
	unsigned char					packets;//要发送的数据包的数量
	struct_data_net_s				*buf;//数据缓冲区
	struct __struct_task_net_w		*next;//下一个任务的指针
}struct_task_net_w;

typedef struct __struct_cam_local {//摄像机相关的内网信息(传给与控件的链接使用的)
	struct in_addr			ip;//内网ip
	struct in_addr			submask;//子网掩码
	unsigned short int		port_web;//内网web端口
	unsigned short int		port_nat;//外网映射端口
}struct_cam_local;

typedef struct __struct_msg_con {//摄像机链接相关信息的结构体
	int								sockfd;//文件描述符
	struct sockaddr_in				address;//链接地址
	unsigned char					type;//链接类型:摄像机还是控件
	char							serial[MAX_LEN_SERIAL];//序列号
	unsigned long int				logintime;//链接时间,只对摄像机有用,来标志摄像机的在线状态
	pthread_mutex_t					mutex_opt;//操作互斥锁
	struct_cam_local				local;//摄像机的内网网信息
	struct_data_net					rcv;//接收数据缓冲区
	int								errors;//接收和发送出错的最大次数
	
	unsigned long int				lasttime;//上次成功接收或者发送数据的时间
	
	struct_lab_mysql				mysql;//数据库是否存在的标志,0不存在,1存在
	
	struct __struct_msg_con			*next;
}struct_msg_con;

typedef struct __struct_msg_atx {//控件链接相关信息的结构体
	int								sockfd;//文件描述符
	struct sockaddr_in				address;//链接地址
	char							serial[MAX_LEN_SERIAL];//序列号
	int								errors;//接收和发送出错的最大次数
	unsigned long int				lasttime;//上次成功接收或者发送数据的时间
	pthread_mutex_t					mutex_opt;//操作互斥锁
	struct_data_net					rcv;//接收数据缓冲区
	struct __struct_msg_atx			*next;
}struct_msg_atx;

typedef struct __struct_par_net {//网络线程的入口参数结构体
	int								*epfd;//epoll文件描述符
}struct_par_net;


typedef struct __struct_info_link {//链接相关信息
	unsigned char					serial[MAX_LEN_SERIAL];//摄像机序列号
	int								type;//链接类型,摄像机还是控件
	int								sockfd;//sock链接id
	struct sockaddr_in				address;//链接地址
	unsigned long int				logintime;
}struct_info_link;


typedef struct __struct_msg_alarm {//报警信息结构体
	int								id;//用户id
	char							name_user[128];//用户姓名
	char							name_cam[128];//摄像机名
	char							tel[32];//电话号码
	char							mob[32];//手机号码
	char							address[256];//报警地址
	char							channel[256];//摄像机通道
	char							type[128];//报警类型
	char							ser_cli[MAX_LEN_SERIAL];//报警客户端序列号
	char							ser_cam[MAX_LEN_SERIAL];//摄像机序列号
}struct_msg_alarm;

#endif//2007-4-23 16:06

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -