Пример #1
0
void sambaname2ip(server *srv, connection *con){

#if EMBEDDED_EANBLE
	
	char* aa = nvram_get_smbdav_str();

	if(aa==NULL){
		return;
	}
	
	char* str_smbdav_list = (char*)malloc(strlen(aa)+1);
	strcpy(str_smbdav_list, aa);
	#ifdef APP_IPKG
	free(aa);
	#endif
	if(str_smbdav_list!=NULL){
		char * pch1;
		char * pch;
		pch = strtok(str_smbdav_list, "<>");	
		
		while(pch!=NULL){
			
			char name[50]={0}, ip[20]={0};
			int name_len, ip_len;
			
			//- PC Name
			name_len = strlen(pch);			
			strncpy(name, pch, name_len);
			name[name_len] = '\0';
						
			//- IP Address
			pch = strtok(NULL,"<>");
			ip_len = strlen(pch);
			strncpy(ip, pch, ip_len);
			ip[ip_len] = '\0';
						
			//- MAC Address
			pch = strtok(NULL,"<>");
						
			//- PC Online?
			pch = strtok(NULL,"<>");
			
			int index = strstr(con->request.uri->ptr, name) - con->request.uri->ptr;			
			if(index==1 && strcmp(pch, "1")==0){
				char buff[4096];
				char* tmp = replace_str(con->request.uri->ptr, 
									    name, 
									    ip, 
									    (char *)&buff[0]);
								
				buffer_copy_string(con->request.uri, tmp);	
				
				buffer_copy_string(con->match_smb_ip, ip);
				buffer_copy_string(con->replace_smb_name, name);
				
				break;
			}
			
			pch = strtok(NULL,"<>");			
		}

		free(str_smbdav_list);
	}
#else
	size_t j;
	int length, filesize;
	char* g_temp_file = "/tmp/arpping_list";
	FILE* fp = fopen(g_temp_file, "r");
	if(fp!=NULL){		
		
		char str[1024];

		while(fgets(str,sizeof(str),fp) != NULL)
		{
      		// strip trailing '\n' if it exists
      		int len = strlen(str)-1;
      		if(str[len] == '\n') 
         		str[len] = 0;

			char name[50]={0}, ip[20]={0};
			int name_len, ip_len;
			char * pch;

			//- PC Name
			pch = strtok(str,"<");
			name_len = strlen(pch);
			strncpy(name, pch, name_len);
			name[name_len] = '\0';
			
			//- IP Address
			pch = strtok(NULL,"<");
			ip_len = strlen(pch);
			strncpy(ip, pch, ip_len);
			ip[ip_len] = '\0';
			
			//- MAC Address
			pch = strtok(NULL,"<");
			
			//- PC Online?
			pch = strtok(NULL,"<");			

			int index = strstr(con->request.uri->ptr, name) - con->request.uri->ptr;			
			if(index==1 && strcmp(pch, "1")==0){
				char buff[4096];
				char* tmp = replace_str(con->request.uri->ptr, 
									    name, 
									    ip,
									    (char *)&buff[0]);
								
				buffer_copy_string(con->request.uri, tmp);	
				
				buffer_copy_string(con->match_smb_ip, ip);
				buffer_copy_string(con->replace_smb_name, name);				
				
				break;
			}
			
		}
			
		fclose(fp);
	}
#endif

}
Пример #2
0
void read_arpping_list(void)
{
#if EMBEDDED_EANBLE
	char* aa = nvram_get_smbdav_str();

	if(aa==NULL){
		return;
	}
	
	char* str_smbdav_list = (char*)malloc(strlen(aa)+1);
	strcpy(str_smbdav_list, aa);
	Cdbg(DBE, "read_arpping_list................str_smbdav_list=%s", str_smbdav_list);
#ifdef APP_IPKG
	free(aa);
#endif
	if(str_smbdav_list!=NULL){
		char * pch;
		pch = strtok(str_smbdav_list, "<>");
		
		while(pch!=NULL){
			
			smb_srv_info_t *smb_srv_info;
			smb_srv_info = (smb_srv_info_t *)calloc(1, sizeof(smb_srv_info_t));
			
			//- PC Name
			Cdbg(DBE, "name=%s", pch);
			smb_srv_info->name = buffer_init();
			buffer_copy_string_len(smb_srv_info->name, pch, strlen(pch));
						
			//- IP Address
			pch = strtok(NULL,"<>");
			if(pch==NULL){
				fprintf(stderr, "pch=NULL\n");
				nvram_set_smbdav_str("");
				return;
			}
			Cdbg(DBE, "ip=%s", pch);
			smb_srv_info->ip = buffer_init();
			buffer_copy_string_len(smb_srv_info->ip, pch, strlen(pch));
			
			//- MAC Address
			pch = strtok(NULL,"<>");
			if(pch){
				Cdbg(DBE, "mac=%s", pch);
				smb_srv_info->mac = buffer_init();
				buffer_copy_string_len(smb_srv_info->mac, pch, strlen(pch));
			}
			
			//- PC Online?
			pch = strtok(NULL,"<>");
			if(pch){
				Cdbg(DBE, "Online=%s", pch);
				smb_srv_info->online= atoi(pch);
			}
			
			DLIST_ADD(smb_srv_info_list, smb_srv_info);

			//- Next
			pch = strtok(NULL,"<>");
		}

		free(str_smbdav_list);
	}

#else
	size_t j;
	int length, filesize;
	FILE* fp = fopen(g_temp_file, "r");
	if(fp!=NULL){		
		
		char str[1024];

		while(fgets(str,sizeof(str),fp) != NULL)
		{
			char * pch;
			int name_len, ip_len, mac_len, online;
			
      			// strip trailing '\n' if it exists
      			int len = strlen(str)-1;
      			if(str[len] == '\n') 
         			str[len] = 0;

			smb_srv_info_t *smb_srv_info;
			smb_srv_info = (smb_srv_info_t *)calloc(1, sizeof(smb_srv_info_t));

			//smb_srv_info->id = thread_id;

			//- PC Name
			smb_srv_info->name = buffer_init();
			pch = strtok(str,"<");
			buffer_copy_string_len(smb_srv_info->name, pch, strlen(pch));
			//Cdbg(DBE, "from arpping-list %s", smb_srv_info->name->ptr);
			
			//- IP Address
			smb_srv_info->ip = buffer_init();
			pch = strtok(NULL,"<");
			buffer_copy_string_len(smb_srv_info->ip, pch, strlen(pch));

			//- MAC Address
			smb_srv_info->mac = buffer_init();
			pch = strtok(NULL,"<");
			buffer_copy_string_len(smb_srv_info->mac, pch, strlen(pch));

			//- PC Online?
			pch = strtok(NULL,"<");
			smb_srv_info->online = atoi(pch);
						
			DLIST_ADD(smb_srv_info_list, smb_srv_info);
		}
			
		fclose(fp);
	}
#endif
}