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/FileInfo.cxx b/rfb/FileInfo.cxx
index 0d770f3..5b151d9 100644
--- a/rfb/FileInfo.cxx
+++ b/rfb/FileInfo.cxx
@@ -237,23 +237,3 @@
return filenamesSize;
}
-
-char *
-FileInfo::getAllFilenames(unsigned int *pFilenameSize)
-{
- unsigned int filenameSize = getFilenamesSize() + getNumEntries();
-
- char *pFilenames = new char[filenameSize];
- unsigned int pos = 0;
-
- for (unsigned int i = 0; i < getNumEntries(); i++) {
- char *pName = getNameAt(i);
- unsigned int len = strlen(pName);
-
- memcpy((void *)&pFilenames[pos], pName, len + 1);
- pos += len + 2;
- }
-
- *pFilenameSize = filenameSize;
- return pFilenames;
-}
diff --git a/rfb/FileInfo.h b/rfb/FileInfo.h
index c2b63ac..4dccc95 100644
--- a/rfb/FileInfo.h
+++ b/rfb/FileInfo.h
@@ -55,7 +55,6 @@
unsigned int getNumEntries();
unsigned int getFilenamesSize();
- char *getAllFilenames(unsigned int *pFilenameSize);
void sort();
void free();
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