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