Browse Source

Improving logging of FTP transfer failures

Source commit: fc2a249289dce005421e75841a7413d9240d62a2
Martin Prikryl 5 years ago
parent
commit
14add145f2

+ 15 - 1
source/core/Terminal.cpp

@@ -439,8 +439,18 @@ TRobustOperationLoop::~TRobustOperationLoop()
 bool TRobustOperationLoop::TryReopen(Exception & E)
 {
   FRetry = FCanRetry && !FTerminal->Active;
-  if (FRetry)
+  if (!FCanRetry)
   {
+    FRetry = false;
+  }
+  else if (FTerminal->Active)
+  {
+    FTerminal->LogEvent(1, L"Session is open, will not retry transfer");
+    FRetry = false;
+  }
+  else
+  {
+    FRetry = true;
     if (FAnyTransfer != NULL)
     {
       // if there was any transfer, reset the global timestamp
@@ -453,6 +463,10 @@ bool TRobustOperationLoop::TryReopen(Exception & E)
       else
       {
         FRetry = FTerminal->ContinueReopen(FStart);
+        if (!FRetry)
+        {
+          FTerminal->LogEvent(L"Retry interval expired, will not retry transfer");
+        }
       }
     }
 

+ 15 - 0
source/filezilla/ApiLog.cpp

@@ -85,3 +85,18 @@ int CApiLog::GetOptionVal(int OptionID) const
   DebugAssert(FIntern != NULL);
   return FIntern->GetOptionVal(OptionID);
 }
+
+void CApiLog::LogError(int Error)
+{
+  wchar_t * Buffer;
+  int Len = FormatMessage(
+    FORMAT_MESSAGE_FROM_SYSTEM |
+    FORMAT_MESSAGE_IGNORE_INSERTS |
+    FORMAT_MESSAGE_ARGUMENT_ARRAY |
+    FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, Error, 0, (LPTSTR)&Buffer, 0, NULL);
+  if (Len > 0)
+  {
+    LogMessageRaw(FZ_LOG_ERROR, Buffer);
+    LocalFree(Buffer);
+  }
+}

+ 1 - 0
source/filezilla/ApiLog.h

@@ -17,6 +17,7 @@ public:
 
   void LogMessage(int nMessageType, LPCTSTR pMsgFormat, ...) const;
   void LogMessageRaw(int nMessageType, LPCTSTR pMsg) const;
+  void LogError(int Error);
 
   CString GetOption(int OptionID) const;
   int GetOptionVal(int OptionID) const;

+ 6 - 2
source/filezilla/FtpControlSocket.cpp

@@ -1191,8 +1191,10 @@ void CFtpControlSocket::OnReceive(int nErrorCode)
   {
     delete [] buffer;
     buffer = NULL;
-    if (GetLastError() != WSAEWOULDBLOCK)
+    int Error = GetLastError();
+    if (Error != WSAEWOULDBLOCK)
     {
+      LogError(Error);
       ShowStatus(IDS_STATUSMSG_DISCONNECTED, FZ_LOG_ERROR);
       DoClose();
     }
@@ -6199,8 +6201,10 @@ void CFtpControlSocket::OnSend(int nErrorCode)
   int res = CAsyncSocketEx::Send(m_sendBuffer, m_sendBufferLen);
   if (res == -1)
   {
-    if (GetLastError() != WSAEWOULDBLOCK)
+    int Error = GetLastError();
+    if (Error != WSAEWOULDBLOCK)
     {
+      LogError(Error);
       ShowStatus(IDS_ERRORMSG_CANTSENDCOMMAND, FZ_LOG_ERROR);
       DoClose();
     }

+ 2 - 15
source/filezilla/TransferSocket.cpp

@@ -658,6 +658,7 @@ void CTransferSocket::OnSend(int nErrorCode)
         }
         else if (nError != WSAEWOULDBLOCK)
         {
+          LogError(nError);
           CloseOnShutDownOrError(CSMODE_TRANSFERERROR);
         }
         UpdateStatusBar(false);
@@ -770,6 +771,7 @@ void CTransferSocket::OnSend(int nErrorCode)
         }
         else
         {
+          LogError(nError);
           CloseOnShutDownOrError(CSMODE_TRANSFERERROR);
         }
         UpdateStatusBar(false);
@@ -1161,18 +1163,3 @@ void CTransferSocket::CloseOnShutDownOrError(int Mode)
     }
   }
 }
-
-void CTransferSocket::LogError(int Error)
-{
-  wchar_t * Buffer;
-  int Len = FormatMessage(
-    FORMAT_MESSAGE_FROM_SYSTEM |
-    FORMAT_MESSAGE_IGNORE_INSERTS |
-    FORMAT_MESSAGE_ARGUMENT_ARRAY |
-    FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, Error, 0, (LPTSTR)&Buffer, 0, NULL);
-  if (Len > 0)
-  {
-    m_pOwner->ShowStatus(Buffer, FZ_LOG_ERROR);
-    LocalFree(Buffer);
-  }
-}

+ 0 - 1
source/filezilla/TransferSocket.h

@@ -82,7 +82,6 @@ protected:
   void CloseAndEnsureSendClose(int Mode);
   void EnsureSendClose(int Mode);
   void CloseOnShutDownOrError(int Mode);
-  void LogError(int Error);
   void SetBuffers();
 
   LARGE_INTEGER m_LastUpdateTime;