📄 rc_ctl_mysql.c
字号:
default :
return -1;
break;
}
break;
}
case TYPE_P_W_SYSTEM://系统相关类型
{
msg_sys = (struct_web_sys *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_SYSTEM, \
KEY_MYSQL_SET);
if(msg_sys->way_time == WAY_TIME_SET_NTP)
{
sprintf(string_set, "%s='%s',%s=%d,%s=%d,%s='%s',%s=%d,%s=%u", \
KEY_CAMERA_NAME, msg_sys->name_cam, \
KEY_NO_USE_LED, msg_sys->led, \
KEY_SET_TIME_MOD, msg_sys->way_time, \
KEY_NTP_SERVER, msg_sys->time.ntp.ntpser, \
KEY_TIME_ZONE, msg_sys->time.ntp.zone, \
KEY_SET_TIME_SPACE, msg_sys->time.ntp.space);
}
else
{
sprintf(string_set, "%s='%s',%s=%d,%s=%d", \
KEY_CAMERA_NAME, msg_sys->name_cam, \
KEY_NO_USE_LED, msg_sys->led, \
KEY_SET_TIME_MOD, msg_sys->way_time);
}
break;
}
case TYPE_P_W_SECURITY://安全相关类型
{
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_SECURITY, \
KEY_MYSQL_SET);
switch(type)
{
case TYPE_ACTION_CAMERA://摄像机的动作
msg_security_get = (struct_web_security_get *)buf;
sprintf(string_set, "%s='%s',%s='%s',%s='%s',%s='%s',%s='%s'", \
KEY_ADMIN_NAME, msg_security_get->root.name, \
KEY_ADMIN_PWD, msg_security_get->root.passwd, \
KEY_USER_NAME, msg_security_get->user.name, \
KEY_USER_PWD, msg_security_get->user.passwd, \
KEY_PRIVATE_NET_NAME, msg_security_get->name_net);
break;
case TYPE_ACTION_CGI://cgi的动作
msg_security_set = (struct_web_security *)buf;
switch(msg_security_set->level)
{
case TYPE_LEVEL_SEC_NET://设置安全网络
sprintf(string_set, "%s='%s'", \
KEY_PRIVATE_NET_NAME, msg_security_set->msg.name_net);
break;
case TYPE_LEVEL_SEC_ROOT://设置管理员密码
sprintf(string_set, "%s='%s',%s='%s'", \
KEY_ADMIN_NAME, msg_security_set->msg.info_user.name, \
KEY_ADMIN_PWD, msg_security_set->msg.info_user.passwd);
break;
case TYPE_LEVEL_SEC_USER://设置普通用户密码
sprintf(string_set, "%s='%s',%s='%s'", \
KEY_USER_NAME, msg_security_set->msg.info_user.name, \
KEY_USER_PWD, msg_security_set->msg.info_user.passwd);
break;
default:
break;
}
}
break;
}
case TYPE_P_W_NET://网络相关类型
{
msg_net = (struct_web_net *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_NETWORK, \
KEY_MYSQL_SET);
bzero(mac, sizeof(mac));
for(i = 0; i < 6; i++)
{
bzero(temp, sizeof(temp));
sprintf(temp, "%02X", (unsigned char)msg_net->mac[i]);
strcat(mac, temp);
}
bzero(temp, sizeof(temp));
switch(msg_net->way_ip)
{
case WAY_IP_GET_DHCP://使用dhcp
break;
case WAY_IP_GET_STATIC://使用静态ip
memcpy(&ip, msg_net->ipmsg.staticip.ip, LEN_TYPE_UINT32);
memcpy(&submask, msg_net->ipmsg.staticip.submask, LEN_TYPE_UINT32);
memcpy(&gateway, msg_net->ipmsg.staticip.gateway, LEN_TYPE_UINT32);
bzero(temp1, sizeof(temp1));
sprintf(temp1, ",%s='%s'", \
KEY_IP_ADDRESS, inet_ntoa(ip));
strcat(temp, temp1);
bzero(temp1, sizeof(temp1));
sprintf(temp1, ",%s='%s'", \
KEY_SUB_MASK, inet_ntoa(submask));
strcat(temp, temp1);
bzero(temp1, sizeof(temp1));
sprintf(temp1, ",%s='%s'", \
KEY_GATEWAY, inet_ntoa(gateway));
strcat(temp, temp1);
break;
case WAY_IP_GET_PPPOE://使用pppoe
sprintf(temp, ",%s='%s',%s='%s'", \
KEY_PPPOE_ACCOUNT, msg_net->ipmsg.pppoe.account_pppoe, \
KEY_PPPOE_PWD, msg_net->ipmsg.pppoe.passwd_pppoe);
break;
default:
return -1;
break;
}
memcpy(&dns, msg_net->dns1, LEN_TYPE_UINT32);
if(dns.s_addr != 0)
{
bzero(temp1, sizeof(temp1));
sprintf(temp1, ",%s='%s'", \
KEY_DNS_SERVER1, inet_ntoa(dns));
strcat(temp, temp1);
}
memcpy(&dns, msg_net->dns2, LEN_TYPE_UINT32);
if(dns.s_addr != 0)
{
bzero(temp1, sizeof(temp1));
sprintf(temp1, ",%s='%s'", \
KEY_DNS_SERVER2, inet_ntoa(dns));
strcat(temp, temp1);
}
memcpy(&port_web, msg_net->port_http, LEN_TYPE_UINT16);
memcpy(&port_video, msg_net->port_video, LEN_TYPE_UINT16);
memcpy(&port_audio, msg_net->port_audio, LEN_TYPE_UINT16);
sprintf(string_set, "%s=%u,%s='%s'%s,%s=%u,%s=%u,%s=%u,%s='%s',%s=%u,%s=%u,%s=%u,%s=%u,%s='%s'", \
KEY_GET_IP_WAY, msg_net->way_ip, \
KEY_MAC_ADDRESS, mac, \
temp, \
KEY_HTTP_PORT, port_web, \
KEY_UDP_AUDIO_PORT, port_audio, \
KEY_UDP_VIDEO_PORT, port_video, \
KEY_WLAN_SSID, msg_net->ssid_wlan, \
KEY_NET_TYPE, msg_net->type_net, \
KEY_WEP, msg_net->wep, \
KEY_WLAN_KEY_SEL, msg_net->way_key, \
KEY_WLAN_KEY_ID, msg_net->id_key, \
KEY_WLAN_KEY, msg_net->key);
break;
}
case TYPE_P_W_DDNS://DDNS相关类型
{
msg_ddns = (struct_web_ddns *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_DDNS, \
KEY_MYSQL_SET);
bzero(temp, sizeof(temp));
sprintf(temp, ",%s='%s',%s=%u", \
KEY_DDNS_SERVER, msg_ddns->ser_ddns, \
KEY_DDNS_UPDATE_SPACE, msg_ddns->space_ddns);
sprintf(string_set, "%s=%u%s,%s=%u", \
KEY_USE_DDNS, msg_ddns->ddns, \
temp, \
KEY_USE_UPNP, msg_ddns->upnp);
break;
}
case TYPE_P_W_MAILFTP://传输方式相关类型
{
msg_mailftp = (struct_web_mailftp *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_MAILFTP, \
KEY_MYSQL_SET);
memcpy(&port, msg_mailftp->port_ftp, LEN_TYPE_UINT16);
bzero(temp, sizeof(temp));
if(msg_mailftp->check_mail == TYPE_CHECKED_YES)
{
sprintf(temp, ",%s='%s',%s='%s'", \
KEY_SMTP_USER, msg_mailftp->name_sndmail, \
KEY_SMTP_PWD, msg_mailftp->pwd_sndmail);
}
sprintf(string_set, "%s='%s',%s='%s',%s='%s',%s=%u%s,%s=%u,%s='%s',%s='%s',%s='%s',%s=%u", \
KEY_SMTP_SERVER, msg_mailftp->ser_smtp, \
KEY_FROM_ADDRESS, msg_mailftp->addr_sndmail, \
KEY_SENDTO_ADDRESS, msg_mailftp->addr_rcvmail, \
KEY_USE_CHECK_SMTP, msg_mailftp->check_mail, \
temp, \
KEY_FTP_PORT, port, \
KEY_FTP_SERVER, msg_mailftp->ser_ftp, \
KEY_FTP_USER, msg_mailftp->name_ftp, \
KEY_FTP_PWD, msg_mailftp->pwd_ftp, \
KEY_FTP_WORK_MOD, msg_mailftp->way_ftp);
break;
}
case TYPE_P_W_VIDEO://视音频相关类型
{
msg_video = (struct_web_video *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003_VIDEO, \
KEY_MYSQL_SET);
sprintf(string_set, "%s='%s',%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u", \
KEY_VIDEO_TXT, msg_video->text, \
KEY_VIDEO_SIZE, msg_video->size, \
KEY_VIDEO_QUALITY, msg_video->quality, \
KEY_VIDEO_FRAME_RATE, msg_video->fps, \
KEY_DEL_RAY_WAY, msg_video->flicker_del, \
KEY_USE_MIRROR_H, msg_video->upright_used, \
KEY_USE_MIRROR_L, msg_video->plne_used, \
KEY_USE_FRAME_RATE_CTRL, msg_video->fps_used, \
KEY_SOUND_SWITCH, msg_video->audio);
break;
}
case TYPE_P_W_TRIGGER://应用相关类型
{
msg_application = (struct_web_application *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAM_TABLE_MYSQL_AR003_TRIGGER, \
KEY_MYSQL_SET);
sprintf(string_set, "%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s=%u,%s='%s',%s=%u,%s=%u,%s=%u,%s=%u,%s=%u", \
KEY_MD_1, msg_application->md_1, \
KEY_SENSITIVITY_1, msg_application->sensitivity_1, \
KEY_MD_2, msg_application->md_2, \
KEY_SENSITIVITY_2, msg_application->sensitivity_2, \
KEY_USE_INFRARED_ALARM, msg_application->infrared, \
KEY_SAVE_IMG_PC, msg_application->save_pc, \
KEY_SAVE_IMG_SDCARD, msg_application->save_card, \
KEY_SAVE_IMG_MODE, msg_application->video_save, \
KEY_SEND_IMG_BY_EMAIL, msg_application->snd_mail, \
KEY_SEND_IMG_BY_FTP, msg_application->snd_ftp, \
KEY_TIMER_GET_PIC, (*(unsigned short *)(msg_application->delay)), \
KEY_DELAY_CHECK_EVENT, msg_application->space, \
KEY_USE_ALARM_TXT, msg_application->waring_text, \
KEY_ALARM_TXT, msg_application->text_waring, \
KEY_USE_ALARM_SOUND, msg_application->waring_audio, \
KEY_USE_GPIO1, msg_application->gpio1, \
KEY_GPIO1_TIMER, (*(unsigned short *)(msg_application->timer_gpio1)), \
KEY_USE_GPIO2, msg_application->gpio2, \
KEY_GPIO2_TIMER, (*(unsigned short *)(msg_application->timer_gpio2)));
break;
}
case TYPE_P_W_TOOL://工具相关类型
{
msg_tool = (struct_web_tool *)buf;
return -1;
break;
}
case TYPE_P_W_UPDATE://软件更新相关类型
{
msg_update = (struct_web_update *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003, \
KEY_MYSQL_SET);
sprintf(string_set, "%s='%s',%s=%lu", \
KEY_VERSION, msg_update->version,
KEY_ONLINE_CAMERA, logintime);
break;
}
case TYPE_P_W_STATE_CAM://摄像机状态类型
{
msg_update = (struct_web_update *)buf;
sprintf(string_web, "%s %s %s", \
KEY_MYSQL_UPDATE, \
NAME_TABLE_MYSQL_AR003, \
KEY_MYSQL_SET);
sprintf(string_set, "%s=%lu", \
KEY_ONLINE_CAMERA, logintime);
break;
}
default:
return -1;
break;
}
sprintf(output, "%s %s %s", string_web, string_set, string_sel);
#ifdef DEBUG_MYL
printf("%s %d : Update SQL : %s\n\n", __FILE__, __LINE__, output);
#endif
return 0;
}
/*
* 功 能:保存数据库
* 参 数:type:标志是摄像机发给服务器的还是cgi传来的
* serial:摄像机序列号
* lab:标志是哪个网页
* buf:数据缓冲区
* mysql:已经打开的数据库
* lab_mysql:标志数据库表是否存在
* logintime:摄像机的登陆时间
* 返回值:成功返回0,否则返回-1
*/
int rc_save_mysql_web(int type, const unsigned char *serial, int lab, const unsigned char *buf, struct_lab_mysql *lab_mysql, unsigned long int logintime)
{
int res;
int alive;
long long int affected_rows;
unsigned char sqlstring[2048];
/* 判断表是否已经存在 */
alive = rc_judge_mysql(serial, lab, lab_mysql);
if(alive <= 0)
{
alive = TABLE_MYSQL_ALIVE_NO;
#ifdef DEBUG_MYL
printf("%s %d!\n", __FILE__, __LINE__);
#endif
}
bzero(sqlstring, sizeof(sqlstring));
switch(alive)
{
case TABLE_MYSQL_ALIVE_YES:
res = rc_string_mysql_update_web(type, lab, buf, sqlstring, lab_mysql, logintime);
break;
case TABLE_MYSQL_ALIVE_NO:
res = rc_string_mysql_insert_web(type, serial, lab, buf, sqlstring, lab_mysql, logintime);
break;
default:
return -1;
break;
}
if(res < 0)
return -1;
/* 更新数据库 */
affected_rows = -1;
pthread_mutex_lock(&mutex_mysql);
affected_rows = rc_mysql_update(&mysql, sqlstring);
pthread_mutex_unlock(&mutex_mysql);
if(affected_rows < 0)
{
#ifdef DEBUG_MYL
printf("%s %d Update Mysql error : %llu\n", __FILE__, __LINE__, affected_rows);
#endif
return -1;
}
return 0;
}
/*
* 功 能:向数据库中添加摄像机序列号表
* 参 数:serial:摄像机序列号
* version:摄像机版本
* mysql:已经链接的数据库
* lab_mysql:标志数据库表是否存在
* logintime:摄像机的链接时间
* 返回值:成功返回0,否则返回-1
*/
int rc_add_ar003_sql(const unsigned char *serial, const unsigned char *version, struct_lab_mysql *lab_mysql, unsigned long int logintime)
{
int res;
res = rc_save_mysql_web(TYPE_ACTION_CAMERA, serial, TYPE_P_W_UPDATE, version, lab_mysql, logintime);
return res;
}
/*
* 功 能:根据摄像机序列号从数据库中获取摄像机的信息
* 参 数:serial:摄像机序列号
* cammsg:保存在数据库中的一些摄像机信息
* mysql:已经链接的数据库结构体
* 返回值:成功返回0,否则返回-1
*/
int rc_get_cam_database(const unsigned char *serial, struct_cam_local *cammsg)
{
int res;
unsigned char value[128];
unsigned char sqlstring[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW mysql_row;
bzero(cammsg, sizeof(struct_cam_local));
bzero(sqlstring, sizeof(sqlstring));
sprintf(sqlstring, "%s * %s %s %s %s=(%s %s %s %s %s %s='%s')", KEY_MYSQL_SELECT, KEY_MYSQL_FROM, NAME_TABLE_MYSQL_AR003_NETWORK, KEY_MYSQL_WHERE, KEY_CAMERA_ID, KEY_MYSQL_SELECT, KEY_CAMERA_ID, KEY_MYSQL_FROM, NAME_TABLE_MYSQL_AR003, KEY_MYSQL_WHERE, KEY_SERIAL_NUMBER, serial);
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);
/* ip地址 */
bzero(value, sizeof(value));
if(mysql_row != NULL)
res = rc_mysql_getString(mysql_res, mysql_row, KEY_IP_ADDRESS, value, sizeof(value));
else
res = VAL_SELECT_MYSQL_NULL;
if(res == 1)
{
cammsg->ip.s_addr = inet_addr(value);
}
else
{
mysql_free_result(mysql_res);
return -1;
}
/* 子网掩码 */
bzero(value, sizeof(value));
if(mysql_row != NULL)
res = rc_mysql_getString(mysql_res, mysql_row, KEY_SUB_MASK, value, sizeof(value));
else
res = VAL_SELECT_MYSQL_NULL;
if(res == 1)
{
cammsg->submask.s_addr = inet_addr(value);
}
else
{
mysql_free_result(mysql_res);
return -1;
}
/* 端口 */
bzero(value, sizeof(value));
if(mysql_row != NULL)
res = rc_mysql_getString(mysql_res, mysql_row, KEY_HTTP_PORT, value, sizeof(value));
else
res = VAL_SELECT_MYSQL_NULL;
if(res == 1)
{
cammsg->port_web = atoi(value);
}
else
{
mysql_free_result(mysql_res);
return -1;
}
mysql_free_result(mysql_res);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -