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