diff options
author | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-11-10 07:54:40 +0000 |
---|---|---|
committer | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-11-10 07:54:40 +0000 |
commit | bfd55c94d908482c19fcfad53001c2617c1a822a (patch) | |
tree | 8aef373ed0b612f47fa913707548cc8041e83386 /vncviewer/FTMsgReader.cxx | |
parent | c08f042aa4ff68f473ad41cda8189af27d1ff558 (diff) | |
download | tigervnc-bfd55c94d908482c19fcfad53001c2617c1a822a.tar.gz tigervnc-bfd55c94d908482c19fcfad53001c2617c1a822a.zip |
Added code for FTMsgReader::readFileListData method.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@396 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'vncviewer/FTMsgReader.cxx')
-rw-r--r-- | vncviewer/FTMsgReader.cxx | 41 |
1 files changed, 40 insertions, 1 deletions
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; +} |