From 10f47565a84a05837cc8329afbfe14f97b2ff642 Mon Sep 17 00:00:00 2001 From: Dennis Syrovatsky Date: Thu, 10 Nov 2005 08:10:12 +0000 Subject: [PATCH] Code improvements. Added code for FTMsgWriter::writeFileListRqst(...) method. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@397 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- vncviewer/FTMsgWriter.cxx | 33 ++++++++++++++++++++++++++++++--- vncviewer/FTMsgWriter.h | 7 +++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/vncviewer/FTMsgWriter.cxx b/vncviewer/FTMsgWriter.cxx index 7f22390d..0a9f4dfa 100644 --- a/vncviewer/FTMsgWriter.cxx +++ b/vncviewer/FTMsgWriter.cxx @@ -36,10 +36,22 @@ FTMsgWriter::~FTMsgWriter() } bool -FTMsgWriter::writeFileListRqst(unsigned short dirNameSize, char *pDirName, - int dest, unsigned char flags) +FTMsgWriter::writeFileListRqst(char *pDirName, bool bDirOnly) { - return false; + char dirName[FT_FILENAME_SIZE]; + strcpy(dirName, pDirName); + int len = convertToUnixPath(dirName); + if (len <= 0) return false; + + unsigned char flags = 0; + if (bDirOnly) flags = 0x10; + + m_pOutStream->writeU8(msgTypeFileListRequest); + m_pOutStream->writeU8(flags); + m_pOutStream->writeU16(len); + m_pOutStream->writeBytes((void *)dirName, len); + + return true; } @@ -105,3 +117,18 @@ FTMsgWriter::writeFileDeleteRqst(unsigned short nameLen, char *pName) { return false; } + +int +FTMsgWriter::convertToUnixPath(char *path) +{ + int len = strlen(path); + if (len >= FT_FILENAME_SIZE) return -1; + if (len == 0) {strcpy(path, "/"); return 1;} + for (int i = (len - 1); i >= 0; i--) { + if (path[i] == '\\') path[i] = '/'; + path[i+1] = path[i]; + } + path[len + 1] = '\0'; + path[0] = '/'; + return strlen(path); +} diff --git a/vncviewer/FTMsgWriter.h b/vncviewer/FTMsgWriter.h index a7026f16..7c832dbd 100644 --- a/vncviewer/FTMsgWriter.h +++ b/vncviewer/FTMsgWriter.h @@ -26,6 +26,8 @@ #include #include +#include +#include namespace rfb { namespace win32 { @@ -35,8 +37,7 @@ namespace rfb { FTMsgWriter(rdr::OutStream *pOS); ~FTMsgWriter(); - bool writeFileListRqst(unsigned short dirNameSize, char *pDirName, - int dest, unsigned char flags); + bool writeFileListRqst(char *pDirName, bool bDirOnly); bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason); bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, @@ -57,6 +58,8 @@ namespace rfb { private: rdr::OutStream *m_pOutStream; + + int convertToUnixPath(char *path); }; } } -- 2.39.5