diff --git a/src/ftp_server.cpp b/src/ftp_server.cpp index c850057d5c84ece65f36629f36f636ce8fcab813..29eb628888bbbaf5c47c324afa0a12893d8877eb 100644 --- a/src/ftp_server.cpp +++ b/src/ftp_server.cpp @@ -70,6 +70,8 @@ FtpServer::startNewFile() if (!out_) { RING_DBG() << "[FTP] transfer aborted by client"; closed_ = true; // send NOK msg at next read() + } else { + go_ = true; } return bool(out_); } @@ -96,11 +98,12 @@ FtpServer::read(std::vector<uint8_t>& buffer) const } else { buffer.resize(0); } - return true; + } else if (go_) { + go_ = false; + buffer.resize(3); + buffer[0] = 'G'; buffer[1] = 'O'; buffer[2] = '\n'; + RING_DBG() << "[FTP] sending GO order"; } - buffer.resize(3); - buffer[0] = 'G'; buffer[1] = 'O'; buffer[2] = '\n'; - RING_DBG() << "[FTP] sending GO order"; return true; } diff --git a/src/ftp_server.h b/src/ftp_server.h index 081bdacfd0940d2e84f1351e53119d66ffbffcb7..deaf1e8baad766a9adf0ed3100744447ae36cfa2 100644 --- a/src/ftp_server.h +++ b/src/ftp_server.h @@ -60,6 +60,7 @@ private: std::string displayName_; std::array<char, 1000> line_; mutable bool closed_ {false}; + mutable bool go_ {false}; FtpState state_ {FtpState::PARSE_HEADERS}; };