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; }
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; }
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; } }
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; }