From 221f3006fdc428bbf9237eb3e59304a5f085949d Mon Sep 17 00:00:00 2001
From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
Date: Fri, 2 Mar 2018 09:55:51 -0500
Subject: [PATCH] data tx: fix GO msg

GO message was send at every "incoming-read" loop.
Only one msg is needed.

Change-Id: I11a808eced6c08a9e76e9615d2218c43710f7546
---
 src/ftp_server.cpp | 11 +++++++----
 src/ftp_server.h   |  1 +
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/ftp_server.cpp b/src/ftp_server.cpp
index c850057d5c..29eb628888 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 081bdacfd0..deaf1e8baa 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};
 };
 
-- 
GitLab