aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis Syrovatsky <dennis@tightvnc.com>2005-11-23 04:14:10 +0000
committerDennis Syrovatsky <dennis@tightvnc.com>2005-11-23 04:14:10 +0000
commitf7b2449ff01cd2c306702ab815b5b9539613f130 (patch)
treeac3d064fa105e8c4c8466477d4ce9f7fe9e10da6
parentabc2cc57795131cd87707b62c455d662e032e70a (diff)
downloadtigervnc-f7b2449ff01cd2c306702ab815b5b9539613f130.tar.gz
tigervnc-f7b2449ff01cd2c306702ab815b5b9539613f130.zip
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
-rw-r--r--vncviewer/FTMsgWriter.cxx47
-rw-r--r--vncviewer/FTMsgWriter.h2
-rw-r--r--vncviewer/FileTransfer.cxx2
3 files changed, 40 insertions, 11 deletions
diff --git a/vncviewer/FTMsgWriter.cxx b/vncviewer/FTMsgWriter.cxx
index 724c7888..a8fd6e13 100644
--- a/vncviewer/FTMsgWriter.cxx
+++ b/vncviewer/FTMsgWriter.cxx
@@ -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
diff --git a/vncviewer/FTMsgWriter.h b/vncviewer/FTMsgWriter.h
index e41ca800..42e9a93d 100644
--- a/vncviewer/FTMsgWriter.h
+++ b/vncviewer/FTMsgWriter.h
@@ -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,
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index 8997ebc5..57e67638 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -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