int CControlSocket::ResetOperation(int nErrorCode) { LogMessage(MessageType::Debug_Verbose, _T("CControlSocket::ResetOperation(%d)"), nErrorCode); if (nErrorCode & FZ_REPLY_WOULDBLOCK) { LogMessage(MessageType::Debug_Warning, _T("ResetOperation with FZ_REPLY_WOULDBLOCK in nErrorCode (%d)"), nErrorCode); } if (m_pCurOpData && m_pCurOpData->holdsLock) UnlockCache(); if (m_pCurOpData && m_pCurOpData->pNextOpData) { COpData *pNext = m_pCurOpData->pNextOpData; m_pCurOpData->pNextOpData = 0; delete m_pCurOpData; m_pCurOpData = pNext; if (nErrorCode == FZ_REPLY_OK || nErrorCode == FZ_REPLY_ERROR || nErrorCode == FZ_REPLY_CRITICALERROR) { return ParseSubcommandResult(nErrorCode); } else return ResetOperation(nErrorCode); } wxString prefix; if ((nErrorCode & FZ_REPLY_CRITICALERROR) == FZ_REPLY_CRITICALERROR && (!m_pCurOpData || m_pCurOpData->opId != Command::transfer)) { prefix = _("Critical error:") + _T(" "); } if (m_pCurOpData) { const Command commandId = m_pCurOpData->opId; switch (commandId) { case Command::none: if( !prefix.empty() ) { LogMessage(MessageType::Error, _("Critical error")); } break; case Command::connect: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(MessageType::Error, prefix + _("Connection attempt interrupted by user")); else if (nErrorCode != FZ_REPLY_OK) LogMessage(MessageType::Error, prefix + _("Could not connect to server")); break; case Command::list: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(MessageType::Error, prefix + _("Directory listing aborted by user")); else if (nErrorCode != FZ_REPLY_OK) LogMessage(MessageType::Error, prefix + _("Failed to retrieve directory listing")); else { if (m_CurrentPath.empty()) { LogMessage(MessageType::Status, _("Directory listing successful")); } else { LogMessage(MessageType::Status, _("Directory listing of \"%s\" successful"), m_CurrentPath.GetPath()); } } break; case Command::transfer: { CFileTransferOpData *pData = static_cast<CFileTransferOpData *>(m_pCurOpData); if (!pData->download && pData->transferInitiated) { if (!m_pCurrentServer) LogMessage(__TFILE__, __LINE__, this, MessageType::Debug_Warning, _T("m_pCurrentServer is 0")); else { bool updated = engine_.GetDirectoryCache().UpdateFile(*m_pCurrentServer, pData->remotePath, pData->remoteFile, true, CDirectoryCache::file, (nErrorCode == FZ_REPLY_OK) ? pData->localFileSize : -1); if (updated) engine_.SendDirectoryListingNotification(pData->remotePath, false, true, false); } } LogTransferResultMessage(nErrorCode, pData); } break; default: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(MessageType::Error, prefix + _("Interrupted by user")); break; } delete m_pCurOpData; m_pCurOpData = 0; } engine_.transfer_status_.Reset(); SetWait(false); if (m_invalidateCurrentPath) { m_CurrentPath.clear(); m_invalidateCurrentPath = false; } return engine_.ResetOperation(nErrorCode); }
int CControlSocket::ResetOperation(int nErrorCode) { LogMessage(Debug_Verbose, _T("CControlSocket::ResetOperation(%d)"), nErrorCode); if (nErrorCode & FZ_REPLY_WOULDBLOCK) { LogMessage(::Debug_Warning, _T("ResetOperation with FZ_REPLY_WOULDBLOCK in nErrorCode (%d)"), nErrorCode); } if (m_pCurOpData && m_pCurOpData->holdsLock) UnlockCache(); if (m_pCurOpData && m_pCurOpData->pNextOpData) { COpData *pNext = m_pCurOpData->pNextOpData; m_pCurOpData->pNextOpData = 0; delete m_pCurOpData; m_pCurOpData = pNext; if (nErrorCode == FZ_REPLY_OK || nErrorCode == FZ_REPLY_ERROR || nErrorCode == FZ_REPLY_CRITICALERROR) { return ParseSubcommandResult(nErrorCode); } else return ResetOperation(nErrorCode); } if ((nErrorCode & FZ_REPLY_CRITICALERROR) == FZ_REPLY_CRITICALERROR && (!m_pCurOpData || m_pCurOpData->opId != cmd_transfer)) { LogMessage(::Error, _("Critical error")); } if (m_pCurOpData) { const enum Command commandId = m_pCurOpData->opId; switch (commandId) { case cmd_none: break; case cmd_connect: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(::Error, _("Connection attempt interrupted by user")); else if (nErrorCode != FZ_REPLY_OK) LogMessage(::Error, _("Could not connect to server")); break; case cmd_list: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(::Error, _("Directory listing aborted by user")); else if (nErrorCode != FZ_REPLY_OK) LogMessage(::Error, _("Failed to retrieve directory listing")); else LogMessage(Status, _("Directory listing successful")); break; case cmd_transfer: { CFileTransferOpData *pData = static_cast<CFileTransferOpData *>(m_pCurOpData); if (!pData->download && pData->transferInitiated) { if (!m_pCurrentServer) LogMessage(__TFILE__, __LINE__, this, Debug_Warning, _T("m_pCurrentServer is 0")); else { CDirectoryCache cache; bool updated = cache.UpdateFile(*m_pCurrentServer, pData->remotePath, pData->remoteFile, true, CDirectoryCache::file, (nErrorCode == FZ_REPLY_OK) ? pData->localFileSize : -1); if (updated) m_pEngine->SendDirectoryListingNotification(pData->remotePath, false, true, false); } } LogTransferResultMessage(nErrorCode, pData); } break; default: if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED) LogMessage(::Error, _("Interrupted by user")); break; } delete m_pCurOpData; m_pCurOpData = 0; } ResetTransferStatus(); SetWait(false); if (m_invalidateCurrentPath) { m_CurrentPath.Clear(); m_invalidateCurrentPath = false; } return m_pEngine->ResetOperation(nErrorCode); }