/* download files/folders */ void ftp_download(ftp_t *ftp, char *path) { char *line = NULL; char buffer[MAX_STR]; FILE *data; int co = 0; ftp->alarm_sec = 3; fprintf(ftp->FD, "SIZE %s\r\n", path); line = ftp_getline(ftp); ftp->code = atoi(line); if ( ftp->code == 213 ) { ftp_mkcon(ftp); ftp_download_single(ftp, path, 1); } else { /* TODO: add download time */ print(3, ">>> %sStart downloading from%s %s\'%s\'%s ...\n",YEL,END,GREEN,path,END); ftp->dataport = ftp_getdataport(ftp); fprintf(ftp->FD, "NLST %s\r\n", path); data = tcp_connect(ip, ftp->dataport, "r"); ftp_getline(ftp); while ( fgets(buffer, sizeof(buffer), data)) { buffer[strlen(buffer)-2] = '\0'; ftp_mkcon(ftp); ftp_download_single(ftp, buffer, 0); co++; } fclose(data); close(dfd); print(0, ">>> %sFinished! we have %s%s%d files (:%s", GREEN,END, YEL,co,END, path); } }
int main(int argc, char **argv) { skod_t skod; ftp_t ftp; skod_init(&skod); skod_parse_cla(argc, argv, &skod); signal(SIGINT, signal_handler); /* Init FTP*/ ftp.user = skod.user; ftp.password = skod.password; ftp.server = skod.server; ftp.port = skod.port; ftp.alarm_sec = 1; /* High risk */ ftp_mkcon(&ftp); /* --dest, -e*/ if ( skod.dest != NULL ) ftp_cwd(&ftp, skod.dest); else if ( skod.dest == NULL && flag == 4 ) die("You need to pass --dest (destination folder) with --upload."); switch(flag) { case 1: ftp_list(&ftp, skod.path, 1); break; case 2: ftp_remove(&ftp, skod.path); break; case 3: ftp_download_single(&ftp, skod.path); break; case 4: ftp_upload_single(&ftp, skod.path); break; case 5: ftp_cat(&ftp, skod.path); break; case 6: printf("%d\n", ftp_size(&ftp, skod.path)); break; case 7: printf("%s\n", ftp_pwd(&ftp)); break; case 8: ftp_delete(&ftp, skod.path); break; case 10: ftp_mdtm(&ftp, skod.path); break; case 99: skod_scan(&skod, &ftp); break; } ftp_close(&ftp); return 0; }