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

📄 rc_ctl_mysql.c

📁 epoll机制的收发程序 只能在2.6内核上使用
💻 C
📖 第 1 页 / 共 4 页
字号:
				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 + -