]> source.dussan.org Git - tigervnc.git/commitdiff
The FTMsgWriter class is finished.
authorDennis Syrovatsky <dennis@tightvnc.com>
Wed, 23 Nov 2005 04:14:10 +0000 (04:14 +0000)
committerDennis Syrovatsky <dennis@tightvnc.com>
Wed, 23 Nov 2005 04:14:10 +0000 (04:14 +0000)
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

vncviewer/FTMsgWriter.cxx
vncviewer/FTMsgWriter.h
vncviewer/FileTransfer.cxx

index 724c78882ee7a9b2fcad2739efbf0aae191b134a..a8fd6e1357c40c36215cc95c7a86f274bb4d9298 100644 (file)
@@ -36,8 +36,11 @@ FTMsgWriter::~FTMsgWriter()
 }
 
 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 @@ bool
 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 @@ bool
 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 
index e41ca800031acbe31d9d882c9b469cfc0888ee2b..42e9a93df2ea054d6c93a69f7280a784b709fc57 100644 (file)
@@ -37,7 +37,7 @@ namespace rfb {
       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, 
index 8997ebc50f8a41b52558b733d82bf9f8b0f5ce59..57e6763866b168ba495507891721573d455b6860 100644 (file)
@@ -201,5 +201,5 @@ FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
 {
   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