📄 rc_ctl_mysql.c
字号:
/*
* 功 能:修改数据库中的摄像机状态
* 参 数: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 + -