Added SFTMsgWriter::writeFileListData method.
Deleted FileInfo::getAllFilenames() method.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@465 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfb/SFTMsgWriter.cxx b/rfb/SFTMsgWriter.cxx
index 4ea85a8..4edfc46 100644
--- a/rfb/SFTMsgWriter.cxx
+++ b/rfb/SFTMsgWriter.cxx
@@ -37,7 +37,43 @@
bool
SFTMsgWriter::writeFileListData(unsigned char flags, rfb::FileInfo *pFileInfo)
{
- return false;
+ unsigned int numFiles = pFileInfo->getNumEntries();
+
+ m_pOS->writeU8(msgTypeFileListData);
+ m_pOS->writeU8(flags);
+ m_pOS->writeU16(numFiles);
+
+ if (numFiles == 0) {
+ m_pOS->writeU16(0);
+ m_pOS->writeU16(0);
+ } else {
+ unsigned int filenamesSize = pFileInfo->getFilenamesSize() + numFiles;
+
+ m_pOS->writeU16(filenamesSize);
+ m_pOS->writeU16(filenamesSize);
+
+ char *pFilenames = new char [filenamesSize];
+ unsigned int pos = 0;
+
+ for (unsigned int i = 0; i < numFiles; i++) {
+ char *pName = pFileInfo->getNameAt(i);
+ unsigned int len = strlen(pName);
+
+ memcpy((void *)&pFilenames[pos], pName, len + 1);
+ pos += len + 2;
+
+ m_pOS->writeU32(pFileInfo->getSizeAt(i));
+ m_pOS->writeU32(pFileInfo->getDataAt(i));
+ }
+
+ m_pOS->writeBytes(pFilenames, filenamesSize);
+
+ delete [] pFilenames;
+ }
+
+ m_pOS->flush();
+
+ return true;
}
bool