From afb285f52aca0a454da5d713958202550d54b14c Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Sun, 18 Dec 2005 09:10:43 +0000 Subject: [PATCH] Added FileTransfer::procFileUploadCancelMsg() and FileTransfer::procFileDownloadFailedMsg() methods. Code improvements. Major changes in the FTMsgReader class. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@459 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- vncviewer/FTMsgReader.cxx | 34 +++++++++++++++++++--------------- vncviewer/FTMsgReader.h | 9 +++++---- vncviewer/FileTransfer.cxx | 36 ++++++++++++++++++++++++++++++------ 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/vncviewer/FTMsgReader.cxx b/vncviewer/FTMsgReader.cxx index 7f0c3304..d2d118bf 100644 --- a/vncviewer/FTMsgReader.cxx +++ b/vncviewer/FTMsgReader.cxx @@ -88,18 +88,18 @@ FTMsgReader::readFileDownloadData(unsigned int *pSize, unsigned int *pModTime) } } -int -FTMsgReader::readFileUploadCancel(void *pReason) +char * +FTMsgReader::readFileUploadCancel(unsigned int *pReasonSize) { m_pInStream->skip(1); - return readReasonMsg(pReason); + return readReasonMsg(pReasonSize); } -int -FTMsgReader::readFileDownloadFailed(void *pReason) +char * +FTMsgReader::readFileDownloadFailed(unsigned int *pReasonSize) { m_pInStream->skip(1); - return readReasonMsg(pReason); + return readReasonMsg(pReasonSize); } int @@ -115,11 +115,11 @@ FTMsgReader::readFileDirSizeData(DWORD64 *pdw64DirSize) return 1; } -int -FTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, void *pReason) +char * +FTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize) { *pTypeOfRequest = m_pInStream->readU8(); - return readReasonMsg(pReason); + return readReasonMsg(pReasonSize); } bool @@ -140,21 +140,25 @@ FTMsgReader::createFileInfo(unsigned int numFiles, FileInfo *fi, return true; } -int -FTMsgReader::readReasonMsg(void *pReason) +char * +FTMsgReader::readReasonMsg(unsigned int *pReasonSize) { int reasonLen = m_pInStream->readU16(); int _reasonLen = reasonLen + 1; + char *pReason; if (reasonLen == 0) { - return 0; + *pReasonSize = 0; + return NULL; } else { - pReason = malloc(_reasonLen); + pReason = new char [_reasonLen]; if (pReason == NULL) { m_pInStream->skip(reasonLen); - return -1; + *pReasonSize = 0; + return NULL; } m_pInStream->readBytes(pReason, reasonLen); memset(((char *)pReason+reasonLen), '\0', 1); - return _reasonLen; + return pReason; } } + diff --git a/vncviewer/FTMsgReader.h b/vncviewer/FTMsgReader.h index ed51d517..00706f71 100644 --- a/vncviewer/FTMsgReader.h +++ b/vncviewer/FTMsgReader.h @@ -38,10 +38,11 @@ namespace rfb { ~FTMsgReader(); int readFileListData(FileInfo *pFileInfo); - int readFileUploadCancel(void *pReason); - int readFileDownloadFailed(void *pReason); int readFileDirSizeData(DWORD64 *pdw64DirSize); - int readFileLastRqstFailed(int *pTypeOfRequest, void *pReason); + + char *readFileUploadCancel(unsigned int *pReasonSize); + char *readFileDownloadFailed(unsigned int *pReasonSize); + char *readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize); void *readFileDownloadData(unsigned int *pSize, unsigned int *pModTime); private: @@ -49,7 +50,7 @@ namespace rfb { bool createFileInfo(unsigned int numFiles, FileInfo *fi, SIZEDATAINFO *pSDInfo, char *pFilenames); - int readReasonMsg(void *pReason); + char *readReasonMsg(unsigned int *pReasonSize); }; } } diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx index 32279d01..01aae568 100644 --- a/vncviewer/FileTransfer.cxx +++ b/vncviewer/FileTransfer.cxx @@ -452,14 +452,14 @@ FileTransfer::procFileDownloadDataMsg() if ((!m_fileWriter.isCreated()) || (!isTransferEnable())) { m_bTransferSuccess = false; - if (pFile != NULL) delete pFile; + if (pFile != NULL) delete [] pFile; return false; } if (bufSize > 0) { unsigned int bytesWritten = 0; m_fileWriter.write(pFile, bufSize, &bytesWritten); - delete pFile; + delete [] pFile; if (bytesWritten != bufSize) { m_bTransferSuccess = false; char reason[] = "Error File Writting to File"; @@ -507,13 +507,33 @@ FileTransfer::procFileDownloadDataMsg() bool FileTransfer::procFileUploadCancelMsg() { - return false; + unsigned int reasonSize = 0; + char *pReason = m_pReader->readFileUploadCancel(&reasonSize); + + if (m_bFTDlgShown) { + m_pFTDialog->setStatusText("Upload Canceled by Remote Computer : %s", pReason); + } + endUndoneOperation(); + m_pFTDialog->postCheckTransferQueueMsg(); + + delete [] pReason; + return true; } bool FileTransfer::procFileDownloadFailedMsg() { - return false; + unsigned int reasonSize = 0; + char *pReason = m_pReader->readFileDownloadFailed(&reasonSize); + + if (m_bFTDlgShown) { + m_pFTDialog->setStatusText("Download Failed by Remote Computer : %s", pReason); + } + endUndoneOperation(); + m_pFTDialog->postCheckTransferQueueMsg(); + + delete [] pReason; + return true; } bool @@ -530,7 +550,11 @@ FileTransfer::procFileDirSizeDataMsg() bool FileTransfer::procFileLastRqstFailedMsg() { - return false; + unsigned int reasonSize = 0; + int requestType; + char *pReason = m_pReader->readFileLastRqstFailed(&requestType, &reasonSize); + delete [] pReason; + return true; } bool @@ -646,7 +670,6 @@ FileTransfer::checkCancelOperations() if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs(); if (m_bCancel) { endUndoneOperation(); - m_bTransferSuccess = false; if (m_bFTDlgShown) { m_pFTDialog->setStatusText("All Operations Canceled"); } @@ -660,6 +683,7 @@ void FileTransfer::endUndoneOperation() { m_bCancel = false; + m_bTransferSuccess = false; m_fileReader.close(); m_fileWriter.close(); freeQueues(); -- 2.39.5