From 9d752d81f38c1168e07f51e42a9e952d491fd96b Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Sat, 12 Nov 2005 07:16:18 +0000 Subject: [PATCH] Added code for methods in the FTMsgReader class for reading the file transfers messages from server. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@400 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- vncviewer/FTMsgReader.cxx | 63 +++++++++++++++++++++++++++++++++------ vncviewer/FTMsgReader.h | 9 +++--- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/vncviewer/FTMsgReader.cxx b/vncviewer/FTMsgReader.cxx index 2e6bdcac..e3652d0e 100644 --- a/vncviewer/FTMsgReader.cxx +++ b/vncviewer/FTMsgReader.cxx @@ -64,33 +64,59 @@ FTMsgReader::readFileListData(FileInfo *pFileInfo) } int -FTMsgReader::readFileDownloadData(char *pFile, unsigned int *pModTime) +FTMsgReader::readFileDownloadData(void *pFile, unsigned int *pModTime) { - return 0; + unsigned char compressLevel = m_pInStream->readU8(); + int realSize = m_pInStream->readU16(); + int compressedSize = m_pInStream->readU16(); + + if ((realSize == 0) && (compressedSize == 0)) { + *pModTime = m_pInStream->readU32(); + return 0; + } else { + pFile = malloc(compressedSize); + if (pFile == NULL) { + m_pInStream->skip(compressedSize); + return -1; + } else { + m_pInStream->readBytes(pFile, compressedSize); + return compressedSize; + } + } } int -FTMsgReader::readFileUploadCancel(char *pReason) +FTMsgReader::readFileUploadCancel(void *pReason) { - return 0; + m_pInStream->skip(1); + return readReasonMsg(pReason); } int -FTMsgReader::readFileDownloadFailed(char *pReason) +FTMsgReader::readFileDownloadFailed(void *pReason) { - return 0; + m_pInStream->skip(1); + return readReasonMsg(pReason); } int FTMsgReader::readFileDirSizeData(DWORD64 *pdw64DirSize) { - return 0; + m_pInStream->skip(1); + unsigned short size16 = m_pInStream->readU16(); + unsigned int size32 = m_pInStream->readU32(); + DWORD64 dw64Size = 0; + dw64Size = size16; + dw64Size = (dw64Size << 32) + size32; + *pdw64DirSize = dw64Size; + return 1; } int -FTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, char *pReason) +FTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, void *pReason) { - return 0; + *pTypeOfRequest = m_pInStream->readU8(); + return readReasonMsg(pReason); } bool @@ -110,3 +136,22 @@ FTMsgReader::createFileInfo(unsigned int numFiles, FileInfo *fi, } return true; } + +int +FTMsgReader::readReasonMsg(void *pReason) +{ + int reasonLen = m_pInStream->readU16(); + int _reasonLen = reasonLen + 1; + if (reasonLen == 0) { + return 0; + } else { + pReason = malloc(_reasonLen); + if (pReason == NULL) { + m_pInStream->skip(reasonLen); + return -1; + } + m_pInStream->readBytes(pReason, reasonLen); + memset(((char *)pReason+reasonLen), '\0', 1); + return _reasonLen; + } +} diff --git a/vncviewer/FTMsgReader.h b/vncviewer/FTMsgReader.h index bcb98df9..549dc0c4 100644 --- a/vncviewer/FTMsgReader.h +++ b/vncviewer/FTMsgReader.h @@ -38,17 +38,18 @@ namespace rfb { ~FTMsgReader(); int readFileListData(FileInfo *pFileInfo); - int readFileDownloadData(char *pFile, unsigned int *pModTime); - int readFileUploadCancel(char *pReason); - int readFileDownloadFailed(char *pReason); + int readFileDownloadData(void *pFile, unsigned int *pModTime); + int readFileUploadCancel(void *pReason); + int readFileDownloadFailed(void *pReason); int readFileDirSizeData(DWORD64 *pdw64DirSize); - int readFileLastRqstFailed(int *pTypeOfRequest, char *pReason); + int readFileLastRqstFailed(int *pTypeOfRequest, void *pReason); private: rdr::InStream *m_pInStream; bool createFileInfo(unsigned int numFiles, FileInfo *fi, SIZEDATAINFO *pSDInfo, char *pFilenames); + int readReasonMsg(void *pReason); }; } } -- 2.39.5