From bfd55c94d908482c19fcfad53001c2617c1a822a Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Thu, 10 Nov 2005 07:54:40 +0000 Subject: [PATCH] Added code for FTMsgReader::readFileListData method. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@396 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- vncviewer/FTMsgReader.cxx | 41 ++++++++++++++++++++++++++++++++++++++- vncviewer/FTMsgReader.h | 3 +++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/vncviewer/FTMsgReader.cxx b/vncviewer/FTMsgReader.cxx index 4a3c756a..2e6bdcac 100644 --- a/vncviewer/FTMsgReader.cxx +++ b/vncviewer/FTMsgReader.cxx @@ -39,7 +39,28 @@ FTMsgReader::~FTMsgReader() int FTMsgReader::readFileListData(FileInfo *pFileInfo) { - return 0; + 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; } int @@ -71,3 +92,21 @@ FTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, char *pReason) { return 0; } + +bool +FTMsgReader::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 == -1) { + 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; +} diff --git a/vncviewer/FTMsgReader.h b/vncviewer/FTMsgReader.h index da36aa66..bcb98df9 100644 --- a/vncviewer/FTMsgReader.h +++ b/vncviewer/FTMsgReader.h @@ -46,6 +46,9 @@ namespace rfb { private: rdr::InStream *m_pInStream; + + bool createFileInfo(unsigned int numFiles, FileInfo *fi, + SIZEDATAINFO *pSDInfo, char *pFilenames); }; } } -- 2.39.5