static void ftp_pass_info(struct connection *c, struct read_buffer *rb) { int g = get_ftp_response(c, rb, 0); if (g == -1) { setcstate(c, S_FTP_ERROR); abort_connection(c); return; } if (!g) { read_from_socket(c, c->sock1, rb, ftp_pass_info); setcstate(c, S_LOGIN); return; } if (g >= 530 && g < 540) { setcstate(c, S_FTP_LOGIN); abort_connection(c); return; } if (g >= 400) { setcstate(c, S_FTP_UNAVAIL); abort_connection(c); return; } if (ftp_options.fast_ftp) ftp_retr_file(c, rb); else ftp_send_retr_req(c, S_GETH); }
void ftp_dummy_info(struct connection *c, struct read_buffer *rb) { int g = get_ftp_response(c, rb, 0); if (g == -1) { setcstate(c, S_FTP_ERROR); abort_connection(c); return; } if (!g) { read_from_socket(c, c->sock1, rb, ftp_dummy_info); return; } ftp_retr_file(c, rb); }
int main(int argc, char** argv){ if(argc != 2){ printUsage(); return 1; } int val = validateURL(argv[1], sizeof(argv[1])); int anon = 1; char user[MAX_STRING_SIZE]; char password[MAX_STRING_SIZE]; char host[MAX_STRING_SIZE]; char path[MAX_STRING_SIZE]; switch(val){ case 0: anon = 0; case 1: parseURL(argv[1], sizeof(argv[1]), host, user, password, path, anon); break; case 2: printUsage(); return 1; default: return 1; } ftp_t* ftp = ftp_init(host, user, password, path); if(ftp == NULL) return 1; if(ftp_connect(ftp) < 0) return 1; if(ftp_login_host(ftp) < 0) return 1; if(ftp_set_passive_mode(ftp) < 0) return 1; if(ftp_retr_file(ftp) < 0) return 1; if(ftp_download_file(ftp) < 0) return 1; if(ftp_disconnect(ftp) < 0) return 1; ftp_delete(ftp); return 0; }