void downDir(int fd_client, char *dir_name) { DIR *pdir = opendir(dir_name); if(pdir == NULL){ perror("opedir!\n"); send(fd_client, "over", 8, 0); return ; } chdir(dir_name); struct dirent* mydirent; struct stat mystat; while((mydirent = readdir(pdir)) != NULL){ send(fd_client, "continue", 8, 0); stat(mydirent->d_name, &mystat); if(S_ISDIR(mystat.st_mode)){ if(strncmp(mydirent->d_name, ".", 1) == 0){ send(fd_client, "nodir", 8, 0); continue; } else{ send(fd_client, "dir", 8, 0); send(fd_client, mydirent->d_name, sizeof(mydirent->d_name), 0); //printf("%s: %d\n", mydirent->d_name, sizeof(mydirent->d_name)); downDir(fd_client, mydirent->d_name); } } else{ downFile(fd_client, (mydirent->d_name)); } } send(fd_client, "over", 8, 0); chdir(".."); closedir(pdir); }
//do_gets void do_gets(int fd_client, int role) { if(role == 3){ return ; } else{ struct stat mystat; int send_len; char file_name[256] = "0"; memset(&file_name, 0 , 256); recv_buf(fd_client, (char*)&send_len, 4); recv_buf(fd_client, file_name, send_len); file_name[strlen(file_name) - 1] = '\0'; lstat(file_name, &mystat); if(S_ISDIR(mystat.st_mode)){ send(fd_client, "dir", 8, 0); downDir(fd_client, file_name); } else{ downFile(fd_client, file_name); } printf("send complient!\n"); } }
void on_btnupdate_clicked(GtkButton *button) { //down em all GSList *lurl = NULL; GSList *ldest = NULL; for(gint i=0;i<num_of_lines;++i) { gchar trainfolder[512]; g_snprintf(trainfolder,512,"%s/%s",getProgData("trains"),lines[i].line); g_mkdir_with_parents(trainfolder,0755); for(gint j=0;j<lines[i].num;++j) { gchar url[200]; gchar dest[512]; g_snprintf(dest,512,"%s/%s.pdf",trainfolder,lines[i].stations[j].name); g_snprintf(url,200,"http://transitchicago.com/maps/rail/%s/%s.pdf\n",lines[i].line,lines[i].stations[j].name); lurl = g_slist_prepend(lurl,url); ldest = g_slist_prepend(ldest,dest); } } if(!downFile(lurl,ldest)) goto died; load_trains(); return; died: //TODO: delete train info already dled return; }