aboutsummaryrefslogtreecommitdiffstats
path: root/vncviewer/FTMsgReader.cxx
diff options
context:
space:
mode:
authorDennis Syrovatsky <dennis@tightvnc.com>2005-11-10 07:54:40 +0000
committerDennis Syrovatsky <dennis@tightvnc.com>2005-11-10 07:54:40 +0000
commitbfd55c94d908482c19fcfad53001c2617c1a822a (patch)
tree8aef373ed0b612f47fa913707548cc8041e83386 /vncviewer/FTMsgReader.cxx
parentc08f042aa4ff68f473ad41cda8189af27d1ff558 (diff)
downloadtigervnc-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.cxx41
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;
+}