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

📄 rc_ctl_mysql.c

📁 epoll机制的收发程序 只能在2.6内核上使用
💻 C
📖 第 1 页 / 共 4 页
字号:

/*
 * 功  能:修改数据库中的摄像机状态
 * 参  数:lab_mysql:数据库是否存在的标志
 *         logintime:摄像机的登陆时间
 * 返回值:成功返回0,否则返回-1
 */
int rc_change_state_cam(struct_lab_mysql *lab_mysql, unsigned long int logintime)
{
	int		res;
	
	res = rc_save_mysql_web(TYPE_ACTION_CAMERA, NULL, TYPE_P_W_STATE_CAM, NULL, lab_mysql, logintime);
	
	return res;
}

/*
 * 功  能:判断数据库中保存的摄像机链接的tid是否是现在的tid
 * 参  数:id_cam:摄像机在数据库中的id
 * 返回值:是返回0,否则返回-1
 *
 */
int rc_judge_tid(int id_cam)
{
	int						res;
	int						res1;
	unsigned char			value[128];
	unsigned char			sqlstring[1024];
	unsigned char			temp[64];
	pthread_t				tid;
	MYSQL_RES				*mysql_res;
	MYSQL_ROW				mysql_row;
	
	bzero(sqlstring, sizeof(sqlstring));
	sprintf(sqlstring, "%s * %s %s %s %s=%d", KEY_MYSQL_SELECT, KEY_MYSQL_FROM, NAME_TABLE_MYSQL_AR003, KEY_MYSQL_WHERE, KEY_CAMERA_ID, id_cam);
	
	mysql_res = NULL;
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	if(mysql_res == NULL)
	{
#ifdef		DEBUG_MYL
		printf("%s %d db_query error!\n", __FILE__, __LINE__);
#endif
		return 0;
	}
	
	mysql_row = mysql_fetch_row(mysql_res);
	
	bzero(value, sizeof(value));
	if(mysql_row != NULL)
		res = rc_mysql_getString(mysql_res, mysql_row, KEY_ONLINE_CAMERA, value, sizeof(value));
	else
		res = VAL_SELECT_MYSQL_NULL;
	if(res == 1)
	{
		tid = pthread_self();
		bzero(temp, sizeof(temp));
		sprintf(temp, "%lu", tid);
		res1 = strcmp(temp, value);
		if(res1 == 0)
			return 0;
	}
	
	return -1;
}

/*
 * 功  能:根据摄像机的序列号获取摄像机的外网nat端口
 * 参  数:serial:摄像机的序列号
 * 返回值:直接返回摄像机的外网映射端口(大于0),出错返回0
 */
unsigned short int rc_get_port_nat(const char *serial)
{
	unsigned short int		port;
	int						res;
	unsigned char			temp[128];
	unsigned char			msqlstring[1024];
	MYSQL_RES				*mysql_res = NULL;
	MYSQL_ROW				mysql_row;
	
	port = 0;
	
	bzero(msqlstring, sizeof(msqlstring));
	sprintf(msqlstring, "%s %s %s %s %s %s='%s'", \
			KEY_MYSQL_SELECT, \
			KEY_PORT_NET,  \
			KEY_MYSQL_FROM, \
			NAME_TABLE_MYSQL_CAMERA, \
			KEY_MYSQL_WHERE, \
			KEY_PRODUCTNUM, serial);
	
//	printf("%s %d String : %s\n", __FILE__, __LINE__, msqlstring);
	/* 判断记录是否存在 */
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = NULL;
	mysql_res = rc_mysql_query(&mysql, msqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	if(mysql_res == NULL)
	{
//		printf("\t\t ^^^^^^ %s %d ^^^^^^\n", __FILE__, __LINE__);
#ifdef		DEBUG_MYL
		printf("%s %d db_query error!\n", __FILE__, __LINE__);
#endif
		goto LAB_RETURN;
	}
	
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
//		printf("\t\t ^^^^^^ %s %d ^^^^^^\n", __FILE__, __LINE__);
		goto LAB_RETURN;
	}
	
	bzero(temp, sizeof(temp));
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_PORT_NET, temp, sizeof(temp));
	if(res <= 0)
	{
		goto LAB_RETURN;
	}
	res = atoi(temp);
	if(res <= 0)
	{
		goto LAB_RETURN;
	}
	port = res;
//	printf("%s %d res : %d ; temp : %s\n", __FILE__, __LINE__, res, temp);
	
LAB_RETURN:
	mysql_free_result(mysql_res);
	return port;
}

/*
 * 功  能:根据报警器id和序列号来获取报警的信息
 * 参  数:id:报警器id
 *         serial:报警主机的序列号
 *         msg:要报警的信息
 * 返回值:成功返回0,否则返回-1
 */
int rc_msg_alarm(unsigned short int id, const char *serial, struct_msg_alarm *msg)
{
	int				res;
	int				ret;
	char			sqlstring[1024];
	char			buf[256];
	MYSQL_RES		*mysql_res;
	MYSQL_ROW		mysql_row;
	
#ifndef		MYSQL_USED_YES
	strcpy(msg->name_user, "myl");
	strcpy(msg->name_cam, "cam_myl");
	strcpy(msg->tel, "0592-5701155");
	strcpy(msg->mob, "13859990521");
	strcpy(msg->address, "XiaMen66-506");
	strcpy(msg->channel, "cam01");
	strcpy(msg->type, "HongWai");
	strcpy(msg->ser_cli, "123456789012345678901234");
	strcpy(msg->ser_cam, "2003101E0007061400001XYZ");
	
	return 0;
#endif
	
	bzero(sqlstring, sizeof(sqlstring));
	sprintf(sqlstring, "%s %s.%s,%s.%s,%s.%s,%s.%s,%s.%s %s %s %s %s %s %s %s %s %s %s.%s=%s.%s %s %s.%s='%s'", \
			KEY_MYSQL_SELECT, \
			KEY_ALARM_NAME_AH, KEY_ALARM_ADDRESS, \
			KEY_ALARM_NAME_AH, KEY_ALARM_SN_CLI, \
			KEY_ALARM_C, KEY_ALARM_USERID, \
			KEY_ALARM_C, KEY_ALARM_PRODUCTNUM, \
			KEY_ALARM_C, KEY_ALARM_CAMNAME, \
			KEY_MYSQL_FROM, \
			NAME_TABLE_MYSQL_CAMERA, \
			KEY_MYSQL_AS, \
			KEY_ALARM_C, \
			KEY_MYSQL_JOIN, \
			KEY_ALARM_HOST, \
			KEY_MYSQL_AS, \
			KEY_ALARM_NAME_AH, \
			KEY_MYSQL_ON, \
			KEY_ALARM_C, KEY_ALARM_CAMID, \
			KEY_ALARM_NAME_AH, KEY_ALARM_CAMERAID, \
			KEY_MYSQL_WHERE, \
			KEY_ALARM_NAME_AH, KEY_ALARM_SERIALNUMBER,
			serial);
	
//	res = strcmp(buf, sqlstring);
//	printf("%s\n", buf);
//	printf("%s %d Sqlstring : %s\n", __FILE__, __LINE__, sqlstring);
//	printf("%s %d res : %d\n", __FILE__, __LINE__, res);
//	return 0;
	
	mysql_res = NULL;
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	if(mysql_res == NULL)
	{
		return -1;
	}
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	ret = 0;
	bzero(msg, sizeof(struct_msg_alarm));
	
	/* 报警地址 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_ADDRESS, msg->address, sizeof(msg->address));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 用户id */
	bzero(buf, sizeof(buf));
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_USERID, buf, sizeof(buf));
	if(res == 1)
	{
		msg->id = atoi(buf);
	}
	else
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 报警客户端序列号 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_SN_CLI, msg->ser_cli, sizeof(msg->ser_cli));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
//	printf("%s %d client serial : %s\n", __FILE__, __LINE__, msg->ser_cli);
	
	/* 摄像机序列号 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_PRODUCTNUM, msg->ser_cam, sizeof(msg->ser_cam));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 摄像机名 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_CAMNAME, msg->name_cam, sizeof(msg->name_cam));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	mysql_free_result(mysql_res);
	mysql_res = NULL;
	
	bzero(sqlstring, sizeof(sqlstring));
	sprintf(sqlstring, "%s %s,%s,%s %s %s %s %s = %d", \
			KEY_MYSQL_SELECT, \
			KEY_ALARM_REALNAME,
			KEY_ALARM_TEL, \
			KEY_ALARM_MOBILETEL, \
			KEY_MYSQL_FROM, \
			NAME_TABLE_USER, \
			KEY_MYSQL_WHERE,
			KEY_ALARM_ID, msg->id);
	
//	printf("%s %d Sqlstring : %s\n", __FILE__, __LINE__, sqlstring);
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	if(mysql_res == NULL)
	{
		return -1;
	}
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 用户的真实姓名 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_REALNAME, msg->name_user, sizeof(msg->name_user));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 用户的电话 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_TEL, msg->tel, sizeof(msg->tel));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 用户的手机号码 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_MOBILETEL, msg->mob, sizeof(msg->mob));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	mysql_free_result(mysql_res);
	mysql_res = NULL;
	
	
	bzero(sqlstring, sizeof(sqlstring));
//	sprintf(sqlstring, "select a.channelName,a.typeName from alarm as a join alarmhost as ah on a.alarmHostId=ah.tid where ah.serialNumber='1003101E0007061400001XYZ' and a.alarmid='20';");
	sprintf(sqlstring, "%s %s.%s,%s.%s %s %s %s %s %s %s %s %s %s %s.%s=%s.%s %s %s.%s='%s' %s %s.%s='%u'", \
			KEY_MYSQL_SELECT, \
			KEY_ALARM_NAME_A, KEY_ALARM_CHANNELNAME, \
			KEY_ALARM_NAME_A, KEY_ALARM_TYPENAME, \
			KEY_MYSQL_FROM, \
			KEY_ALARM_ALARM, \
			KEY_MYSQL_AS, \
			KEY_ALARM_NAME_A, \
			KEY_MYSQL_JOIN, \
			KEY_ALARM_ALARMHOST, \
			KEY_MYSQL_AS, \
			KEY_ALARM_NAME_AH, \
			KEY_MYSQL_ON, \
			KEY_ALARM_NAME_A, KEY_ALARM_ALARMHOSTID, \
			KEY_ALARM_NAME_AH, KEY_ALARM_TID, \
			KEY_MYSQL_WHERE, \
			KEY_ALARM_NAME_AH, KEY_ALARM_SERIALNUMBER_0, \
			serial, \
			KEY_MYSQL_AND, \
			KEY_ALARM_NAME_A, KEY_ALARM_ALARMID, \
			id);
	
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	if(mysql_res == NULL)
	{
		return -1;
	}
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 摄像机通道 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_CHANNELNAME, msg->channel, sizeof(msg->channel));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
	/* 摄像机通道 */
	res = rc_mysql_getString(mysql_res, mysql_row, KEY_ALARM_TYPENAME, msg->type, sizeof(msg->type));
	if(res != 1)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
LAB_RETURN:
	mysql_free_result(mysql_res);
	return ret;
}

/*
 * 功  能:校验报警主机在数据库中是否存在
 * 参  数:serial:报警主机的序列号
 * 返回值:存在返回1,不存在返回0,失败返回-1
 */
int rc_check_alarmhost(const char *serial)
{
	int				ret;
	char			sqlstring[1024];
	MYSQL_RES		*mysql_res;
	MYSQL_ROW		mysql_row;
	
	bzero(sqlstring, sizeof(sqlstring));
	sprintf(sqlstring, "%s * %s %s %s %s='%s';", \
			KEY_MYSQL_SELECT, \
			KEY_MYSQL_FROM, \
			NAME_TABLE_MYSQL_ALARMHOST, \
			KEY_MYSQL_WHERE, \
			KEY_ALARM_SERIALNUMBER_0, serial);
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	
	ret = 1;
	if(mysql_res == NULL)
	{
		printf("\t\t %s %d sqlstring : %s\n", __FILE__, __LINE__, sqlstring);
#ifdef		DEBUG_MYL
		printf("%s %d db_query error!\n", __FILE__, __LINE__);
#endif
		return -1;
	}
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
		printf("\t\t %s %d sqlstring : %s\n", __FILE__, __LINE__, sqlstring);
		ret = -1;
		goto LAB_RETURN;
	}
	
LAB_RETURN:
	mysql_free_result(mysql_res);
	return ret;
}

/*
 * 功  能:校验报警客户端在数据库中是否存在
 * 参  数:serial:报警客户端的序列号
 * 返回值:存在返回1,不存在返回0,失败返回-1
 */
int rc_check_alarmclient(const char *serial)
{
	int				ret;
	char			sqlstring[1024];
	MYSQL_RES		*mysql_res;
	MYSQL_ROW		mysql_row;
	
	bzero(sqlstring, sizeof(sqlstring));
	sprintf(sqlstring, "%s * %s %s %s %s='%s'", \
			KEY_MYSQL_SELECT, \
			KEY_MYSQL_FROM, \
			NAME_TABLE_MYSQL_ALARMCLIENT, \
			KEY_MYSQL_WHERE, \
			KEY_ALARM_SERIALNUMBER_0, serial);
	pthread_mutex_lock(&mutex_mysql);
	mysql_res = rc_mysql_query(&mysql, sqlstring);
	pthread_mutex_unlock(&mutex_mysql);
	
	ret = 1;
	if(mysql_res == NULL)
	{
#ifdef		DEBUG_MYL
		printf("%s %d db_query error!\n", __FILE__, __LINE__);
#endif
		return -1;
	}
	mysql_row = mysql_fetch_row(mysql_res);
	if(mysql_row == NULL)
	{
		ret = -1;
		goto LAB_RETURN;
	}
	
LAB_RETURN:
	mysql_free_result(mysql_res);
	return ret;
}

⌨️ 快捷键说明

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