void check_nmp_db(CLIENT_DETAIL_INFO_TABLE *p_client_tab, int client_no) { char new_mac[13]; char *search_list, *nv, *nvp, *b; char *db_mac, *db_user_def, *db_device_name, *db_type, *db_http, *db_printer, *db_itune; if(!nmp_client_list) return; NMP_DEBUG("check_nmp_db:\n"); search_list = strdup(nmp_client_list); convert_mac_to_string(p_client_tab->mac_addr[client_no], new_mac); NMP_DEBUG("search_list= %s\n", search_list); if(strstr(search_list, new_mac)==NULL) return; nvp = nv = search_list; while (nv && (b = strsep(&nvp, "<")) != NULL) { if (vstrsep(b, ">", &db_mac, &db_user_def, &db_device_name, &db_type, &db_http, &db_printer, &db_itune) != 7) continue; NMP_DEBUG_M("DB: %s,%s,%s,%s,%s,%s,%s\n", db_mac, db_user_def, db_device_name, db_type, db_http, db_printer, db_itune); if (!strcmp(db_mac, new_mac)) { NMP_DEBUG("*** %s at DB!!! Update to memory\n",new_mac); strcpy(p_client_tab->user_define[client_no], db_user_def); strcpy(p_client_tab->device_name[client_no], db_device_name); p_client_tab->type[client_no] = atoi(db_type); p_client_tab->http[client_no] = atoi(db_http); p_client_tab->printer[client_no] = atoi(db_printer); p_client_tab->itune[client_no] = atoi(db_itune); break; } } SAFE_FREE(search_list); }
void write_to_nvram(CLIENT_DETAIL_INFO_TABLE *p_client_tab) { char new_mac[13], *dst_list; char *nv, *nvp, *b, *search_list; char *db_mac, *db_user_def, *db_device_name, *db_type, *db_http, *db_printer, *db_itune; convert_mac_to_string(p_client_tab->mac_addr[p_client_tab->detail_info_num], new_mac); NMP_DEBUG("*** write_to_nvram: %s ***\n",new_mac); search_list = strdup(nmp_client_list); b = strstr(search_list, new_mac); if(b!=NULL) { //find the client in the DB dst_list = malloc(sizeof(char)*10000); NMP_DEBUG_M("client data in DB: %s\n", new_mac); nvp = nv = b; *(b-1) = '\0'; strcpy(dst_list, search_list); NMP_DEBUG_M("dst_list= %s\n", dst_list); //b++; while (nv && (b = strsep(&nvp, "<")) != NULL) { if (b == NULL) continue; if (vstrsep(b, ">", &db_mac, &db_user_def, &db_device_name, &db_type, &db_http, &db_printer, &db_itune) != 7) continue; NMP_DEBUG_M("%s,%s,%d,%d,%d,%d\n", db_mac, db_user_def, db_device_name, atoi(db_type), atoi(db_http), atoi(db_printer), atoi(db_itune)); if (!strcmp(p_client_tab->device_name[p_client_tab->detail_info_num], db_device_name) && p_client_tab->type[p_client_tab->detail_info_num] == atoi(db_type) && p_client_tab->http[p_client_tab->detail_info_num] == atoi(db_http) && p_client_tab->printer[p_client_tab->detail_info_num] == atoi(db_printer) && p_client_tab->itune[p_client_tab->detail_info_num] == atoi(db_itune) ) { NMP_DEBUG("DATA the same!\n"); return; } sprintf(dst_list, "%s<%s<%s", dst_list, db_mac, db_user_def); if (strcmp(p_client_tab->device_name[p_client_tab->detail_info_num], "")) { NMP_DEBUG("Update device name: %s.\n", p_client_tab->device_name[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%s", dst_list, p_client_tab->device_name[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_device_name); if (p_client_tab->type[p_client_tab->detail_info_num] != 6) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->type[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->type[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_type); if (!strcmp(db_http, "0") ) { client_updated = 1; NMP_DEBUG("Update http: %d\n", p_client_tab->http[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->http[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_http); if (!strcmp(db_printer, "0") ) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->printer[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->printer[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_printer); if (!strcmp(db_itune, "0")) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->itune[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->itune[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_itune); if(nvp != NULL) { strcat(dst_list, "<"); strcat(dst_list, nvp); } nmp_client_list = strdup(dst_list); free(dst_list); NMP_DEBUG_M("*** Update nmp_client_list:\n%s\n", nmp_client_list); nvram_set("nmp_client_list", nmp_client_list); break; } } else { //new client NMP_DEBUG_M("new client: %d-%s,%s,%d\n",p_client_tab->detail_info_num, new_mac, p_client_tab->device_name[p_client_tab->detail_info_num], p_client_tab->type[p_client_tab->detail_info_num]); sprintf(nmp_client_list,"%s<%s>>%s>%d>%d>%d>%d", nmp_client_list, new_mac, p_client_tab->device_name[p_client_tab->detail_info_num], p_client_tab->type[p_client_tab->detail_info_num], p_client_tab->http[p_client_tab->detail_info_num], p_client_tab->printer[p_client_tab->detail_info_num], p_client_tab->itune[p_client_tab->detail_info_num] ); nvram_set("nmp_client_list", nmp_client_list); } }
void write_to_cfg_node(CLIENT_DETAIL_INFO_TABLE *p_client_tab) { char new_mac[13], *dst_list; char *nv, *nvp, *b = NULL, *search_list = NULL; char *db_mac, *db_user_def, *db_device_name, *db_type, *db_http, *db_printer, *db_itune; FILE *fp = NULL; convert_mac_to_string(p_client_tab->mac_addr[p_client_tab->detail_info_num], new_mac); //Andy Chiu, 2014/10/27. get station list int count = 0; int ret = 0; char *tmpbuf = NULL; NMP_DEBUG("*** write_to_cfg_node: %s ***\n",new_mac); if(nmp_client_list) { search_list = strdup(nmp_client_list); b = strstr(search_list, new_mac); } if(b!=NULL) { //find the client in the DB dst_list = malloc(sizeof(char)*10000); NMP_DEBUG_M("client data in DB: %s\n", new_mac); nvp = nv = b; *(b-1) = '\0'; strcpy(dst_list, search_list); NMP_DEBUG_M("dst_list= %s\n", dst_list); //b++; while (nv && (b = strsep(&nvp, "<")) != NULL) { if (b == NULL) continue; if (vstrsep(b, ">", &db_mac, &db_user_def, &db_device_name, &db_type, &db_http, &db_printer, &db_itune) != 7) continue; NMP_DEBUG_M("%s,%s,%d,%d,%d,%d\n", db_mac, db_user_def, db_device_name, atoi(db_type), atoi(db_http), atoi(db_printer), atoi(db_itune)); if (!strcmp(p_client_tab->device_name[p_client_tab->detail_info_num], db_device_name) && p_client_tab->type[p_client_tab->detail_info_num] == atoi(db_type) && p_client_tab->http[p_client_tab->detail_info_num] == atoi(db_http) && p_client_tab->printer[p_client_tab->detail_info_num] == atoi(db_printer) && p_client_tab->itune[p_client_tab->detail_info_num] == atoi(db_itune) ) { NMP_DEBUG("DATA the same!\n"); return; } sprintf(dst_list, "%s<%s<%s", dst_list, db_mac, db_user_def); if (strcmp(p_client_tab->device_name[p_client_tab->detail_info_num], "")) { NMP_DEBUG("Update device name: %s.\n", p_client_tab->device_name[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%s", dst_list, p_client_tab->device_name[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_device_name); if (p_client_tab->type[p_client_tab->detail_info_num] != 6) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->type[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->type[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_type); if (!strcmp(db_http, "0") ) { client_updated = 1; NMP_DEBUG("Update http: %d\n", p_client_tab->http[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->http[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_http); if (!strcmp(db_printer, "0") ) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->printer[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->printer[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_printer); if (!strcmp(db_itune, "0")) { client_updated = 1; NMP_DEBUG("Update type: %d\n", p_client_tab->itune[p_client_tab->detail_info_num]); sprintf(dst_list, "%s>%d", dst_list, p_client_tab->itune[p_client_tab->detail_info_num]); } else sprintf(dst_list, "%s>%s", dst_list, db_itune); if(nvp != NULL) { strcat(dst_list, "<"); strcat(dst_list, nvp); } //Andy Chiu, 2014/10/22. Fix memory leak SAFE_FREE(nmp_client_list); nmp_client_list = strdup(dst_list); SAFE_FREE(dst_list); NMP_DEBUG_M("*** Update nmp_client_list:\n%s\n", nmp_client_list); write_to_file(nmp_client_path, nmp_client_list, strlen(nmp_client_list), "w"); //nvram_set("nmp_client_list", nmp_client_list); break; } } else { //new client NMP_DEBUG_M("new client: %d-%s,%s,%d\n",p_client_tab->detail_info_num, new_mac, p_client_tab->device_name[p_client_tab->detail_info_num], p_client_tab->type[p_client_tab->detail_info_num]); tmpbuf = malloc(10000); if(!tmpbuf) { NMP_DEBUG("[%s, %d]Can't alloc memory\n", __FUNCTION__, __LINE__); return; } //sprintf(nmp_client_list,"%s<%s>>%s>%d>%d>%d>%d", nmp_client_list, sprintf(tmpbuf,"%s<%s>>%s>%d>%d>%d>%d", nmp_client_list? nmp_client_list: "", new_mac, p_client_tab->device_name[p_client_tab->detail_info_num], p_client_tab->type[p_client_tab->detail_info_num], p_client_tab->http[p_client_tab->detail_info_num], p_client_tab->printer[p_client_tab->detail_info_num], p_client_tab->itune[p_client_tab->detail_info_num] ); SAFE_FREE(nmp_client_list); nmp_client_list = strdup(tmpbuf); SAFE_FREE(tmpbuf); //nvram_set("nmp_client_list", nmp_client_list); NMP_DEBUG("[%s, %d]\n", __FUNCTION__, __LINE__); write_to_file(nmp_client_path, nmp_client_list, strlen(nmp_client_list), "w"); NMP_DEBUG("[%s, %d]\n", __FUNCTION__, __LINE__); } SAFE_FREE(search_list); //Andy Chiu, 2014/10/27. update the cfg_node int i; char buf[128]; fp = fopen(cl_path, "w"); //Andy Chiu, 2014/12/03 count = 0; for(i = 0; i < 255; ++i) { if(p_client_tab->exist[i]) //item exist { char attr[64]; char buf[256]; sprintf(buf, "<%d.%d.%d.%d>%02x:%02x:%02x:%02x:%02x:%02x>%s>%d>%d>%d>%d", p_client_tab->ip_addr[i][0], p_client_tab->ip_addr[i][1], p_client_tab->ip_addr[i][2], p_client_tab->ip_addr[i][3], p_client_tab->mac_addr[i][0], p_client_tab->mac_addr[i][1] , p_client_tab->mac_addr[i][2], p_client_tab->mac_addr[i][3], p_client_tab->mac_addr[i][4], p_client_tab->mac_addr[i][5], p_client_tab->device_name[i], p_client_tab->type[i], p_client_tab->http[i], p_client_tab->printer[i], p_client_tab->itune[i]); sprintf(attr, "dev%d", count); // ret = tcapi_set("ClientList_Entry", attr, buf); // if(ret) // NMP_DEBUG_M("set device(%d) failed!(%d)(%s)\n", count, ret, buf); if(fp) //Andy Chiu, 2014/12/03 fwrite(buf, sizeof(char), strlen(buf), fp); ++count; } if( count >= p_client_tab->detail_info_num + 1) break; } if(fp) //Andy Chiu, 2014/12/03 fclose(fp); sprintf(buf, "%d", p_client_tab->detail_info_num + 1); ret = tcapi_set("ClientList_Common", "size", buf); if(ret) NMP_DEBUG_M("set ClientList_Common:size failed!\n"); NMP_DEBUG_M("new client list size is %d\n", p_client_tab->detail_info_num + 1); }