Added code for canceling file transfer.
Code improvements.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@445 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index a0c1cf9..5d074f3 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -31,6 +31,7 @@
m_bFTDlgShown = false;
m_bInitialized = false;
m_bResized = false;
+ m_bCancel = false;
m_pFTDialog = new FTDialog(GetModuleHandle(0), this);
@@ -221,6 +222,7 @@
m_dw64SizeSending = 0;
m_bResized = false;
m_pFTDialog->setStatusText("File Transfer Operation Completed Successfully");
+ m_pFTDialog->afterCancelTransfer();
PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTLOCALRELOAD, 0), 0);
PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTREMOTERELOAD, 0), 0);
return;
@@ -322,7 +324,10 @@
void
FileTransfer::uploadFilePortion()
{
- if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
+ if (checkCancelOperations()) {
+ char reason[] = "The user cancel transfer";
+ m_pWriter->writeFileUploadFailed(strlen(reason), reason);
+ }
if (m_fileReader.isCreated()) {
char buf[FT_MAX_SENDING_SIZE];
@@ -403,13 +408,16 @@
void *pFile = m_pReader->readFileDownloadData(&bufSize, &modTime);
+ if (checkCancelOperations()) {
+ char reason[] = "The user cancel transfer";
+ m_pWriter->writeFileDownloadCancel(strlen(reason), reason);
+ }
+
if ((!m_fileWriter.isCreated()) || (!isTransferEnable())) {
if (pFile != NULL) delete pFile;
return false;
}
- if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
-
if (bufSize > 0) {
unsigned int bytesWritten = 0;
m_fileWriter.write(pFile, bufSize, &bytesWritten);
@@ -589,9 +597,36 @@
return -1;
}
+bool
+FileTransfer::checkCancelOperations()
+{
+ if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
+ if (m_bCancel) {
+ endUndoneOperation();
+ if (m_bFTDlgShown) {
+ m_pFTDialog->setStatusText("All Operations Canceled");
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void
+FileTransfer::endUndoneOperation()
+{
+ m_bCancel = false;
+ m_fileReader.close();
+ m_fileWriter.close();
+ freeQueues();
+ m_dw64SizeSending = 0;
+ m_pFTDialog->m_pProgress->clearAll();
+}
+
void
FileTransfer::freeQueues()
{
m_TransferQueue.free();
m_DeleteQueue.free();
+ m_queueFileListRqst.free();
}