The FTMsgWriter class is finished.
Now this class may send any messages of the file transfers protocol.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@413 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FTMsgWriter.cxx b/vncviewer/FTMsgWriter.cxx
index 724c788..a8fd6e1 100644
--- a/vncviewer/FTMsgWriter.cxx
+++ b/vncviewer/FTMsgWriter.cxx
@@ -36,8 +36,11 @@
 }
 
 bool 
-FTMsgWriter::writeFileListRqst(char *pDirName, bool bDirOnly)
+FTMsgWriter::writeFileListRqst(unsigned short dirnameLen, char *pDirName, 
+                               bool bDirOnly)
 {
+  if (dirnameLen >= FT_FILENAME_SIZE) return false;
+
   char dirName[FT_FILENAME_SIZE];
   strcpy(dirName, pDirName);
   int len = convertToUnixPath(dirName);
@@ -67,31 +70,47 @@
 FTMsgWriter::writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, 
                                    unsigned int position)
 {
-  m_pOutStream->writeU8(msgTypeFileDownloadRequest);
+  if (filenameLen >= FT_FILENAME_SIZE) return false;
 
+  char filename[FT_FILENAME_SIZE];
+  strcpy(filename, pFilename);
+  unsigned short len = (unsigned short) convertToUnixPath(filename);
+  if (len <= 0) return false;
+
+  m_pOutStream->writeU8(msgTypeFileDownloadRequest);
+  m_pOutStream->writeU8(0);
+  m_pOutStream->writeU16(len);
+  m_pOutStream->writeU32(position);
+  m_pOutStream->writeBytes(filename, len);
   m_pOutStream->flush();
 
-  return false;
+  return true;
 }
 
 bool 
 FTMsgWriter::writeFileUploadData(unsigned short dataSize, char *pData)
 {
   m_pOutStream->writeU8(msgTypeFileUploadData);
-  
+  m_pOutStream->writeU8(0);
+  m_pOutStream->writeU16(dataSize);
+  m_pOutStream->writeU16(dataSize);
+  m_pOutStream->writeBytes(pData, dataSize);
   m_pOutStream->flush();
 
-  return false;
+  return true;
 }
 
 bool 
 FTMsgWriter::writeFileUploadData(unsigned int modTime)
 {
   m_pOutStream->writeU8(msgTypeFileUploadData);
-
+  m_pOutStream->writeU8(0);
+  m_pOutStream->writeU16(0);
+  m_pOutStream->writeU16(0);
+  m_pOutStream->writeU32(modTime);
   m_pOutStream->flush();
 
-  return false;
+  return true;
 }
 
 bool 
@@ -105,11 +124,21 @@
 FTMsgWriter::writeFileUploadRqst(unsigned short filenameLen, char *pFilename, 
                                  unsigned int position)
 {
-  m_pOutStream->writeU8(msgTypeFileUploadRequest);
+  if (filenameLen >= FT_FILENAME_SIZE) return false;
 
+  char filename[FT_FILENAME_SIZE];
+  strcpy(filename, pFilename);
+  unsigned short len = (unsigned short) convertToUnixPath(filename);
+  if (len <= 0) return false;
+
+  m_pOutStream->writeU8(msgTypeFileUploadRequest);
+  m_pOutStream->writeU8(0);
+  m_pOutStream->writeU16(len);
+  m_pOutStream->writeU32(position);
+  m_pOutStream->writeBytes(filename, len);
   m_pOutStream->flush();
 
-  return false;
+  return true;
 }
 
 bool 
diff --git a/vncviewer/FTMsgWriter.h b/vncviewer/FTMsgWriter.h
index e41ca80..42e9a93 100644
--- a/vncviewer/FTMsgWriter.h
+++ b/vncviewer/FTMsgWriter.h
@@ -37,7 +37,7 @@
       FTMsgWriter(rdr::OutStream *pOS);
       ~FTMsgWriter();
 
-      bool writeFileListRqst(char *pDirName, bool bDirOnly);
+      bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly);
       
       bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason);
       bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, 
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 8997ebc..57e6763 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -201,5 +201,5 @@
 {
   m_queueFileListRqst.add(pPath, 0, 0, dest);
 
-  m_pWriter->writeFileListRqst(pPath, bDirOnly);
+  m_pWriter->writeFileListRqst(strlen(pPath), pPath, bDirOnly);
 }
\ No newline at end of file