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
diff --git a/vncviewer/FTMsgReader.cxx b/vncviewer/FTMsgReader.cxx
index 7f0c330..d2d118b 100644
--- a/vncviewer/FTMsgReader.cxx
+++ b/vncviewer/FTMsgReader.cxx
@@ -88,18 +88,18 @@
}
}
-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 @@
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 @@
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 ed51d51..00706f7 100644
--- a/vncviewer/FTMsgReader.h
+++ b/vncviewer/FTMsgReader.h
@@ -38,10 +38,11 @@
~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 @@
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 32279d0..01aae56 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -452,14 +452,14 @@
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 @@
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 @@
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 @@
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 @@
FileTransfer::endUndoneOperation()
{
m_bCancel = false;
+ m_bTransferSuccess = false;
m_fileReader.close();
m_fileWriter.close();
freeQueues();