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