From bc3c096b393b9c80857b60bd8a06a757197e13f3 Mon Sep 17 00:00:00 2001 From: Michael Theall Date: Wed, 18 Nov 2020 13:19:40 +0100 Subject: [PATCH] Handle keep-alive during transfers Closes #123 --- source/ftpSession.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/source/ftpSession.cpp b/source/ftpSession.cpp index ae211f6..c05f0aa 100644 --- a/source/ftpSession.cpp +++ b/source/ftpSession.cpp @@ -1478,8 +1478,9 @@ void FtpSession::readCommand (int const events_) else if (m_state != State::COMMAND) { // only some commands are available during data transfer - if (::strcasecmp (command, "ABOR") != 0 && ::strcasecmp (command, "STAT") != 0 && - ::strcasecmp (command, "QUIT") != 0) + if (::strcasecmp (command, "ABOR") != 0 && ::strcasecmp (command, "NOOP") != 0 && + ::strcasecmp (command, "PWD") != 0 && ::strcasecmp (command, "QUIT") != 0 && + ::strcasecmp (command, "STAT") != 0 && ::strcasecmp (command, "XPWD") != 0) { sendResponse ("503 Invalid command during transfer\r\n"); setState (State::COMMAND, true, true); @@ -2339,12 +2340,16 @@ void FtpSession::PORT (char const *args_) void FtpSession::PWD (char const *args_) { - setState (State::COMMAND, false, false); - - if (!authorized ()) + // handle keep-alive + if (m_state == State::COMMAND) { - sendResponse ("530 Not logged in\r\n"); - return; + setState (State::COMMAND, false, false); + + if (!authorized ()) + { + sendResponse ("530 Not logged in\r\n"); + return; + } } auto const path = encodePath (m_cwd);