From f72f9fda4e85adaea89facddc43a97b26e829103 Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Mon, 17 Apr 2006 08:56:48 +0000 Subject: [PATCH] The CFTMsgReader and the CFTMsgWriter classes was moved to rfb workspace. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@531 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- rfb/CFTMsgReader.cxx | 162 ++++++++++++++++++++++++++++++++ rfb/CFTMsgReader.h | 56 +++++++++++ rfb/CFTMsgWriter.cxx | 182 ++++++++++++++++++++++++++++++++++++ rfb/CFTMsgWriter.h | 67 +++++++++++++ rfb/DirManager.h | 2 + rfb/FileInfo.cxx | 2 + rfb/FileInfo.h | 2 + rfb/FileManager.cxx | 2 + rfb/FileManager.h | 2 + rfb/FileReader.cxx | 2 + rfb/FileReader.h | 2 + rfb/FileWriter.cxx | 2 + rfb/FileWriter.h | 2 + rfb/SFTMsgReader.cxx | 36 ++++++- rfb/SFTMsgWriter.cxx | 8 +- rfb/TransferQueue.cxx | 2 + rfb/TransferQueue.h | 2 + rfb/fttypes.h | 2 + rfb/rfb.dsp | 16 ++++ rfb_win32/FolderManager.cxx | 2 +- rfb_win32/FolderManager.h | 2 + vncviewer/FTBrowseDlg.cxx | 18 +++- vncviewer/FTBrowseDlg.h | 4 + vncviewer/FTDialog.cxx | 7 +- vncviewer/FTDialog.h | 2 + vncviewer/FTListView.cxx | 40 ++++---- vncviewer/FTProgress.cxx | 25 +++-- vncviewer/FTProgress.h | 2 + vncviewer/FileTransfer.cxx | 145 ++++++++++++++++++++++++---- vncviewer/FileTransfer.h | 24 ++++- vncviewer/vncviewer.dsp | 16 ---- 31 files changed, 759 insertions(+), 79 deletions(-) create mode 100644 rfb/CFTMsgReader.cxx create mode 100644 rfb/CFTMsgReader.h create mode 100644 rfb/CFTMsgWriter.cxx create mode 100644 rfb/CFTMsgWriter.h diff --git a/rfb/CFTMsgReader.cxx b/rfb/CFTMsgReader.cxx new file mode 100644 index 00000000..66adbf50 --- /dev/null +++ b/rfb/CFTMsgReader.cxx @@ -0,0 +1,162 @@ +/* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * + * TightVNC distribution homepage on the Web: http://www.tightvnc.com/ + * + */ + +// -=- CFTMsgReader.cxx + +#include + +using namespace rfb; + +CFTMsgReader::CFTMsgReader(rdr::InStream *pIS) +{ + m_pInStream = pIS; +} + +CFTMsgReader::~CFTMsgReader() +{ + +} + +int +CFTMsgReader::readFileListData(FileInfo *pFileInfo) +{ + unsigned char flags = m_pInStream->readU8(); + int numFiles = m_pInStream->readU16(); + int dataSize = m_pInStream->readU16(); + int compressedSize = m_pInStream->readU16(); + + if (flags & 0x80) { + return -1; + } else { + if (numFiles > 0) { + char *pFilenames = new char[compressedSize]; + SIZEDATAINFO *pSDI = new SIZEDATAINFO[numFiles]; + for (int i = 0; i < numFiles; i++) { + pSDI[i].size = m_pInStream->readU32(); + pSDI[i].data = m_pInStream->readU32(); + } + m_pInStream->readBytes((void *)pFilenames, compressedSize); + createFileInfo(numFiles, pFileInfo, pSDI, pFilenames); + delete [] pSDI; + delete [] pFilenames; + } + } + return numFiles; +} + +void * +CFTMsgReader::readFileDownloadData(unsigned int *pSize, unsigned int *pModTime) +{ + unsigned char compressLevel = m_pInStream->readU8(); + int realSize = m_pInStream->readU16(); + int compressedSize = m_pInStream->readU16(); + + if ((realSize == 0) && (compressedSize == 0)) { + *pSize = 0; + *pModTime = m_pInStream->readU32(); + return NULL; + } else { + char *pFile = new char [compressedSize]; + if (pFile == NULL) { + m_pInStream->skip(compressedSize); + *pModTime = 0; + return NULL; + } else { + m_pInStream->readBytes(pFile, compressedSize); + *pSize = compressedSize; + return pFile; + } + } +} + +char * +CFTMsgReader::readFileUploadCancel(unsigned int *pReasonSize) +{ + m_pInStream->skip(1); + return readReasonMsg(pReasonSize); +} + +char * +CFTMsgReader::readFileDownloadFailed(unsigned int *pReasonSize) +{ + m_pInStream->skip(1); + return readReasonMsg(pReasonSize); +} + +int +CFTMsgReader::readFileDirSizeData(unsigned short *pDirSizeLow16, + unsigned int *pDirSizeHigh32) +{ + m_pInStream->skip(1); + *pDirSizeLow16 = m_pInStream->readU16(); + *pDirSizeHigh32 = m_pInStream->readU32(); + return 1; +} + +char * +CFTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize) +{ + *pTypeOfRequest = m_pInStream->readU8(); + return readReasonMsg(pReasonSize); +} + +bool +CFTMsgReader::createFileInfo(unsigned int numFiles, FileInfo *fi, + SIZEDATAINFO *pSDInfo, char *pFilenames) +{ + int pos = 0; + int size = 0; + for (unsigned int i = 0; i < numFiles; i++) { + size = pSDInfo[i].size; + if (size == FT_NET_ATTR_DIR) { + fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_DIR); + } else { + fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_FILE); + } + pos += strlen(pFilenames + pos) + 1; + } + return true; +} + +char * +CFTMsgReader::readReasonMsg(unsigned int *pReasonSize) +{ + int reasonLen = m_pInStream->readU16(); + int _reasonLen = reasonLen + 1; + char *pReason; + if (reasonLen == 0) { + *pReasonSize = 0; + return NULL; + } else { + pReason = new char [_reasonLen]; + if (pReason == NULL) { + m_pInStream->skip(reasonLen); + *pReasonSize = 0; + return NULL; + } + m_pInStream->readBytes(pReason, reasonLen); + memset(((char *)pReason+reasonLen), '\0', 1); + return pReason; + } +} + diff --git a/rfb/CFTMsgReader.h b/rfb/CFTMsgReader.h new file mode 100644 index 00000000..b0e2c7a7 --- /dev/null +++ b/rfb/CFTMsgReader.h @@ -0,0 +1,56 @@ +/* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * + * TightVNC distribution homepage on the Web: http://www.tightvnc.com/ + * + */ + +// -=- CFTMsgReader.h + +#ifndef __RFB_CFTMSGREADER_H__ +#define __RFB_CFTMSGREADER_H__ + +#include +#include + +namespace rfb { + class CFTMsgReader + { + public: + CFTMsgReader(rdr::InStream *pIS); + ~CFTMsgReader(); + + int readFileListData(FileInfo *pFileInfo); + int readFileDirSizeData(unsigned short *pDirSizeLow16, unsigned int *pDirSizeHigh32); + + 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: + rdr::InStream *m_pInStream; + + bool createFileInfo(unsigned int numFiles, FileInfo *fi, + SIZEDATAINFO *pSDInfo, char *pFilenames); + char *readReasonMsg(unsigned int *pReasonSize); + }; +} + +#endif // __RFB_CFTMSGREADER_H__ diff --git a/rfb/CFTMsgWriter.cxx b/rfb/CFTMsgWriter.cxx new file mode 100644 index 00000000..278cf800 --- /dev/null +++ b/rfb/CFTMsgWriter.cxx @@ -0,0 +1,182 @@ +/* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * + * TightVNC distribution homepage on the Web: http://www.tightvnc.com/ + * + */ + +// -=- CFTMsgWriter.cxx + +#include + +using namespace rfb; + +CFTMsgWriter::CFTMsgWriter(rdr::OutStream *pOS) +{ + m_pOutStream = pOS; +} + +CFTMsgWriter::~CFTMsgWriter() +{ +} + +bool +CFTMsgWriter::writeFileListRqst(unsigned short dirnameLen, char *pDirName, + bool bDirOnly) +{ + if (dirnameLen >= FT_FILENAME_SIZE) return false; + + unsigned char flags = 0; + if (bDirOnly) flags = 0x10; + + m_pOutStream->writeU8(msgTypeFileListRequest); + m_pOutStream->writeU8(flags); + m_pOutStream->writeU16(dirnameLen); + m_pOutStream->writeBytes((void *)pDirName, dirnameLen); + m_pOutStream->flush(); + + return true; +} + + +bool +CFTMsgWriter::writeFileDownloadCancel(unsigned short reasonLen, char *pReason) +{ + m_pOutStream->writeU8(msgTypeFileDownloadCancel); + return writeU8U16StringMsg(reasonLen, pReason); +} + +bool +CFTMsgWriter::writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position) +{ + if (filenameLen >= FT_FILENAME_SIZE) return false; + + m_pOutStream->writeU8(msgTypeFileDownloadRequest); + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(filenameLen); + m_pOutStream->writeU32(position); + m_pOutStream->writeBytes(pFilename, filenameLen); + m_pOutStream->flush(); + + return true; +} + +bool +CFTMsgWriter::writeFileUploadData(unsigned short dataSize, char *pData) +{ + m_pOutStream->writeU8(msgTypeFileUploadData); + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(dataSize); + m_pOutStream->writeU16(dataSize); + m_pOutStream->writeBytes(pData, dataSize); + m_pOutStream->flush(); + + return true; +} + +bool +CFTMsgWriter::writeFileUploadData(unsigned int modTime) +{ + m_pOutStream->writeU8(msgTypeFileUploadData); + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(0); + m_pOutStream->writeU16(0); + m_pOutStream->writeU32(modTime); + m_pOutStream->flush(); + + return true; +} + +bool +CFTMsgWriter::writeFileUploadFailed(unsigned short reasonLen, char *pReason) +{ + m_pOutStream->writeU8(msgTypeFileUploadFailed); + return writeU8U16StringMsg(reasonLen, pReason); +} + +bool +CFTMsgWriter::writeFileUploadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position) +{ + if (filenameLen >= FT_FILENAME_SIZE) return false; + + m_pOutStream->writeU8(msgTypeFileUploadRequest); + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(filenameLen); + m_pOutStream->writeU32(position); + m_pOutStream->writeBytes((void *)pFilename, filenameLen); + m_pOutStream->flush(); + + return true; +} + +bool +CFTMsgWriter::writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName) +{ + if (dirNameLen >= FT_FILENAME_SIZE) return false; + + m_pOutStream->writeU8(msgTypeFileCreateDirRequest); + return writeU8U16StringMsg(dirNameLen, pDirName); +} + +bool +CFTMsgWriter::writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName) +{ + if (dirNameLen >= FT_FILENAME_SIZE) return false; + + m_pOutStream->writeU8(msgTypeFileDirSizeRequest); + return writeU8U16StringMsg(dirNameLen, pDirName); +} + +bool +CFTMsgWriter::writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen, + char *pOldName, char *pNewName) +{ + if ((oldNameLen >= FT_FILENAME_SIZE) || (newNameLen >= FT_FILENAME_SIZE)) return false; + + m_pOutStream->writeU8(msgTypeFileRenameRequest); + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(oldNameLen); + m_pOutStream->writeU16(newNameLen); + m_pOutStream->writeBytes(pOldName, oldNameLen); + m_pOutStream->writeBytes(pNewName, newNameLen); + m_pOutStream->flush(); + + return true; +} + +bool +CFTMsgWriter::writeFileDeleteRqst(unsigned short nameLen, char *pName) +{ + if (nameLen >= FT_FILENAME_SIZE) return false; + + m_pOutStream->writeU8(msgTypeFileDeleteRequest); + return writeU8U16StringMsg(nameLen, pName); +} + +bool +CFTMsgWriter::writeU8U16StringMsg(unsigned short strLength, char *pString) +{ + m_pOutStream->writeU8(0); + m_pOutStream->writeU16(strLength); + m_pOutStream->writeBytes(pString, strLength); + m_pOutStream->flush(); + return true; +} diff --git a/rfb/CFTMsgWriter.h b/rfb/CFTMsgWriter.h new file mode 100644 index 00000000..c49c2aae --- /dev/null +++ b/rfb/CFTMsgWriter.h @@ -0,0 +1,67 @@ +/* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * + * TightVNC distribution homepage on the Web: http://www.tightvnc.com/ + * + */ + +// -=- CFTMsgWriter.h + +#ifndef __RFB_CFTMSGWRITER_H__ +#define __RFB_CFTMSGWRITER_H__ + +#include +#include +#include +#include + +namespace rfb { + class CFTMsgWriter + { + public: + CFTMsgWriter(rdr::OutStream *pOS); + ~CFTMsgWriter(); + + bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly); + + bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason); + bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position); + + bool writeFileUploadData(unsigned short dataSize, char *pData); + bool writeFileUploadData(unsigned int modTime); + bool writeFileUploadFailed(unsigned short reasonLen, char *pReason); + bool writeFileUploadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position); + + bool writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName); + bool writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName); + + bool writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen, + char *pOldName, char *pNewName); + bool writeFileDeleteRqst(unsigned short nameLen, char *pName); + + private: + rdr::OutStream *m_pOutStream; + + bool writeU8U16StringMsg(unsigned short strLength, char *pString); + }; +} + +#endif // __RFB_CFTMSGWRITER_H__ diff --git a/rfb/DirManager.h b/rfb/DirManager.h index d59ffde5..c820f648 100644 --- a/rfb/DirManager.h +++ b/rfb/DirManager.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileInfo.cxx b/rfb/FileInfo.cxx index 34074f7d..e97e0adb 100644 --- a/rfb/FileInfo.cxx +++ b/rfb/FileInfo.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileInfo.h b/rfb/FileInfo.h index 4dccc955..270eeee9 100644 --- a/rfb/FileInfo.h +++ b/rfb/FileInfo.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileManager.cxx b/rfb/FileManager.cxx index c0403a78..be1d2a81 100644 --- a/rfb/FileManager.cxx +++ b/rfb/FileManager.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileManager.h b/rfb/FileManager.h index a673f4d7..f4e8596e 100644 --- a/rfb/FileManager.h +++ b/rfb/FileManager.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileReader.cxx b/rfb/FileReader.cxx index 063b742e..a8cd2724 100644 --- a/rfb/FileReader.cxx +++ b/rfb/FileReader.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileReader.h b/rfb/FileReader.h index 12cdfa12..0c985d82 100644 --- a/rfb/FileReader.h +++ b/rfb/FileReader.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileWriter.cxx b/rfb/FileWriter.cxx index 9c06c378..2bed5765 100644 --- a/rfb/FileWriter.cxx +++ b/rfb/FileWriter.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/FileWriter.h b/rfb/FileWriter.h index e522ae13..73094a7e 100644 --- a/rfb/FileWriter.h +++ b/rfb/FileWriter.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/SFTMsgReader.cxx b/rfb/SFTMsgReader.cxx index 3d9aeb2b..2a5d283e 100644 --- a/rfb/SFTMsgReader.cxx +++ b/rfb/SFTMsgReader.cxx @@ -106,10 +106,40 @@ SFTMsgReader::readFileDeleteRqst(unsigned int *pNameSize, char *pName) return readU8U16StringMsg(pNameSize, pName); } -bool readFileRenameRqst(unsigned int *pOldNameSize, unsigned int *pNewNameSize, - char *pOldName, char *pNewName) +bool +SFTMsgReader::readFileRenameRqst(unsigned int *pOldNameSize, + unsigned int *pNewNameSize, + char *pOldName, char *pNewName) { - return false; + m_pIS->skip(1); + + unsigned int oldNameSize = m_pIS->readU16(); + unsigned int newNameSize = m_pIS->readU16(); + + if ((oldNameSize >= *pOldNameSize) || (newNameSize >= *pNewNameSize)) { + m_pIS->skip(oldNameSize); + m_pIS->skip(newNameSize); + return false; + } + + if (oldNameSize != 0) { + m_pIS->readBytes(pOldName, oldNameSize); + pOldName[oldNameSize] = '\0'; + *pOldNameSize = oldNameSize; + } else { + *pOldNameSize = 0; + pOldName[0] = '\0'; + } + + if (newNameSize != 0) { + m_pIS->readBytes(pNewName, newNameSize); + pNewName[newNameSize] = '\0'; + } else { + *pNewNameSize = 0; + pNewName[0] = '\0'; + } + + return true; } bool diff --git a/rfb/SFTMsgWriter.cxx b/rfb/SFTMsgWriter.cxx index 4edfc467..dfd0ad59 100644 --- a/rfb/SFTMsgWriter.cxx +++ b/rfb/SFTMsgWriter.cxx @@ -60,9 +60,13 @@ SFTMsgWriter::writeFileListData(unsigned char flags, rfb::FileInfo *pFileInfo) unsigned int len = strlen(pName); memcpy((void *)&pFilenames[pos], pName, len + 1); - pos += len + 2; + pos += (len + 1); - m_pOS->writeU32(pFileInfo->getSizeAt(i)); + if (pFileInfo->getFlagsAt(i) & FT_ATTR_DIR) { + m_pOS->writeU32(FT_NET_ATTR_DIR); + } else { + m_pOS->writeU32(pFileInfo->getSizeAt(i)); + } m_pOS->writeU32(pFileInfo->getDataAt(i)); } diff --git a/rfb/TransferQueue.cxx b/rfb/TransferQueue.cxx index 58b92734..01807524 100644 --- a/rfb/TransferQueue.cxx +++ b/rfb/TransferQueue.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/TransferQueue.h b/rfb/TransferQueue.h index 02a043df..ba748e0e 100644 --- a/rfb/TransferQueue.h +++ b/rfb/TransferQueue.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb/fttypes.h b/rfb/fttypes.h index 1e9f601a..9cfbb29d 100644 --- a/rfb/fttypes.h +++ b/rfb/fttypes.h @@ -32,6 +32,8 @@ #define FT_MAX_SENDING_SIZE 8192 +#define FT_NET_ATTR_DIR ((unsigned int)-1) + #define FT_ATTR_UNKNOWN 0x00000000 #define FT_ATTR_FILE 0x00000001 #define FT_ATTR_DIR 0x00000002 diff --git a/rfb/rfb.dsp b/rfb/rfb.dsp index 4e18c7bc..bac1e006 100644 --- a/rfb/rfb.dsp +++ b/rfb/rfb.dsp @@ -118,6 +118,14 @@ SOURCE=.\CConnection.cxx # End Source File # Begin Source File +SOURCE=.\CFTMsgReader.cxx +# End Source File +# Begin Source File + +SOURCE=.\CFTMsgWriter.cxx +# End Source File +# Begin Source File + SOURCE=.\CMsgHandler.cxx # End Source File # Begin Source File @@ -364,6 +372,14 @@ SOURCE=.\CConnection.h # End Source File # Begin Source File +SOURCE=.\CFTMsgReader.h +# End Source File +# Begin Source File + +SOURCE=.\CFTMsgWriter.h +# End Source File +# Begin Source File + SOURCE=.\CMsgHandler.h # End Source File # Begin Source File diff --git a/rfb_win32/FolderManager.cxx b/rfb_win32/FolderManager.cxx index e5544a46..a2fa08d3 100644 --- a/rfb_win32/FolderManager.cxx +++ b/rfb_win32/FolderManager.cxx @@ -1,6 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. * - * Developed by Dennis Syrovatsky + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/rfb_win32/FolderManager.h b/rfb_win32/FolderManager.h index 97a6538d..24923dd6 100644 --- a/rfb_win32/FolderManager.h +++ b/rfb_win32/FolderManager.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vncviewer/FTBrowseDlg.cxx b/vncviewer/FTBrowseDlg.cxx index 7c88ff6a..1b6dfb67 100644 --- a/vncviewer/FTBrowseDlg.cxx +++ b/vncviewer/FTBrowseDlg.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,9 +70,7 @@ FTBrowseDlg::addItems(FileInfo *pFI) TVITEM tvi; TVINSERTSTRUCT tvins; - while (TreeView_GetChild(m_hwndTree, m_hParentItem) != NULL) { - TreeView_DeleteItem(m_hwndTree, TreeView_GetChild(m_hwndTree, m_hParentItem)); - } + if (pFI->getNumEntries() <= 0) return; for (unsigned int i = 0; i < pFI->getNumEntries(); i++) { @@ -132,6 +132,14 @@ FTBrowseDlg::getPath() return m_szPath; } +void +FTBrowseDlg::deleteChildItems() +{ + while (TreeView_GetChild(m_hwndTree, m_hParentItem) != NULL) { + TreeView_DeleteItem(m_hwndTree, TreeView_GetChild(m_hwndTree, m_hParentItem)); + } +} + BOOL CALLBACK FTBrowseDlg::FTBrowseDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -166,11 +174,13 @@ FTBrowseDlg::FTBrowseDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case TVN_SELCHANGED: SetDlgItemText(hwnd, IDC_FTBROWSEPATH, _this->getTVPath(((NMTREEVIEW *) lParam)->itemNew.hItem)); return FALSE; - case TVN_ITEMEXPANDING: +// case TVN_ITEMEXPANDING: + case TVN_ITEMEXPANDED: { NMTREEVIEW *nmCode = (NMTREEVIEW *) lParam; if (nmCode->action == 2) { _this->m_hParentItem = nmCode->itemNew.hItem; + _this->deleteChildItems(); _this->m_pFTDlg->getBrowseItems(_this->getTVPath(_this->m_hParentItem)); } } diff --git a/vncviewer/FTBrowseDlg.h b/vncviewer/FTBrowseDlg.h index 1a5e6636..5c9ba357 100644 --- a/vncviewer/FTBrowseDlg.h +++ b/vncviewer/FTBrowseDlg.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,6 +51,8 @@ namespace rfb { void addItems(FileInfo *pFI); char *getPath(); + void deleteChildItems(); + private: HWND m_hwndDlg; HWND m_hwndTree; diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx index b4c669d3..409d3b17 100644 --- a/vncviewer/FTDialog.cxx +++ b/vncviewer/FTDialog.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -376,7 +378,6 @@ FTDialog::onEndBrowseDlg(bool bResult) showRemoteLVItems(); } } - delete m_pBrowseDlg; m_pBrowseDlg = NULL; } @@ -514,6 +515,8 @@ FTDialog::onUpload() if (MessageBox(m_hwndFTDialog, pBuf, "Copy Selected Files and Folders", MB_OKCANCEL) == IDOK) m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD); + + setButtonsState(); delete [] pBuf; return; @@ -549,6 +552,8 @@ FTDialog::onDownload() if (MessageBox(m_hwndFTDialog, pBuf, "Copy Selected Files and Folders", MB_OKCANCEL) == IDOK) m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD); + + setButtonsState(); delete [] pBuf; return; diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h index 36cb669f..a4b55461 100644 --- a/vncviewer/FTDialog.h +++ b/vncviewer/FTDialog.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vncviewer/FTListView.cxx b/vncviewer/FTListView.cxx index ab43cbd5..8f41abf6 100644 --- a/vncviewer/FTListView.cxx +++ b/vncviewer/FTListView.cxx @@ -1,23 +1,25 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. -* -* This is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This software is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this software; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -* USA. -* -* TightVNC distribution homepage on the Web: http://www.tightvnc.com/ -* -*/ + * + * Developed by Dennis Syrovatsky + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * + * TightVNC distribution homepage on the Web: http://www.tightvnc.com/ + * + */ // -=- FTListView.cxx diff --git a/vncviewer/FTProgress.cxx b/vncviewer/FTProgress.cxx index e43132f4..e6cc952f 100644 --- a/vncviewer/FTProgress.cxx +++ b/vncviewer/FTProgress.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -132,13 +134,18 @@ FTProgress::destroyProgressBarObjects() void FTProgress::setProgressText() { - char buf[16]; - - int percent = m_pSingleProgress->getCurrentPercent(); - sprintf(buf, "%d%%", percent); - SetWindowText(m_hwndSinglePercent, buf); - - percent = m_pGeneralProgress->getCurrentPercent(); - sprintf(buf, "%d%%", percent); - SetWindowText(m_hwndGeneralPercent, buf); + char buf[16] = {0}; + char buf2[16] = {0}; + + int percent = m_pSingleProgress->getCurrentPercent(); + sprintf(buf, "%d%%", percent); + GetWindowText(m_hwndSinglePercent, buf2, 16); + if (strcmp(buf, buf2) != 0) + SetWindowText(m_hwndSinglePercent, buf); + + percent = m_pGeneralProgress->getCurrentPercent(); + sprintf(buf, "%d%%", percent); + GetWindowText(m_hwndGeneralPercent, buf2, 16); + if (strcmp(buf, buf2) != 0) + SetWindowText(m_hwndGeneralPercent, buf); } \ No newline at end of file diff --git a/vncviewer/FTProgress.h b/vncviewer/FTProgress.h index c36c0791..caad7798 100644 --- a/vncviewer/FTProgress.h +++ b/vncviewer/FTProgress.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx index 01aae568..46d4799a 100644 --- a/vncviewer/FileTransfer.cxx +++ b/vncviewer/FileTransfer.cxx @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,6 +34,7 @@ FileTransfer::FileTransfer() m_bInitialized = false; m_bResized = false; m_bCancel = false; + m_bOverwriteAll = false; m_pFTDialog = new FTDialog(GetModuleHandle(0), this); @@ -67,8 +70,8 @@ FileTransfer::initialize(rdr::InStream *pIS, rdr::OutStream *pOS) { if (m_bInitialized) return false; - m_pReader = new FTMsgReader(pIS); - m_pWriter = new FTMsgWriter(pOS); + m_pReader = new CFTMsgReader(pIS); + m_pWriter = new CFTMsgWriter(pOS); freeQueues(); @@ -144,12 +147,12 @@ FileTransfer::checkDeleteQueue() m_pFTDialog->postCheckDeleteQueueMsg(); } else { if (m_DeleteQueue.getFlagsAt(0) & FT_ATTR_DELETE_REMOTE) { - m_pWriter->writeFileDeleteRqst(strlen(m_DeleteQueue.getFullLocPathAt(0)), - m_DeleteQueue.getFullLocPathAt(0)); + writeFileDeleteRqst(strlen(m_DeleteQueue.getFullLocPathAt(0)), + m_DeleteQueue.getFullLocPathAt(0)); char *pPath = m_DeleteQueue.getLocPathAt(0); m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_DELETE); - m_pWriter->writeFileListRqst(strlen(pPath), pPath, false); + writeFileListRqst(strlen(pPath), pPath, false); } } } else { @@ -191,7 +194,7 @@ FileTransfer::resizeSending() m_bResized = true; char *pPath = m_TransferQueue.getFullRemPathAt(i); m_dirSizeRqstNum = i; - m_pWriter->writeFileDirSizeRqst(strlen(pPath), pPath); + writeFileDirSizeRqst(strlen(pPath), pPath); return false; } else { if (flags & FT_ATTR_COPY_UPLOAD) { @@ -248,12 +251,12 @@ FileTransfer::checkTransferQueue() if (flag0 & FT_ATTR_DIR) { char *pFullPath = m_TransferQueue.getFullRemPathAt(0); if (m_bFTDlgShown) m_pFTDialog->setStatusText("Creating Remote Folder. %s", pFullPath); - m_pWriter->writeFileCreateDirRqst(strlen(pFullPath), pFullPath); + writeFileCreateDirRqst(strlen(pFullPath), pFullPath); char *pPath = m_TransferQueue.getRemPathAt(0); m_TransferQueue.setFlagsAt(0, (flag0 | FT_ATTR_FLR_UPLOAD_CHECK)); m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_UPLOAD); - m_pWriter->writeFileListRqst(strlen(pPath), pPath, false); + writeFileListRqst(strlen(pPath), pPath, false); return; } } else { @@ -280,7 +283,7 @@ FileTransfer::checkTransferQueue() m_TransferQueue.setFlagsAt(0, (m_TransferQueue.getFlagsAt(0) | FT_ATTR_FLR_DOWNLOAD_ADD)); char *pRemPath = m_TransferQueue.getFullRemPathAt(0); m_queueFileListRqst.add(pRemPath, 0, 0, FT_FLR_DEST_DOWNLOAD); - m_pWriter->writeFileListRqst(strlen(pRemPath), pRemPath, 0); + writeFileListRqst(strlen(pRemPath), pRemPath, 0); return; } } @@ -304,8 +307,8 @@ FileTransfer::uploadFile() m_pFTDialog->m_pProgress->clearAndInitSingle(m_TransferQueue.getSizeAt(0), 0); } - m_pWriter->writeFileUploadRqst(strlen(m_TransferQueue.getFullRemPathAt(0)), - m_TransferQueue.getFullRemPathAt(0), 0); + writeFileUploadRqst(strlen(m_TransferQueue.getFullRemPathAt(0)), + m_TransferQueue.getFullRemPathAt(0), 0); uploadFilePortion(); } } @@ -323,8 +326,8 @@ FileTransfer::downloadFile() m_TransferQueue.getFullLocPathAt(0)); m_pFTDialog->m_pProgress->clearAndInitSingle(m_TransferQueue.getSizeAt(0), 0); } - m_pWriter->writeFileDownloadRqst(strlen(m_TransferQueue.getFullRemPathAt(0)), - m_TransferQueue.getFullRemPathAt(0), 0); + writeFileDownloadRqst(strlen(m_TransferQueue.getFullRemPathAt(0)), + m_TransferQueue.getFullRemPathAt(0), 0); return true; } else return false; } @@ -378,9 +381,9 @@ FileTransfer::createRemoteFolder(char *pPath, char *pName) char fullPath[FT_FILENAME_SIZE]; sprintf(fullPath, "%s\\%s", pPath, pName); m_pFTDialog->setStatusText("Creating Remote Folder: %s", fullPath); - m_pWriter->writeFileCreateDirRqst(strlen(fullPath), fullPath); + writeFileCreateDirRqst(strlen(fullPath), fullPath); m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_MAIN); - m_pWriter->writeFileListRqst(strlen(pPath), pPath, false); + writeFileListRqst(strlen(pPath), pPath, false); } void @@ -392,10 +395,10 @@ FileTransfer::renameRemote(char *pPath, char *pOldName, char *pNewName) sprintf(fullOldName, "%s\\%s", pPath, pOldName); sprintf(fullNewName, "%s\\%s", pPath, pNewName); - m_pWriter->writeFileRenameRqst(strlen(fullOldName), strlen(fullNewName), - fullOldName, fullNewName); + writeFileRenameRqst(strlen(fullOldName), strlen(fullNewName), + fullOldName, fullNewName); m_queueFileListRqst.add(pPath, 0, 0, FT_FLR_DEST_MAIN); - m_pWriter->writeFileListRqst(strlen(pPath), pPath, false); + writeFileListRqst(strlen(pPath), pPath, false); } bool @@ -540,7 +543,13 @@ bool FileTransfer::procFileDirSizeDataMsg() { DWORD64 dw64DirSize = 0; - m_pReader->readFileDirSizeData(&dw64DirSize); + unsigned short dirSizeLow16 = 0; + unsigned int dirSizeHigh32 = 0; + m_pReader->readFileDirSizeData(&dirSizeLow16, &dirSizeHigh32); + + dw64DirSize = dirSizeLow16; + dw64DirSize = (dw64DirSize << 32) + dirSizeHigh32; + m_dw64SizeSending += dw64DirSize; m_TransferQueue.clearFlagAt(m_dirSizeRqstNum, FT_ATTR_RESIZE_NEEDED); checkTransferQueue(); @@ -650,7 +659,7 @@ FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly) { m_queueFileListRqst.add(pPath, 0, 0, dest); - m_pWriter->writeFileListRqst(strlen(pPath), pPath, bDirOnly); + writeFileListRqst(strlen(pPath), pPath, bDirOnly); } int @@ -698,3 +707,99 @@ FileTransfer::freeQueues() m_DeleteQueue.free(); m_queueFileListRqst.free(); } + +int +FileTransfer::convertToUnixPath(char *path) +{ + int len = strlen(path); + if (len >= FT_FILENAME_SIZE) return -1; + if (len == 0) {strcpy(path, "/"); return 1;} + for (int i = (len - 1); i >= 0; i--) { + if (path[i] == '\\') path[i] = '/'; + path[i+1] = path[i]; + } + path[len + 1] = '\0'; + path[0] = '/'; + return strlen(path); +} + +bool +FileTransfer::writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly) +{ + char dirName[FT_FILENAME_SIZE]; + strcpy(dirName, pDirName); + int len = convertToUnixPath(dirName); + if (len <= 0) return false; + + return m_pWriter->writeFileListRqst(len, dirName, bDirOnly); +} + +bool +FileTransfer::writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position) +{ + char filename[FT_FILENAME_SIZE]; + strcpy(filename, pFilename); + unsigned short len = (unsigned short) convertToUnixPath(filename); + if (len <= 0) return false; + + return m_pWriter->writeFileDownloadRqst(len, filename, position); +} + +bool +FileTransfer::writeFileUploadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position) +{ + char filename[FT_FILENAME_SIZE]; + strcpy(filename, pFilename); + unsigned short len = (unsigned short) convertToUnixPath(filename); + if (len <= 0) return false; + + return m_pWriter->writeFileUploadRqst(len, filename, position); +} + +bool +FileTransfer::writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName) +{ + char path[FT_FILENAME_SIZE]; + strcpy(path, pDirName); + int nameLen = convertToUnixPath(path); + + return m_pWriter->writeFileCreateDirRqst(nameLen, path); +} + +bool +FileTransfer::writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName) +{ + char path[FT_FILENAME_SIZE]; + strcpy(path, pDirName); + int nameLen = convertToUnixPath(path); + + return m_pWriter->writeFileDirSizeRqst(nameLen, path); +} + +bool +FileTransfer::writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen, + char *pOldName, char *pNewName) +{ + char oldName[FT_FILENAME_SIZE]; + char newName[FT_FILENAME_SIZE]; + + strcpy(oldName, pOldName); + strcpy(newName, pNewName); + + int _oldNameLen = convertToUnixPath(oldName); + int _newNameLen = convertToUnixPath(newName); + + return m_pWriter->writeFileRenameRqst(_oldNameLen, _newNameLen, oldName, newName); +} + +bool +FileTransfer::writeFileDeleteRqst(unsigned short nameLen, char *pName) +{ + char path[FT_FILENAME_SIZE]; + strcpy(path, pName); + int _nameLen = convertToUnixPath(path); + + return m_pWriter->writeFileDeleteRqst(_nameLen, path); +} diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h index f62c2f96..1bfded2c 100644 --- a/vncviewer/FileTransfer.h +++ b/vncviewer/FileTransfer.h @@ -1,4 +1,6 @@ /* Copyright (C) 2005 TightVNC Team. All Rights Reserved. + * + * Developed by Dennis Syrovatsky * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,9 +33,9 @@ #include #include #include +#include +#include #include -#include -#include namespace rfb { namespace win32 { @@ -74,11 +76,12 @@ namespace rfb { bool m_bInitialized; bool m_bResized; bool m_bTransferSuccess; + bool m_bOverwriteAll; FTDialog *m_pFTDialog; - FTMsgReader *m_pReader; - FTMsgWriter *m_pWriter; + rfb::CFTMsgReader *m_pReader; + rfb::CFTMsgWriter *m_pWriter; FileReader m_fileReader; FileWriter m_fileWriter; @@ -111,6 +114,19 @@ namespace rfb { bool procFLRDelete(FileInfo *pFI); bool procFLRRename(FileInfo *pFI); + int convertToUnixPath(char *path); + + bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly); + bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position); + bool writeFileUploadRqst(unsigned short filenameLen, char *pFilename, + unsigned int position); + bool writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName); + bool writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName); + bool writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen, + char *pOldName, char *pNewName); + bool writeFileDeleteRqst(unsigned short nameLen, char *pName); + DWORD64 m_dw64SizeSending; unsigned int m_dirSizeRqstNum; }; diff --git a/vncviewer/vncviewer.dsp b/vncviewer/vncviewer.dsp index 071b3e40..4620dc0b 100644 --- a/vncviewer/vncviewer.dsp +++ b/vncviewer/vncviewer.dsp @@ -166,14 +166,6 @@ SOURCE=.\FTListView.cxx # End Source File # Begin Source File -SOURCE=.\FTMsgReader.cxx -# End Source File -# Begin Source File - -SOURCE=.\FTMsgWriter.cxx -# End Source File -# Begin Source File - SOURCE=.\FTProgress.cxx # End Source File # Begin Source File @@ -242,14 +234,6 @@ SOURCE=.\FTListView.h # End Source File # Begin Source File -SOURCE=.\FTMsgReader.h -# End Source File -# Begin Source File - -SOURCE=.\FTMsgWriter.h -# End Source File -# Begin Source File - SOURCE=.\FTProgress.h # End Source File # Begin Source File -- 2.39.5