コード例 #1
0
ファイル: nmp_mod_wdd.c プロジェクト: dulton/nampu
WDD_TIME_DEAL_RESULT nmp_wdd_deal_version1_minute(char *wdd_info)
{
	static gint g_out_times = 0, g_accumulate_times = 0;
	wdd_version1 *data = (wdd_version1 *)(&wdd_info[WDD_HEAD_LEN]);
	wdd_time *w_time = &data->authorize;
	guint ttd_minute = ntohl(w_time->expire_ttd);
	gint ret;

	if (ttd_minute == 0)	//overtime
	{
		if (++g_out_times < WDD_TIME_OUT_WARNING_LEN / WDD_WORK_TIME_LEN)
		{
			nmp_wdd_backup_time_info_min(0);
			return WDD_TIME_OUT_WARNING;
		}
		return WDD_TIME_OUT;
	}
	else
		g_out_times = 0;
	//nmp_print("<NmpModWdd>_____ minute style _, ttd_minute:%d", ttd_minute);

	if (nmp_if_write_dog())		//write dog
	{
		g_accumulate_times = 0;
		if (ttd_minute > WDD_TIME_DECREASE_MINS)
		{
			guint dec = ttd_minute % WDD_TIME_DECREASE_MINS;
			if (dec == 0)
				dec = WDD_TIME_DECREASE_MINS;
			ttd_minute -= dec;
		}
		else
		{
			ttd_minute = 0;
		}
		nmp_wdd_backup_time_info_min(ttd_minute);
		w_time->expire_ttd = htonl(ttd_minute);

		guint size = WDD_HEAD_LEN + sizeof(wdd_version1);
#ifdef WDD_TEST
		ret = nmp_wdd_write_data_test(wdd_info);
#else
		ret = encrypt_write_data(g_handler, wdd_info, size, DATA_TYPE_1);
#endif
		if (ret != 0)
		{
			nmp_warning("<NmpModWdd>wdd write data error, maybe watchdog has " \
				"been removed.");
			return WDD_TIME_ERROR;
		}
	}
	else
	{
		g_accumulate_times++;
		nmp_wdd_backup_time_info_min(ttd_minute -
			g_accumulate_times * WDD_WORK_TIME_LEN / WDD_ONE_MINUTE_SECONDS);
	}

	if (ttd_minute * WDD_ONE_MINUTE_SECONDS < WDD_TIME_WARNING_LEN)
	{
		if (ttd_minute == 0)
			return WDD_TIME_OUT_WARNING;
		return WDD_TIME_WARNING;
	}

	return WDD_TIME_OK;
}
コード例 #2
0
int delete_data(char *argv, char* str)
{
	char str_to_write[1024];
	int i0 = 0;
	int  fd_read;
	int  fd;
	int  ret;

	char sn_header[16];
	char serial_name[SN_MAX_LEN];
	char serial_number[SN_MAX_LEN];
	char *str_sn;
	char str_slip[] = "-";
	char arg_val[8][64];
	CARD_INFO *card;
	CARD_INFO *card_tmp;
	char *str_read;

	int fd0;
	char buf[sizeof(char)+1];
	char str_store[2048];
	int read_flag = 0;

	char cmd_buf[256];
	char data_buf[256];

	char *str_search; //[2048];
	char str_tmp[2048];
	char arg_full[256];
	char arg_full_non[256];
	int st_len;
	int sr_len;

	memset(str_to_write  , 0x0 , sizeof(str_to_write));
	memset(sn_header     , 0x0 , sizeof(sn_header));
	memset(serial_name   , 0x0 , sizeof(serial_name));
	memset(serial_number , 0x0 , sizeof(serial_number));
	memset(cmd_buf       , 0x0 , sizeof(cmd_buf));
	memset(data_buf      , 0x0 , sizeof(data_buf));
	memset(str_tmp       , 0x0 , sizeof(str_tmp));
	memset(arg_full      , 0x0 , sizeof(arg_full));
	memset(arg_full_non  , 0x0 , sizeof(arg_full_non));

	card = (CARD_INFO*) malloc(sizeof(CARD_INFO));
	card_tmp = (CARD_INFO*) malloc(sizeof(CARD_INFO));


	fd = open(DATA_PATH ,O_RDWR | O_CREAT,0666);
	if(fd < 0)
	{
		JCG("Error in open files!");
		return -1;
	}


	/* get args */
	while( i0 < (sizeof(arg_val)/sizeof(arg_val[0])))
	{
		memset(arg_val[i0], 0, sizeof(arg_val[0]));
		i0++;
	}

	/* get arguments */
	i0 = 0;
	sprintf(data_buf,"%s",argv);
	str_sn = strtok(data_buf,str_slip);
	while(str_sn != NULL)
	{
		if(i0 != 0)
			str_sn = strtok(NULL,str_slip);
		if(str_sn == NULL)
			break;
		sprintf(arg_val[i0], "%s", str_sn);

		JCG("arg_val[%d]:%s.\n",i0,arg_val[i0]);
		i0++;
		if(i0 > (sizeof(arg_val)/sizeof(arg_val[0])))
			break;
	}


	i0 = 0;
	while( i0 < (sizeof(arg_val)/sizeof(arg_val[0])) )
	{
		if((strncasecmp(arg_val[i0],"DEL", 3) == 0 ) \
				&& i0 < (sizeof(arg_val)/sizeof(arg_val[0]) - 2) )
		{
			JCG("arg_val[%d]:%s,arg[%d]:%s,arg[%d]:%s",i0,arg_val[i0], i0+1 ,arg_val[i0+1],i0+2,arg_val[i0+2]);
			//get sn by argument
			strcpy(serial_name   , arg_val[i0+1]);
			strcpy(serial_number , arg_val[i0+2]);

			sprintf(arg_full,"%s-%s\n",arg_val[i0+1],arg_val[i0+2]);
			sprintf(arg_full_non,"%s-%s",arg_val[i0+1],arg_val[i0+2]);

			/* Setup serial number */
			if(strlen(serial_number) != 0)
			{
				JCG("serial number is: %s",serial_number);
				ret = strip_sn_str(serial_number);
				if(ret < 0)
				{
					ret = -1;
					goto MAC_ERROR;
				}
				ret = check_dec(serial_number);
				if(ret < 0)
				{
					ret = -1;
					goto MAC_ERROR;
				}
			}
			else
			{
				JCG("serial number is wrong! shoule be ./mac_writer del-YHK-012345");
				ret = -1;
				goto MAC_ERROR;
			}
		}
		i0++;
	}

	JCG("serial number is:%s",serial_number);

	read_data(card, str_store);
	JCG("get read data:\n%s\n",str_store);

	memset(str_to_write,0x0,sizeof(str_to_write));

#ifdef ENABLE_STRUCT
	i0 = 0;
	while(card->next != NULL)
	{
		JCG("get read struct data:%s --> %s. serial_number is--> %s\n",card->name,card->number,serial_number);
		if(strcmp(card->number, serial_number) == 0 && strcmp(card->name, serial_name) == 0)
		{
		}
		else
		{
			sprintf(str_to_write,"%s%s-%s\n",str_to_write,card->name,card->number);
		}

		card_tmp = card;
		//memcpy(card_tmp , card, sizeof(CARD_INFO));
		if(card_tmp->next != NULL)
		{
			JCG("address -->0x%08x 0x%08x",card,card_tmp->next);
			card = (CARD_INFO*)card_tmp->next;

			JCG("address -->0x%08x 0x%08x",card,card_tmp->next);
			if(card->name == NULL || card->number == NULL)
			{
				break;
			}
			else if((strncasecmp(card->name, "YCT", 3) != 0) && strncasecmp(card->name,"YHK",3) !=0 )//|| card->next == NULL)
			{
				card  = NULL;
				break;
			}
			else
			{
				JCG("get read struct data:%s --> %s. serial_number is--> %s\n",card->name,card->number,serial_number);
			}
		}
		else
		{
			break;
		}
	}
	if(card != NULL)
	{
		JCG("get read struct data:\n%s --> %s\n",card->name,card->number);
		if(strcmp(card->number, serial_number) != 0)
			sprintf(str_to_write,"%s%s-%s\n",str_to_write,card->name,card->number);
	}
	JCG("data:%s",str_to_write);

#else		//not ENABLE_STRUCT
	JCG("str_store -->\n%s",str_store);
	JCG("arg_full -->%s",arg_full);
	JCG("arg_full_non -->%s",arg_full_non);
	str_search = strcasestr(str_store,arg_full);
	if(str_search == NULL)			//if use \n fail then with no \n
	{
		JCG();
		str_search = strcasestr(str_store,arg_full);
		if(str_search == NULL)
			return -1;
	}

	JCG("str_search --> %s",str_search);
	sr_len = strlen(str_store);
	st_len = strlen(str_search);
	strncpy(str_tmp,str_store,sr_len - st_len);
	JCG("str_tmp --> %s",str_tmp);
	sprintf(str_to_write,"%s%s",str_tmp,str_search + strlen(arg_full));

	JCG("delete-->%s",arg_full);
	JCG("str_tmp-->%s",str_tmp);
	JCG("str to write --> %s, strlen is --> %d",str_to_write, strlen(str_to_write));

#endif
	if(strlen(str_to_write) != 0)
	{
#ifdef USE_OPENSSL_RSA_ENCRYPT
	encrypt_write_data(str_to_write,0);
#else
	write(fd,str_to_write,strlen(str_to_write));
#endif
	}
	else
	{
		memset(str_to_write,0x0,sizeof(str_to_write));
		write(fd,str_to_write,sizeof(str_to_write));
	}

	close(fd);
	/*JCG("strlen of str to write is :%d",strlen(str_to_write));*/

#if 0
	/* write to flash */
	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"dd if=%s of=%s %s",DATA_PATH,SOURCE_DATA_PATH,CMD_ARGS_WRITE);
	system(cmd_buf);		/*system("dd if=/sdcard/sn.dat of=/dev/block/mmcblk1 seek=5200 bs=512");*/
	JCG("cmd-->%s",cmd_buf);
	sync();
#endif


	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"%s %s",CMD_PREFIX, "echo SUCESS!");
	system(cmd_buf);		/*system("/system/xbin/busybox echo SUCESS!");*/

	free(card_tmp);
	free(card);
	sync();
	return 0;
MAC_ERROR:
	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"%s %s",CMD_PREFIX, "echo ERROR!");
	system(cmd_buf);		/*system("echo ERROR!");*/
	free(card_tmp);
	free(card);
	LOGE("str format error!");
	return -1;
}
コード例 #3
0
ファイル: nmp_mod_wdd.c プロジェクト: dulton/nampu
WDD_TIME_DEAL_RESULT nmp_wdd_deal_version1_day(char *wdd_info)
{
	struct tm t_tm, start_tm;
	time_t cur_time, out_time;
	wdd_version1 *data = (wdd_version1 *)(&wdd_info[WDD_HEAD_LEN]);
	wdd_time *w_time = &data->authorize;
	guint ttd_day = ntohl(w_time->expire_ttd);
	gint ret;

	if (w_time->start_year == 0)	//未激活
	{
		cur_time = CUR_TIME;
		localtime_r(&cur_time, &t_tm);
		w_time->start_year = htons(t_tm.tm_year + 1900);
		w_time->start_mon = t_tm.tm_mon + 1;
		w_time->start_date = t_tm.tm_mday;
		nmp_print("<NmpModWdd>_____ day style _, w_time->start_year:%d, " \
			"ttd_day = %d", ntohs(w_time->start_year), ttd_day);

		guint size = WDD_HEAD_LEN + sizeof(wdd_version1);
#ifdef WDD_TEST
		ret = nmp_wdd_write_data_test(wdd_info);
#else
		ret = encrypt_write_data(g_handler, wdd_info, size, DATA_TYPE_1);
#endif
		if (ret != 0)
		{
			nmp_warning("<NmpModWdd>wdd write data error, maybe watchdog has " \
				"been removed.");
			return WDD_TIME_ERROR;
		}

		out_time = cur_time + WDD_ONE_DAY_SECONDS * ttd_day;
		localtime_r(&out_time, &t_tm);
		nmp_wdd_backup_time_info_date(&t_tm);

		if (ttd_day < WDD_TIME_WARNING_DAYS)
			return WDD_TIME_WARNING;
		return WDD_TIME_OK;
	}

	start_tm.tm_year = (gint)(ntohs(w_time->start_year)) - 1900;
	start_tm.tm_mon = w_time->start_mon - 1;
	start_tm.tm_mday = w_time->start_date;
	start_tm.tm_hour = 23;
	start_tm.tm_min = 59;
	start_tm.tm_sec = 59;

	out_time = mktime(&start_tm) + WDD_ONE_DAY_SECONDS * ttd_day;
	localtime_r(&out_time, &t_tm);
	nmp_wdd_backup_time_info_date(&t_tm);
	cur_time = CUR_TIME;
	//nmp_print("<NmpModWdd>day style, cur_time=%ld, out_time=%ld.", cur_time, out_time);

	if (out_time > cur_time)
	{
		if (out_time - cur_time < WDD_TIME_WARNING_LEN)
			return WDD_TIME_WARNING;
		return WDD_TIME_OK;
	}
	else
	{
		if (cur_time - out_time < WDD_TIME_OUT_WARNING_LEN)
			return WDD_TIME_OUT_WARNING;
		return WDD_TIME_OUT;
	}
}
コード例 #4
0
int write_data(char *argv, char* str)
{
	char str_to_write[2048];
	int i0 = 0;
	int  fd_read;
	int  fd;
	int  ret;

	char empty_str[11] = "-";
	char sn_header[16];
	char serial_number[SN_MAX_LEN];
	char *str_sn;
	char str_slip[] = "-";
	char arg_val[8][64];
	char *str_read;

	int fd0;
	char buf[sizeof(char)+1];
	char str_store[2048];
	int read_flag = 0;

	char cmd_buf[256];
	char data_buf[256];

	memset(str_to_write  , 0x0 , sizeof(str_to_write));
	memset(sn_header     , 0x0 , sizeof(sn_header));
	memset(serial_number , 0x0 , sizeof(serial_number));
	memset(cmd_buf       , 0x0 , sizeof(cmd_buf));
	memset(data_buf      , 0x0 , sizeof(data_buf));

	/* read data from flash*/
	read_data(NULL, str_store);
	JCG("get read data:%s\n",str_store);

	/* get args */
	while( i0 < (sizeof(arg_val)/sizeof(arg_val[0])))
	{
		memset(arg_val[i0], 0, sizeof(arg_val[0]));
		i0++;
	}

	JCG();
	/* get arguments */
	i0 = 0;
	sprintf(data_buf,"%s",argv);
	str_sn = strtok(data_buf,str_slip);
	while(str_sn != NULL)
	{
		if(i0 != 0)
			str_sn = strtok(NULL,str_slip);
		if(str_sn == NULL)
			break;
		sprintf(arg_val[i0], "%s", str_sn);

		JCG("arg_val[%d]:%s.\n",i0,arg_val[i0]);
		i0++;
		if(i0 > (sizeof(arg_val)/sizeof(arg_val[0])))
			break;
	}


	i0 = 0;
	while( i0 < (sizeof(arg_val)/sizeof(arg_val[0])) )
	{
		if((strncasecmp(arg_val[i0],"YCT", 3) == 0 || strncasecmp(arg_val[i0],"YHK", 3) == 0 ) \
				&& i0 < (sizeof(arg_val)/sizeof(arg_val[0]) -1) )
		{
			JCG("arg_val[%d]:%s,arg[%d]:%s",i0,arg_val[i0], i0,arg_val[i0+1]);
			//get sn by argument
			strcpy(serial_number, arg_val[i0+1]);

			/* Setup serial number */
			if(strlen(serial_number) != 0)
			{
				sprintf(sn_header,"%s",arg_val[i0]);
				JCG("serial number is: %s",serial_number);
				ret = strip_sn_str(serial_number);
				if(ret < 0)
				{
					ret = -1;
					goto MAC_ERROR;
				}
				ret = check_dec(serial_number);
				if(ret < 0)
				{
					ret = -1;
					goto MAC_ERROR;
				}
			}
			else
			{
				JCG("serial number is wrong!");
				ret = -1;
				goto MAC_ERROR;
			}

			sprintf(str_to_write, "%s%s%s%s\n", str_to_write , \
				sn_header,empty_str,serial_number);
		}
		i0++;
	}

#if 0
	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"%s %s %s",CMD_PREFIX, "rm -rf ", DATA_PATH);
	system(cmd_buf);		/*system("rm -f dsn.dat ");*/
#endif

	fd = open(DATA_PATH ,O_RDWR | O_CREAT | O_APPEND ,0666);

	if(fd < 0)
	{
		JCG("Error in open files!");
		return -1;
	}

	JCG("read data : \n%s\n", str_store );
	JCG("str_to_write: \n%s\n", str_to_write );
	sprintf(str_store,"%s%s",str_store, str_to_write);
#ifdef USE_OPENSSL_RSA_ENCRYPT
	close(fd);
	//encrypt_write_data(str_store,0);
	encrypt_write_data(str_to_write,1);
#else
	write(fd,str_store,strlen(str_store));
	close(fd);
#endif
	/*JCG("strlen of str to write is :%d",strlen(str_to_write));*/

#if 0
	/* write to flash */
	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"dd if=%s of=%s %s",DATA_PATH,SOURCE_DATA_PATH,CMD_ARGS_WRITE);
	system(cmd_buf);		/*system("dd if=/sdcard/sn.dat of=/dev/block/mmcblk1 seek=5200 bs=512");*/
	JCG("cmd-->%s",cmd_buf);
	sync();
#endif

	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"%s %s",CMD_PREFIX, "echo SUCESS!");
	system(cmd_buf);		/*system("/system/xbin/busybox echo SUCESS!");*/

	sync();
	return 0;
MAC_ERROR:
	memset(cmd_buf, 0x0 , sizeof(cmd_buf));
	sprintf(cmd_buf,"%s %s",CMD_PREFIX, "echo ERROR!");
	system(cmd_buf);		/*system("echo ERROR!");*/
	LOGE("str format error!");
	return -1;
}