示例#1
0
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);
}
示例#2
0
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);	
	}

}
示例#3
0
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);
}