void CFileZillaEnginePrivate::OnTimer(wxTimerEvent& event) { if (!m_pCurrentCommand || m_pCurrentCommand->GetId() != cmd_connect) { wxFAIL_MSG(_T("CFileZillaEnginePrivate::OnTimer called without pending cmd_connect")); return; } wxASSERT(!IsConnected()); #if 0//__WXDEBUG__ const CConnectCommand *pConnectCommand = (CConnectCommand *)m_pCurrentCommand; wxASSERT(!GetRemainingReconnectDelay(pConnectCommand->GetServer())); #endif delete m_pControlSocket; m_pControlSocket = 0; ContinueConnect(); }
int CFileZillaEnginePrivate::ContinueConnect() { const CConnectCommand *pConnectCommand = (CConnectCommand *)m_pCurrentCommand; const CServer& server = pConnectCommand->GetServer(); unsigned int delay = GetRemainingReconnectDelay(server); if (delay) { m_pLogging->LogMessage(Status, wxPLURAL("Delaying connection for %d second due to previously failed connection attempt...", "Delaying connection for %d seconds due to previously failed connection attempt...", (delay + 999) / 1000), (delay + 999) / 1000); m_retryTimer.Start(delay, true); return FZ_REPLY_WOULDBLOCK; } switch (server.GetProtocol()) { case FTP: case FTPS: case FTPES: case INSECURE_FTP: m_pControlSocket = new CFtpControlSocket(this); break; case SFTP: m_pControlSocket = new CSftpControlSocket(this); break; case HTTP: case HTTPS: m_pControlSocket = new CHttpControlSocket(this); break; default: m_pLogging->LogMessage(Debug_Warning, _T("Not a valid protocol: %d"), server.GetProtocol()); return FZ_REPLY_SYNTAXERROR|FZ_REPLY_DISCONNECTED; } int res = m_pControlSocket->Connect(server); if (m_retryTimer.IsRunning()) return FZ_REPLY_WOULDBLOCK; return res; }
int CFileZillaEnginePrivate::ResetOperation(int nErrorCode) { m_pLogging->LogMessage(Debug_Debug, _T("CFileZillaEnginePrivate::ResetOperation(%d)"), nErrorCode); if (nErrorCode & FZ_REPLY_DISCONNECTED) m_lastListDir.Clear(); if (m_pCurrentCommand) { if ((nErrorCode & FZ_REPLY_NOTSUPPORTED) == FZ_REPLY_NOTSUPPORTED) { wxASSERT(m_bIsInCommand); m_pLogging->LogMessage(Error, _("Command not supported by this protocol")); } if (m_pCurrentCommand->GetId() == cmd_connect) { if (!(nErrorCode & ~(FZ_REPLY_ERROR | FZ_REPLY_DISCONNECTED | FZ_REPLY_TIMEOUT | FZ_REPLY_CRITICALERROR | FZ_REPLY_PASSWORDFAILED)) && nErrorCode & (FZ_REPLY_ERROR | FZ_REPLY_DISCONNECTED)) { const CConnectCommand *pConnectCommand = (CConnectCommand *)m_pCurrentCommand; RegisterFailedLoginAttempt(pConnectCommand->GetServer(), (nErrorCode & FZ_REPLY_CRITICALERROR) == FZ_REPLY_CRITICALERROR); if ((nErrorCode & FZ_REPLY_CRITICALERROR) != FZ_REPLY_CRITICALERROR) { m_retryCount++; if (m_retryCount < m_pOptions->GetOptionVal(OPTION_RECONNECTCOUNT) && pConnectCommand->RetryConnecting()) { unsigned int delay = GetRemainingReconnectDelay(pConnectCommand->GetServer()); if (!delay) delay = 1; m_pLogging->LogMessage(Status, _("Waiting to retry...")); m_retryTimer.Start(delay, true); return FZ_REPLY_WOULDBLOCK; } } } } if (!m_bIsInCommand) { COperationNotification *notification = new COperationNotification(); notification->nReplyCode = nErrorCode; notification->commandId = m_pCurrentCommand->GetId(); AddNotification(notification); } else m_nControlSocketError |= nErrorCode; delete m_pCurrentCommand; m_pCurrentCommand = 0; } else if (nErrorCode & FZ_REPLY_DISCONNECTED) { if (!m_bIsInCommand) { COperationNotification *notification = new COperationNotification(); notification->nReplyCode = nErrorCode; notification->commandId = cmd_none; AddNotification(notification); } } return nErrorCode; }