From a5518540fc603b4a5cba59a75870ec4e6e14db93 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sat, 9 Nov 2002 11:54:12 +0000 Subject: [PATCH] Fixed active FTP transfer (broken in rev 1.11), was waiting for connection from server before sending LIST/RETR command. --- src/sbbs3/execnet.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/sbbs3/execnet.cpp b/src/sbbs3/execnet.cpp index fac39ad119..6cdf9301c5 100644 --- a/src/sbbs3/execnet.cpp +++ b/src/sbbs3/execnet.cpp @@ -614,7 +614,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr) ip_addr.dw=ntohl(ctrl_addr.sin_addr.s_addr); port.w=ntohs(addr->sin_port); - sprintf(cmd,"PORT %u,%u,%u,%u,%hu,%hu" + sprintf(cmd,"PORT %u,%u,%u,%u,%u,%u" ,ip_addr.b[3] ,ip_addr.b[2] ,ip_addr.b[1] @@ -666,8 +666,20 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d close_socket(data_sock); return(false); } + } - } else { /* Normal (Active) FTP */ + if(dir) + sprintf(cmd,"LIST %s",src); + else + sprintf(cmd,"RETR %s",src); + + if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) + || atoi(rsp)!=150 /* Open data connection */) { + close_socket(data_sock); + return(false); + } + + if(!(csi->ftp_mode&CS_FTP_PASV)) { /* Normal (Active) FTP */ /* Setup for select() */ tv.tv_sec=TIMEOUT_SOCK_LISTEN; @@ -697,17 +709,6 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d data_sock=accept_sock; } - if(dir) - sprintf(cmd,"LIST %s",src); - else - sprintf(cmd,"RETR %s",src); - - if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) - || atoi(rsp)!=150 /* Open data connection */) { - close_socket(data_sock); - return(false); - } - if(!dir) if((fp=fopen(dest,"wb"))==NULL) { close_socket(data_sock); -- GitLab