-/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- CFTMsgReader.cxx\r
-\r
-#include <rfb/CFTMsgReader.h>\r
-\r
-using namespace rfb;\r
-\r
-CFTMsgReader::CFTMsgReader(rdr::InStream *pIS)\r
-{\r
- m_pInStream = pIS;\r
-}\r
-\r
-CFTMsgReader::~CFTMsgReader()\r
-{\r
-\r
-}\r
-\r
-int \r
-CFTMsgReader::readFileListData(FileInfo *pFileInfo)\r
-{\r
- unsigned char flags = m_pInStream->readU8();\r
- int numFiles = m_pInStream->readU16();\r
- int dataSize = m_pInStream->readU16();\r
- int compressedSize = m_pInStream->readU16();\r
- \r
- if (flags & 0x80) {\r
- return -1;\r
- } else {\r
- if (numFiles > 0) {\r
- char *pFilenames = new char[compressedSize];\r
- SIZEDATAINFO *pSDI = new SIZEDATAINFO[numFiles];\r
- for (int i = 0; i < numFiles; i++) {\r
- pSDI[i].size = m_pInStream->readU32();\r
- pSDI[i].data = m_pInStream->readU32();\r
- }\r
- m_pInStream->readBytes((void *)pFilenames, compressedSize);\r
- createFileInfo(numFiles, pFileInfo, pSDI, pFilenames);\r
- delete [] pSDI;\r
- delete [] pFilenames;\r
- }\r
- }\r
- return numFiles;\r
-}\r
-\r
-void * \r
-CFTMsgReader::readFileDownloadData(unsigned int *pSize, unsigned int *pModTime)\r
-{\r
- unsigned char compressLevel = m_pInStream->readU8();\r
- int realSize = m_pInStream->readU16();\r
- int compressedSize = m_pInStream->readU16();\r
-\r
- if ((realSize == 0) && (compressedSize == 0)) {\r
- *pSize = 0;\r
- *pModTime = m_pInStream->readU32();\r
- return NULL;\r
- } else {\r
- char *pFile = new char [compressedSize];\r
- if (pFile == NULL) {\r
- m_pInStream->skip(compressedSize);\r
- *pModTime = 0;\r
- return NULL;\r
- } else {\r
- m_pInStream->readBytes(pFile, compressedSize);\r
- *pSize = compressedSize;\r
- return pFile;\r
- }\r
- }\r
-}\r
-\r
-char * \r
-CFTMsgReader::readFileUploadCancel(unsigned int *pReasonSize)\r
-{\r
- m_pInStream->skip(1);\r
- return readReasonMsg(pReasonSize);\r
-}\r
-\r
-char * \r
-CFTMsgReader::readFileDownloadFailed(unsigned int *pReasonSize)\r
-{\r
- m_pInStream->skip(1);\r
- return readReasonMsg(pReasonSize);\r
-}\r
-\r
-int \r
-CFTMsgReader::readFileDirSizeData(unsigned short *pDirSizeLow16, \r
- unsigned int *pDirSizeHigh32)\r
-{\r
- m_pInStream->skip(1);\r
- *pDirSizeLow16 = m_pInStream->readU16();\r
- *pDirSizeHigh32 = m_pInStream->readU32();\r
- return 1;\r
-}\r
-\r
-char * \r
-CFTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize)\r
-{\r
- *pTypeOfRequest = m_pInStream->readU8();\r
- return readReasonMsg(pReasonSize);\r
-}\r
-\r
-bool \r
-CFTMsgReader::createFileInfo(unsigned int numFiles, FileInfo *fi, \r
- SIZEDATAINFO *pSDInfo, char *pFilenames)\r
-{\r
- int pos = 0;\r
- int size = 0;\r
- for (unsigned int i = 0; i < numFiles; i++) {\r
- size = pSDInfo[i].size;\r
- if (size == FT_NET_ATTR_DIR) {\r
- fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_DIR);\r
- } else {\r
- fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_FILE);\r
- }\r
- pos += strlen(pFilenames + pos) + 1;\r
- }\r
- return true;\r
-}\r
-\r
-char * \r
-CFTMsgReader::readReasonMsg(unsigned int *pReasonSize)\r
-{\r
- int reasonLen = m_pInStream->readU16();\r
- int _reasonLen = reasonLen + 1;\r
- char *pReason;\r
- if (reasonLen == 0) {\r
- *pReasonSize = 0;\r
- return NULL;\r
- } else {\r
- pReason = new char [_reasonLen];\r
- if (pReason == NULL) {\r
- m_pInStream->skip(reasonLen);\r
- *pReasonSize = 0;\r
- return NULL;\r
- }\r
- m_pInStream->readBytes(pReason, reasonLen);\r
- memset(((char *)pReason+reasonLen), '\0', 1);\r
- return pReason;\r
- }\r
-}\r
-\r
+/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- CFTMsgReader.cxx
+
+#include <rfb/CFTMsgReader.h>
+
+using namespace rfb;
+
+CFTMsgReader::CFTMsgReader(rdr::InStream *pIS)
+{
+ m_pInStream = pIS;
+}
+
+CFTMsgReader::~CFTMsgReader()
+{
+
+}
+
+int
+CFTMsgReader::readFileListData(FileInfo *pFileInfo)
+{
+ unsigned char flags = m_pInStream->readU8();
+ int numFiles = m_pInStream->readU16();
+ int dataSize = m_pInStream->readU16();
+ int compressedSize = m_pInStream->readU16();
+
+ if (flags & 0x80) {
+ return -1;
+ } else {
+ if (numFiles > 0) {
+ char *pFilenames = new char[compressedSize];
+ SIZEDATAINFO *pSDI = new SIZEDATAINFO[numFiles];
+ for (int i = 0; i < numFiles; i++) {
+ pSDI[i].size = m_pInStream->readU32();
+ pSDI[i].data = m_pInStream->readU32();
+ }
+ m_pInStream->readBytes((void *)pFilenames, compressedSize);
+ createFileInfo(numFiles, pFileInfo, pSDI, pFilenames);
+ delete [] pSDI;
+ delete [] pFilenames;
+ }
+ }
+ return numFiles;
+}
+
+void *
+CFTMsgReader::readFileDownloadData(unsigned int *pSize, unsigned int *pModTime)
+{
+ unsigned char compressLevel = m_pInStream->readU8();
+ int realSize = m_pInStream->readU16();
+ int compressedSize = m_pInStream->readU16();
+
+ if ((realSize == 0) && (compressedSize == 0)) {
+ *pSize = 0;
+ *pModTime = m_pInStream->readU32();
+ return NULL;
+ } else {
+ char *pFile = new char [compressedSize];
+ if (pFile == NULL) {
+ m_pInStream->skip(compressedSize);
+ *pModTime = 0;
+ return NULL;
+ } else {
+ m_pInStream->readBytes(pFile, compressedSize);
+ *pSize = compressedSize;
+ return pFile;
+ }
+ }
+}
+
+char *
+CFTMsgReader::readFileUploadCancel(unsigned int *pReasonSize)
+{
+ m_pInStream->skip(1);
+ return readReasonMsg(pReasonSize);
+}
+
+char *
+CFTMsgReader::readFileDownloadFailed(unsigned int *pReasonSize)
+{
+ m_pInStream->skip(1);
+ return readReasonMsg(pReasonSize);
+}
+
+int
+CFTMsgReader::readFileDirSizeData(unsigned short *pDirSizeLow16,
+ unsigned int *pDirSizeHigh32)
+{
+ m_pInStream->skip(1);
+ *pDirSizeLow16 = m_pInStream->readU16();
+ *pDirSizeHigh32 = m_pInStream->readU32();
+ return 1;
+}
+
+char *
+CFTMsgReader::readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize)
+{
+ *pTypeOfRequest = m_pInStream->readU8();
+ return readReasonMsg(pReasonSize);
+}
+
+bool
+CFTMsgReader::createFileInfo(unsigned int numFiles, FileInfo *fi,
+ SIZEDATAINFO *pSDInfo, char *pFilenames)
+{
+ int pos = 0;
+ int size = 0;
+ for (unsigned int i = 0; i < numFiles; i++) {
+ size = pSDInfo[i].size;
+ if (size == FT_NET_ATTR_DIR) {
+ fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_DIR);
+ } else {
+ fi->add((pFilenames + pos), size, pSDInfo[i].data, FT_ATTR_FILE);
+ }
+ pos += strlen(pFilenames + pos) + 1;
+ }
+ return true;
+}
+
+char *
+CFTMsgReader::readReasonMsg(unsigned int *pReasonSize)
+{
+ int reasonLen = m_pInStream->readU16();
+ int _reasonLen = reasonLen + 1;
+ char *pReason;
+ if (reasonLen == 0) {
+ *pReasonSize = 0;
+ return NULL;
+ } else {
+ pReason = new char [_reasonLen];
+ if (pReason == NULL) {
+ m_pInStream->skip(reasonLen);
+ *pReasonSize = 0;
+ return NULL;
+ }
+ m_pInStream->readBytes(pReason, reasonLen);
+ memset(((char *)pReason+reasonLen), '\0', 1);
+ return pReason;
+ }
+}
+
-/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- CFTMsgReader.h\r
-\r
-#ifndef __RFB_CFTMSGREADER_H__\r
-#define __RFB_CFTMSGREADER_H__\r
-\r
-#include <rdr/InStream.h>\r
-#include <rfb/FileInfo.h>\r
-\r
-namespace rfb {\r
- class CFTMsgReader\r
- {\r
- public:\r
- CFTMsgReader(rdr::InStream *pIS);\r
- ~CFTMsgReader();\r
- \r
- int readFileListData(FileInfo *pFileInfo);\r
- int readFileDirSizeData(unsigned short *pDirSizeLow16, unsigned int *pDirSizeHigh32);\r
- \r
- char *readFileUploadCancel(unsigned int *pReasonSize);\r
- char *readFileDownloadFailed(unsigned int *pReasonSize);\r
- char *readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize);\r
- void *readFileDownloadData(unsigned int *pSize, unsigned int *pModTime);\r
- \r
- private:\r
- rdr::InStream *m_pInStream;\r
- \r
- bool createFileInfo(unsigned int numFiles, FileInfo *fi, \r
- SIZEDATAINFO *pSDInfo, char *pFilenames);\r
- char *readReasonMsg(unsigned int *pReasonSize);\r
- };\r
-}\r
-\r
-#endif // __RFB_CFTMSGREADER_H__\r
+/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- CFTMsgReader.h
+
+#ifndef __RFB_CFTMSGREADER_H__
+#define __RFB_CFTMSGREADER_H__
+
+#include <rdr/InStream.h>
+#include <rfb/FileInfo.h>
+
+namespace rfb {
+ class CFTMsgReader
+ {
+ public:
+ CFTMsgReader(rdr::InStream *pIS);
+ ~CFTMsgReader();
+
+ int readFileListData(FileInfo *pFileInfo);
+ int readFileDirSizeData(unsigned short *pDirSizeLow16, unsigned int *pDirSizeHigh32);
+
+ char *readFileUploadCancel(unsigned int *pReasonSize);
+ char *readFileDownloadFailed(unsigned int *pReasonSize);
+ char *readFileLastRqstFailed(int *pTypeOfRequest, unsigned int *pReasonSize);
+ void *readFileDownloadData(unsigned int *pSize, unsigned int *pModTime);
+
+ private:
+ rdr::InStream *m_pInStream;
+
+ bool createFileInfo(unsigned int numFiles, FileInfo *fi,
+ SIZEDATAINFO *pSDInfo, char *pFilenames);
+ char *readReasonMsg(unsigned int *pReasonSize);
+ };
+}
+
+#endif // __RFB_CFTMSGREADER_H__
-/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- CFTMsgWriter.cxx\r
-\r
-#include <rfb/CFTMsgWriter.h>\r
-\r
-using namespace rfb;\r
-\r
-CFTMsgWriter::CFTMsgWriter(rdr::OutStream *pOS)\r
-{\r
- m_pOutStream = pOS;\r
-}\r
-\r
-CFTMsgWriter::~CFTMsgWriter()\r
-{\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileListRqst(unsigned short dirnameLen, char *pDirName, \r
- bool bDirOnly)\r
-{\r
- if (dirnameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- unsigned char flags = 0;\r
- if (bDirOnly) flags = 0x10;\r
-\r
- m_pOutStream->writeU8(msgTypeFileListRequest);\r
- m_pOutStream->writeU8(flags);\r
- m_pOutStream->writeU16(dirnameLen);\r
- m_pOutStream->writeBytes((void *)pDirName, dirnameLen);\r
- m_pOutStream->flush();\r
-\r
- return true;\r
-}\r
-\r
-\r
-bool \r
-CFTMsgWriter::writeFileDownloadCancel(unsigned short reasonLen, char *pReason)\r
-{\r
- m_pOutStream->writeU8(msgTypeFileDownloadCancel);\r
- return writeU8U16StringMsg(reasonLen, pReason);\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, \r
- unsigned int position)\r
-{\r
- if (filenameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileDownloadRequest);\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(filenameLen);\r
- m_pOutStream->writeU32(position);\r
- m_pOutStream->writeBytes(pFilename, filenameLen);\r
- m_pOutStream->flush();\r
-\r
- return true;\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileUploadData(unsigned short dataSize, char *pData)\r
-{\r
- m_pOutStream->writeU8(msgTypeFileUploadData);\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(dataSize);\r
- m_pOutStream->writeU16(dataSize);\r
- m_pOutStream->writeBytes(pData, dataSize);\r
- m_pOutStream->flush();\r
-\r
- return true;\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileUploadData(unsigned int modTime)\r
-{\r
- m_pOutStream->writeU8(msgTypeFileUploadData);\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(0);\r
- m_pOutStream->writeU16(0);\r
- m_pOutStream->writeU32(modTime);\r
- m_pOutStream->flush();\r
-\r
- return true;\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileUploadFailed(unsigned short reasonLen, char *pReason)\r
-{\r
- m_pOutStream->writeU8(msgTypeFileUploadFailed);\r
- return writeU8U16StringMsg(reasonLen, pReason);\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileUploadRqst(unsigned short filenameLen, char *pFilename, \r
- unsigned int position)\r
-{\r
- if (filenameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileUploadRequest);\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(filenameLen);\r
- m_pOutStream->writeU32(position);\r
- m_pOutStream->writeBytes((void *)pFilename, filenameLen);\r
- m_pOutStream->flush();\r
-\r
- return true;\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName)\r
-{\r
- if (dirNameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileCreateDirRequest);\r
- return writeU8U16StringMsg(dirNameLen, pDirName);\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName)\r
-{\r
- if (dirNameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileDirSizeRequest);\r
- return writeU8U16StringMsg(dirNameLen, pDirName);\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen,\r
- char *pOldName, char *pNewName)\r
-{\r
- if ((oldNameLen >= FT_FILENAME_SIZE) || (newNameLen >= FT_FILENAME_SIZE)) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileRenameRequest);\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(oldNameLen);\r
- m_pOutStream->writeU16(newNameLen);\r
- m_pOutStream->writeBytes(pOldName, oldNameLen);\r
- m_pOutStream->writeBytes(pNewName, newNameLen);\r
- m_pOutStream->flush();\r
- \r
- return true;\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeFileDeleteRqst(unsigned short nameLen, char *pName)\r
-{\r
- if (nameLen >= FT_FILENAME_SIZE) return false;\r
-\r
- m_pOutStream->writeU8(msgTypeFileDeleteRequest);\r
- return writeU8U16StringMsg(nameLen, pName);\r
-}\r
-\r
-bool \r
-CFTMsgWriter::writeU8U16StringMsg(unsigned short strLength, char *pString)\r
-{\r
- m_pOutStream->writeU8(0);\r
- m_pOutStream->writeU16(strLength);\r
- m_pOutStream->writeBytes(pString, strLength);\r
- m_pOutStream->flush();\r
- return true;\r
-}\r
+/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- CFTMsgWriter.cxx
+
+#include <rfb/CFTMsgWriter.h>
+
+using namespace rfb;
+
+CFTMsgWriter::CFTMsgWriter(rdr::OutStream *pOS)
+{
+ m_pOutStream = pOS;
+}
+
+CFTMsgWriter::~CFTMsgWriter()
+{
+}
+
+bool
+CFTMsgWriter::writeFileListRqst(unsigned short dirnameLen, char *pDirName,
+ bool bDirOnly)
+{
+ if (dirnameLen >= FT_FILENAME_SIZE) return false;
+
+ unsigned char flags = 0;
+ if (bDirOnly) flags = 0x10;
+
+ m_pOutStream->writeU8(msgTypeFileListRequest);
+ m_pOutStream->writeU8(flags);
+ m_pOutStream->writeU16(dirnameLen);
+ m_pOutStream->writeBytes((void *)pDirName, dirnameLen);
+ m_pOutStream->flush();
+
+ return true;
+}
+
+
+bool
+CFTMsgWriter::writeFileDownloadCancel(unsigned short reasonLen, char *pReason)
+{
+ m_pOutStream->writeU8(msgTypeFileDownloadCancel);
+ return writeU8U16StringMsg(reasonLen, pReason);
+}
+
+bool
+CFTMsgWriter::writeFileDownloadRqst(unsigned short filenameLen, char *pFilename,
+ unsigned int position)
+{
+ if (filenameLen >= FT_FILENAME_SIZE) return false;
+
+ m_pOutStream->writeU8(msgTypeFileDownloadRequest);
+ m_pOutStream->writeU8(0);
+ m_pOutStream->writeU16(filenameLen);
+ m_pOutStream->writeU32(position);
+ m_pOutStream->writeBytes(pFilename, filenameLen);
+ m_pOutStream->flush();
+
+ return true;
+}
+
+bool
+CFTMsgWriter::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 true;
+}
+
+bool
+CFTMsgWriter::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 true;
+}
+
+bool
+CFTMsgWriter::writeFileUploadFailed(unsigned short reasonLen, char *pReason)
+{
+ m_pOutStream->writeU8(msgTypeFileUploadFailed);
+ return writeU8U16StringMsg(reasonLen, pReason);
+}
+
+bool
+CFTMsgWriter::writeFileUploadRqst(unsigned short filenameLen, char *pFilename,
+ unsigned int position)
+{
+ if (filenameLen >= FT_FILENAME_SIZE) return false;
+
+ m_pOutStream->writeU8(msgTypeFileUploadRequest);
+ m_pOutStream->writeU8(0);
+ m_pOutStream->writeU16(filenameLen);
+ m_pOutStream->writeU32(position);
+ m_pOutStream->writeBytes((void *)pFilename, filenameLen);
+ m_pOutStream->flush();
+
+ return true;
+}
+
+bool
+CFTMsgWriter::writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName)
+{
+ if (dirNameLen >= FT_FILENAME_SIZE) return false;
+
+ m_pOutStream->writeU8(msgTypeFileCreateDirRequest);
+ return writeU8U16StringMsg(dirNameLen, pDirName);
+}
+
+bool
+CFTMsgWriter::writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName)
+{
+ if (dirNameLen >= FT_FILENAME_SIZE) return false;
+
+ m_pOutStream->writeU8(msgTypeFileDirSizeRequest);
+ return writeU8U16StringMsg(dirNameLen, pDirName);
+}
+
+bool
+CFTMsgWriter::writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen,
+ char *pOldName, char *pNewName)
+{
+ if ((oldNameLen >= FT_FILENAME_SIZE) || (newNameLen >= FT_FILENAME_SIZE)) return false;
+
+ m_pOutStream->writeU8(msgTypeFileRenameRequest);
+ m_pOutStream->writeU8(0);
+ m_pOutStream->writeU16(oldNameLen);
+ m_pOutStream->writeU16(newNameLen);
+ m_pOutStream->writeBytes(pOldName, oldNameLen);
+ m_pOutStream->writeBytes(pNewName, newNameLen);
+ m_pOutStream->flush();
+
+ return true;
+}
+
+bool
+CFTMsgWriter::writeFileDeleteRqst(unsigned short nameLen, char *pName)
+{
+ if (nameLen >= FT_FILENAME_SIZE) return false;
+
+ m_pOutStream->writeU8(msgTypeFileDeleteRequest);
+ return writeU8U16StringMsg(nameLen, pName);
+}
+
+bool
+CFTMsgWriter::writeU8U16StringMsg(unsigned short strLength, char *pString)
+{
+ m_pOutStream->writeU8(0);
+ m_pOutStream->writeU16(strLength);
+ m_pOutStream->writeBytes(pString, strLength);
+ m_pOutStream->flush();
+ return true;
+}
-/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- CFTMsgWriter.h\r
-\r
-#ifndef __RFB_CFTMSGWRITER_H__\r
-#define __RFB_CFTMSGWRITER_H__\r
-\r
-#include <rdr/types.h>\r
-#include <rdr/OutStream.h>\r
-#include <rfb/msgTypes.h>\r
-#include <rfb/fttypes.h>\r
-\r
-namespace rfb {\r
- class CFTMsgWriter\r
- {\r
- public:\r
- CFTMsgWriter(rdr::OutStream *pOS);\r
- ~CFTMsgWriter();\r
- \r
- bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly);\r
- \r
- bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason);\r
- bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, \r
- unsigned int position);\r
- \r
- bool writeFileUploadData(unsigned short dataSize, char *pData);\r
- bool writeFileUploadData(unsigned int modTime);\r
- bool writeFileUploadFailed(unsigned short reasonLen, char *pReason);\r
- bool writeFileUploadRqst(unsigned short filenameLen, char *pFilename, \r
- unsigned int position);\r
- \r
- bool writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName);\r
- bool writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName);\r
- \r
- bool writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen,\r
- char *pOldName, char *pNewName);\r
- bool writeFileDeleteRqst(unsigned short nameLen, char *pName);\r
- \r
- private:\r
- rdr::OutStream *m_pOutStream;\r
- \r
- bool writeU8U16StringMsg(unsigned short strLength, char *pString);\r
- };\r
-}\r
-\r
-#endif // __RFB_CFTMSGWRITER_H__\r
+/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- CFTMsgWriter.h
+
+#ifndef __RFB_CFTMSGWRITER_H__
+#define __RFB_CFTMSGWRITER_H__
+
+#include <rdr/types.h>
+#include <rdr/OutStream.h>
+#include <rfb/msgTypes.h>
+#include <rfb/fttypes.h>
+
+namespace rfb {
+ class CFTMsgWriter
+ {
+ public:
+ CFTMsgWriter(rdr::OutStream *pOS);
+ ~CFTMsgWriter();
+
+ bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly);
+
+ bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason);
+ bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename,
+ unsigned int position);
+
+ bool writeFileUploadData(unsigned short dataSize, char *pData);
+ bool writeFileUploadData(unsigned int modTime);
+ bool writeFileUploadFailed(unsigned short reasonLen, char *pReason);
+ bool writeFileUploadRqst(unsigned short filenameLen, char *pFilename,
+ unsigned int position);
+
+ bool writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName);
+ bool writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName);
+
+ bool writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen,
+ char *pOldName, char *pNewName);
+ bool writeFileDeleteRqst(unsigned short nameLen, char *pName);
+
+ private:
+ rdr::OutStream *m_pOutStream;
+
+ bool writeU8U16StringMsg(unsigned short strLength, char *pString);
+ };
+}
+
+#endif // __RFB_CFTMSGWRITER_H__
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- * \r
- * Developed by Dennis Syrovatsky\r
- *\r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransfer.cxx\r
-\r
-#include <rfb/msgTypes.h>\r
-#include <rfb/SFileTransfer.h>\r
-\r
-using namespace rfb;\r
-\r
-SFileTransfer::SFileTransfer(network::Socket *sock) : \r
- m_pSocket(sock), m_reader(&sock->inStream()), m_writer(&sock->outStream()),\r
- m_bUploadStarted(false), m_bDownloadStarted(false)\r
-{\r
-}\r
-\r
-SFileTransfer::~SFileTransfer()\r
-{\r
-}\r
-\r
-bool\r
-SFileTransfer::processMessages(int type)\r
-{\r
- switch(type)\r
- {\r
- case msgTypeFileListRequest:\r
- return processFileListRequest();\r
- case msgTypeFileDownloadRequest:\r
- return processFileDownloadRequest();\r
- case msgTypeFileUploadRequest:\r
- return processFileUploadRequest();\r
- case msgTypeFileUploadData:\r
- return processFileUploadData();\r
- case msgTypeFileDownloadCancel:\r
- return processFileDownloadCancel();\r
- case msgTypeFileUploadFailed:\r
- return processFileUploadFailed();\r
- case msgTypeFileCreateDirRequest:\r
- return processFileCreateDirRequest();\r
- case msgTypeFileDirSizeRequest:\r
- return processFileDirSizeRequest();\r
- case msgTypeFileRenameRequest:\r
- return processFileRenameRequest();\r
- case msgTypeFileDeleteRequest:\r
- return processFileDeleteRequest();\r
- default:\r
- return false;\r
- }\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileListRequest()\r
-{\r
- char szDirName[FT_FILENAME_SIZE] = {0};\r
- unsigned int dirNameSize = FT_FILENAME_SIZE;\r
- unsigned int flags = 0;\r
-\r
- if (!m_reader.readFileListRqst(&dirNameSize, szDirName, &flags)) return false;\r
-\r
- if (!convertPathFromNet(szDirName)) return false;\r
-\r
- bool bDirOnly = false;\r
- if (flags & 0x10) bDirOnly = true;\r
-\r
- FileInfo fi;\r
- if (!makeFileList(szDirName, &fi, bDirOnly)) return false;\r
-\r
- return m_writer.writeFileListData((unsigned char)flags, &fi);\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileDownloadRequest()\r
-{\r
- char szName[FT_FILENAME_SIZE] = {0};\r
- unsigned int nameSize = FT_FILENAME_SIZE;\r
- unsigned int position = 0;\r
-\r
- if (!m_reader.readFileDownloadRqst(&nameSize, szName, &position)) return false;\r
-\r
- if (!convertPathFromNet(szName)) return false;\r
-\r
- if (m_bDownloadStarted) {\r
- char reason[] = "The download is already started";\r
- m_writer.writeFileLastRqstFailed(msgTypeFileDownloadRequest, strlen(reason), reason);\r
- return false;\r
- }\r
-\r
- if (!m_fileReader.create(szName)) return false;\r
-\r
- m_bDownloadStarted = true;\r
-\r
- sendFileDownloadPortion();\r
-\r
- return true;\r
-}\r
-\r
-bool\r
-SFileTransfer::sendFileDownloadPortion()\r
-{\r
- char buffer[FT_MAX_SENDING_SIZE];\r
- unsigned int bytesRead = 0;\r
-\r
- if (m_fileReader.read((void *)buffer, FT_MAX_SENDING_SIZE, &bytesRead)) {\r
- if (bytesRead == 0) {\r
- m_writer.writeFileDownloadData(m_fileReader.getTime());\r
- m_fileReader.close();\r
- m_bDownloadStarted = false;\r
- return true;\r
- } else {\r
- m_writer.writeFileDownloadData(bytesRead, buffer);\r
- return initDownloadCallback();\r
- }\r
- } else {\r
- char reason[] = "Error while reading from file";\r
- m_writer.writeFileDownloadFailed(strlen(reason), reason);\r
- m_fileReader.close();\r
- m_bDownloadStarted = false;\r
- return true;\r
- }\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileUploadRequest()\r
-{\r
- char szName[FT_FILENAME_SIZE] = {0};\r
- unsigned int nameSize = FT_FILENAME_SIZE;\r
- unsigned int position = 0;\r
-\r
- if (!m_reader.readFileUploadRqst(&nameSize, szName, &position)) return false;\r
-\r
- if (!convertPathFromNet(szName)) return false;\r
-\r
- if (m_bUploadStarted) {\r
- char reason[] = "The upload is already started";\r
- m_writer.writeFileLastRqstFailed(msgTypeFileUploadRequest, strlen(reason), reason);\r
- return false;\r
- }\r
-\r
- if (!m_fileWriter.create(szName)) {\r
- char reason[] = "Can't create local file";\r
- m_writer.writeFileLastRqstFailed(msgTypeFileUploadRequest, strlen(reason), reason);\r
- return true;\r
- }\r
-\r
- m_bUploadStarted = true;\r
-\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileUploadData()\r
-{\r
- unsigned int dataSize = 0;\r
- unsigned int modTime = 0;\r
-\r
- void *pUploadData = m_reader.readFileUploadData(&dataSize, &modTime);\r
-\r
- if (!m_bUploadStarted) {\r
- char reason[] = "Upload is impossible";\r
- m_writer.writeFileUploadCancel(strlen(reason), reason);\r
- } else {\r
- if (pUploadData == NULL) {\r
- if (modTime == 0) {\r
- char reason[] = "Upload failed";\r
- m_writer.writeFileUploadCancel(strlen(reason), reason);\r
- } else {\r
- m_fileWriter.setTime(modTime);\r
- }\r
- m_fileWriter.close();\r
- m_bUploadStarted = false;\r
- } else {\r
- unsigned int dataWritten = 0;\r
- m_fileWriter.write(pUploadData, dataSize, &dataWritten);\r
- if (dataWritten != dataSize) {\r
- char reason[] = "Upload failed";\r
- m_writer.writeFileUploadCancel(strlen(reason), reason);\r
- m_fileWriter.close();\r
- m_bUploadStarted = false;\r
- }\r
- }\r
- }\r
- delete [] pUploadData;\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileDownloadCancel()\r
-{\r
- char szReason[FT_FILENAME_SIZE] = {0};\r
- unsigned int reasonSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileDownloadCancel(&reasonSize, szReason)) return false;\r
-\r
- m_fileReader.close();\r
- m_bDownloadStarted = false;\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileUploadFailed()\r
-{\r
- char szReason[FT_FILENAME_SIZE] = {0};\r
- unsigned int reasonSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileUploadFailed(&reasonSize, szReason)) return false;\r
-\r
- deleteIt(m_fileWriter.getFilename());\r
- m_fileWriter.close();\r
- m_bUploadStarted = false;\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileCreateDirRequest()\r
-{\r
- char szName[FT_FILENAME_SIZE] = {0};\r
- unsigned int nameSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileCreateDirRqst(&nameSize, szName)) return false;\r
-\r
- if (!convertPathFromNet(szName)) return false;\r
-\r
- return createDir(szName);\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileDirSizeRequest()\r
-{\r
- char szName[FT_FILENAME_SIZE] = {0};\r
- unsigned int nameSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileDirSizeRqst(&nameSize, szName)) return false;\r
-\r
- if (!convertPathFromNet(szName)) return false;\r
-\r
- unsigned short highSize16 = 0;\r
- unsigned int lowSize32 = 0;\r
-\r
- if (!getDirSize(szName, &highSize16, &lowSize32)) return false;\r
-\r
- return m_writer.writeFileDirSizeData(lowSize32, highSize16);\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileRenameRequest()\r
-{\r
- char szOldName[FT_FILENAME_SIZE] = {0};\r
- char szNewName[FT_FILENAME_SIZE] = {0};\r
-\r
- unsigned int oldNameSize = FT_FILENAME_SIZE;\r
- unsigned int newNameSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileRenameRqst(&oldNameSize, &newNameSize, szOldName, szNewName)) return false;\r
-\r
- if ((!convertPathFromNet(szOldName)) || (!convertPathFromNet(szNewName))) return false;\r
-\r
- return renameIt(szOldName, szNewName);\r
-}\r
-\r
-bool \r
-SFileTransfer::processFileDeleteRequest()\r
-{\r
- char szName[FT_FILENAME_SIZE] = {0};\r
- unsigned int nameSize = FT_FILENAME_SIZE;\r
-\r
- if (!m_reader.readFileDeleteRqst(&nameSize, szName)) return false;\r
-\r
- if (!convertPathFromNet(szName)) return false;\r
-\r
- return deleteIt(szName);\r
-}\r
-\r
-bool \r
-SFileTransfer::convertPathFromNet(char *pszPath)\r
-{\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransfer::makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly)\r
-{\r
- return false;\r
-}\r
-\r
-bool \r
-SFileTransfer::deleteIt(char *pszPath)\r
-{\r
- return false;\r
-}\r
-\r
-bool \r
-SFileTransfer::renameIt(char *pszOldPath, char *pszNewPath)\r
-{\r
- return false;\r
-}\r
-\r
-bool \r
-SFileTransfer::createDir(char *pszPath)\r
-{\r
- return false;\r
-}\r
-\r
-bool \r
-SFileTransfer::getDirSize(char *pszName, unsigned short *pHighSize16, \r
- unsigned int *pLowSize32)\r
-{\r
- return false;\r
-}\r
-\r
-bool\r
-SFileTransfer::initDownloadCallback()\r
-{\r
- return false;\r
-}\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransfer.cxx
+
+#include <rfb/msgTypes.h>
+#include <rfb/SFileTransfer.h>
+
+using namespace rfb;
+
+SFileTransfer::SFileTransfer(network::Socket *sock) :
+ m_pSocket(sock), m_reader(&sock->inStream()), m_writer(&sock->outStream()),
+ m_bUploadStarted(false), m_bDownloadStarted(false)
+{
+}
+
+SFileTransfer::~SFileTransfer()
+{
+}
+
+bool
+SFileTransfer::processMessages(int type)
+{
+ switch(type)
+ {
+ case msgTypeFileListRequest:
+ return processFileListRequest();
+ case msgTypeFileDownloadRequest:
+ return processFileDownloadRequest();
+ case msgTypeFileUploadRequest:
+ return processFileUploadRequest();
+ case msgTypeFileUploadData:
+ return processFileUploadData();
+ case msgTypeFileDownloadCancel:
+ return processFileDownloadCancel();
+ case msgTypeFileUploadFailed:
+ return processFileUploadFailed();
+ case msgTypeFileCreateDirRequest:
+ return processFileCreateDirRequest();
+ case msgTypeFileDirSizeRequest:
+ return processFileDirSizeRequest();
+ case msgTypeFileRenameRequest:
+ return processFileRenameRequest();
+ case msgTypeFileDeleteRequest:
+ return processFileDeleteRequest();
+ default:
+ return false;
+ }
+}
+
+bool
+SFileTransfer::processFileListRequest()
+{
+ char szDirName[FT_FILENAME_SIZE] = {0};
+ unsigned int dirNameSize = FT_FILENAME_SIZE;
+ unsigned int flags = 0;
+
+ if (!m_reader.readFileListRqst(&dirNameSize, szDirName, &flags)) return false;
+
+ if (!convertPathFromNet(szDirName)) return false;
+
+ bool bDirOnly = false;
+ if (flags & 0x10) bDirOnly = true;
+
+ FileInfo fi;
+ if (!makeFileList(szDirName, &fi, bDirOnly)) return false;
+
+ return m_writer.writeFileListData((unsigned char)flags, &fi);
+}
+
+bool
+SFileTransfer::processFileDownloadRequest()
+{
+ char szName[FT_FILENAME_SIZE] = {0};
+ unsigned int nameSize = FT_FILENAME_SIZE;
+ unsigned int position = 0;
+
+ if (!m_reader.readFileDownloadRqst(&nameSize, szName, &position)) return false;
+
+ if (!convertPathFromNet(szName)) return false;
+
+ if (m_bDownloadStarted) {
+ char reason[] = "The download is already started";
+ m_writer.writeFileLastRqstFailed(msgTypeFileDownloadRequest, strlen(reason), reason);
+ return false;
+ }
+
+ if (!m_fileReader.create(szName)) return false;
+
+ m_bDownloadStarted = true;
+
+ sendFileDownloadPortion();
+
+ return true;
+}
+
+bool
+SFileTransfer::sendFileDownloadPortion()
+{
+ char buffer[FT_MAX_SENDING_SIZE];
+ unsigned int bytesRead = 0;
+
+ if (m_fileReader.read((void *)buffer, FT_MAX_SENDING_SIZE, &bytesRead)) {
+ if (bytesRead == 0) {
+ m_writer.writeFileDownloadData(m_fileReader.getTime());
+ m_fileReader.close();
+ m_bDownloadStarted = false;
+ return true;
+ } else {
+ m_writer.writeFileDownloadData(bytesRead, buffer);
+ return initDownloadCallback();
+ }
+ } else {
+ char reason[] = "Error while reading from file";
+ m_writer.writeFileDownloadFailed(strlen(reason), reason);
+ m_fileReader.close();
+ m_bDownloadStarted = false;
+ return true;
+ }
+}
+
+bool
+SFileTransfer::processFileUploadRequest()
+{
+ char szName[FT_FILENAME_SIZE] = {0};
+ unsigned int nameSize = FT_FILENAME_SIZE;
+ unsigned int position = 0;
+
+ if (!m_reader.readFileUploadRqst(&nameSize, szName, &position)) return false;
+
+ if (!convertPathFromNet(szName)) return false;
+
+ if (m_bUploadStarted) {
+ char reason[] = "The upload is already started";
+ m_writer.writeFileLastRqstFailed(msgTypeFileUploadRequest, strlen(reason), reason);
+ return false;
+ }
+
+ if (!m_fileWriter.create(szName)) {
+ char reason[] = "Can't create local file";
+ m_writer.writeFileLastRqstFailed(msgTypeFileUploadRequest, strlen(reason), reason);
+ return true;
+ }
+
+ m_bUploadStarted = true;
+
+ return true;
+}
+
+bool
+SFileTransfer::processFileUploadData()
+{
+ unsigned int dataSize = 0;
+ unsigned int modTime = 0;
+
+ void *pUploadData = m_reader.readFileUploadData(&dataSize, &modTime);
+
+ if (!m_bUploadStarted) {
+ char reason[] = "Upload is impossible";
+ m_writer.writeFileUploadCancel(strlen(reason), reason);
+ } else {
+ if (pUploadData == NULL) {
+ if (modTime == 0) {
+ char reason[] = "Upload failed";
+ m_writer.writeFileUploadCancel(strlen(reason), reason);
+ } else {
+ m_fileWriter.setTime(modTime);
+ }
+ m_fileWriter.close();
+ m_bUploadStarted = false;
+ } else {
+ unsigned int dataWritten = 0;
+ m_fileWriter.write(pUploadData, dataSize, &dataWritten);
+ if (dataWritten != dataSize) {
+ char reason[] = "Upload failed";
+ m_writer.writeFileUploadCancel(strlen(reason), reason);
+ m_fileWriter.close();
+ m_bUploadStarted = false;
+ }
+ }
+ }
+ delete [] pUploadData;
+ return true;
+}
+
+bool
+SFileTransfer::processFileDownloadCancel()
+{
+ char szReason[FT_FILENAME_SIZE] = {0};
+ unsigned int reasonSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileDownloadCancel(&reasonSize, szReason)) return false;
+
+ m_fileReader.close();
+ m_bDownloadStarted = false;
+ return true;
+}
+
+bool
+SFileTransfer::processFileUploadFailed()
+{
+ char szReason[FT_FILENAME_SIZE] = {0};
+ unsigned int reasonSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileUploadFailed(&reasonSize, szReason)) return false;
+
+ deleteIt(m_fileWriter.getFilename());
+ m_fileWriter.close();
+ m_bUploadStarted = false;
+ return true;
+}
+
+bool
+SFileTransfer::processFileCreateDirRequest()
+{
+ char szName[FT_FILENAME_SIZE] = {0};
+ unsigned int nameSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileCreateDirRqst(&nameSize, szName)) return false;
+
+ if (!convertPathFromNet(szName)) return false;
+
+ return createDir(szName);
+}
+
+bool
+SFileTransfer::processFileDirSizeRequest()
+{
+ char szName[FT_FILENAME_SIZE] = {0};
+ unsigned int nameSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileDirSizeRqst(&nameSize, szName)) return false;
+
+ if (!convertPathFromNet(szName)) return false;
+
+ unsigned short highSize16 = 0;
+ unsigned int lowSize32 = 0;
+
+ if (!getDirSize(szName, &highSize16, &lowSize32)) return false;
+
+ return m_writer.writeFileDirSizeData(lowSize32, highSize16);
+}
+
+bool
+SFileTransfer::processFileRenameRequest()
+{
+ char szOldName[FT_FILENAME_SIZE] = {0};
+ char szNewName[FT_FILENAME_SIZE] = {0};
+
+ unsigned int oldNameSize = FT_FILENAME_SIZE;
+ unsigned int newNameSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileRenameRqst(&oldNameSize, &newNameSize, szOldName, szNewName)) return false;
+
+ if ((!convertPathFromNet(szOldName)) || (!convertPathFromNet(szNewName))) return false;
+
+ return renameIt(szOldName, szNewName);
+}
+
+bool
+SFileTransfer::processFileDeleteRequest()
+{
+ char szName[FT_FILENAME_SIZE] = {0};
+ unsigned int nameSize = FT_FILENAME_SIZE;
+
+ if (!m_reader.readFileDeleteRqst(&nameSize, szName)) return false;
+
+ if (!convertPathFromNet(szName)) return false;
+
+ return deleteIt(szName);
+}
+
+bool
+SFileTransfer::convertPathFromNet(char *pszPath)
+{
+ return true;
+}
+
+bool
+SFileTransfer::makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly)
+{
+ return false;
+}
+
+bool
+SFileTransfer::deleteIt(char *pszPath)
+{
+ return false;
+}
+
+bool
+SFileTransfer::renameIt(char *pszOldPath, char *pszNewPath)
+{
+ return false;
+}
+
+bool
+SFileTransfer::createDir(char *pszPath)
+{
+ return false;
+}
+
+bool
+SFileTransfer::getDirSize(char *pszName, unsigned short *pHighSize16,
+ unsigned int *pLowSize32)
+{
+ return false;
+}
+
+bool
+SFileTransfer::initDownloadCallback()
+{
+ return false;
+}
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransfer.h\r
-\r
-#ifndef __RFB_SFILETRANSFER_H__\r
-#define __RFB_SFILETRANSFER_H__\r
-\r
-#include <network/Socket.h>\r
-#include <rfb/SFTMsgReader.h>\r
-#include <rfb/SFTMsgWriter.h>\r
-#include <rfb/FileWriter.h>\r
-#include <rfb/FileReader.h>\r
-#include <rfb/FileInfo.h>\r
-#include <rfb/fttypes.h>\r
-\r
-namespace rfb {\r
- class SFileTransfer\r
- {\r
- public:\r
- SFileTransfer(network::Socket *sock);\r
- ~SFileTransfer();\r
-\r
- bool processMessages(int type);\r
- bool sendFileDownloadPortion();\r
-\r
- protected:\r
- bool processFileListRequest();\r
- bool processFileDownloadRequest();\r
- bool processFileUploadRequest();\r
- bool processFileUploadData();\r
- bool processFileDownloadCancel();\r
- bool processFileUploadFailed();\r
- bool processFileCreateDirRequest();\r
- bool processFileDirSizeRequest();\r
- bool processFileRenameRequest();\r
- bool processFileDeleteRequest();\r
-\r
- virtual bool initDownloadCallback();\r
- virtual bool makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly);\r
- virtual bool convertPathFromNet(char *pszPath);\r
-\r
- virtual bool deleteIt(char *pszPath);\r
- virtual bool renameIt(char *pszOldPath, char *pszNewPath);\r
- virtual bool createDir(char *pszPath);\r
-\r
- virtual bool getDirSize(char *pszName, unsigned short *pHighSize16, unsigned int *pLowSize32);\r
-\r
- bool m_bUploadStarted;\r
- bool m_bDownloadStarted;\r
- \r
- private:\r
- SFTMsgReader m_reader;\r
- SFTMsgWriter m_writer;\r
-\r
- FileWriter m_fileWriter;\r
- FileReader m_fileReader;\r
-\r
- network::Socket *m_pSocket;\r
- };\r
-}\r
-\r
-#endif // __RFB_SFILETRANSFER_H__\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransfer.h
+
+#ifndef __RFB_SFILETRANSFER_H__
+#define __RFB_SFILETRANSFER_H__
+
+#include <network/Socket.h>
+#include <rfb/SFTMsgReader.h>
+#include <rfb/SFTMsgWriter.h>
+#include <rfb/FileWriter.h>
+#include <rfb/FileReader.h>
+#include <rfb/FileInfo.h>
+#include <rfb/fttypes.h>
+
+namespace rfb {
+ class SFileTransfer
+ {
+ public:
+ SFileTransfer(network::Socket *sock);
+ ~SFileTransfer();
+
+ bool processMessages(int type);
+ bool sendFileDownloadPortion();
+
+ protected:
+ bool processFileListRequest();
+ bool processFileDownloadRequest();
+ bool processFileUploadRequest();
+ bool processFileUploadData();
+ bool processFileDownloadCancel();
+ bool processFileUploadFailed();
+ bool processFileCreateDirRequest();
+ bool processFileDirSizeRequest();
+ bool processFileRenameRequest();
+ bool processFileDeleteRequest();
+
+ virtual bool initDownloadCallback();
+ virtual bool makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly);
+ virtual bool convertPathFromNet(char *pszPath);
+
+ virtual bool deleteIt(char *pszPath);
+ virtual bool renameIt(char *pszOldPath, char *pszNewPath);
+ virtual bool createDir(char *pszPath);
+
+ virtual bool getDirSize(char *pszName, unsigned short *pHighSize16, unsigned int *pLowSize32);
+
+ bool m_bUploadStarted;
+ bool m_bDownloadStarted;
+
+ private:
+ SFTMsgReader m_reader;
+ SFTMsgWriter m_writer;
+
+ FileWriter m_fileWriter;
+ FileReader m_fileReader;
+
+ network::Socket *m_pSocket;
+ };
+}
+
+#endif // __RFB_SFILETRANSFER_H__
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferManager.cxx\r
-\r
-#include <rfb/SFileTransferManager.h>\r
-\r
-using namespace rfb;\r
-\r
-SFileTransferManager::SFileTransferManager()\r
-{\r
-\r
-}\r
-\r
-SFileTransferManager::~SFileTransferManager()\r
-{\r
- destroy();\r
-}\r
-\r
-void\r
-SFileTransferManager::destroyObject(SFileTransfer *pFT)\r
-{\r
- if (pFT == NULL) return;\r
-\r
- m_lstFTObjects.remove(pFT);\r
-\r
- delete pFT;\r
-}\r
-\r
-void\r
-SFileTransferManager::destroy()\r
-{\r
- while(!m_lstFTObjects.empty())\r
- delete m_lstFTObjects.front();\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferManager.cxx
+
+#include <rfb/SFileTransferManager.h>
+
+using namespace rfb;
+
+SFileTransferManager::SFileTransferManager()
+{
+
+}
+
+SFileTransferManager::~SFileTransferManager()
+{
+ destroy();
+}
+
+void
+SFileTransferManager::destroyObject(SFileTransfer *pFT)
+{
+ if (pFT == NULL) return;
+
+ m_lstFTObjects.remove(pFT);
+
+ delete pFT;
+}
+
+void
+SFileTransferManager::destroy()
+{
+ while(!m_lstFTObjects.empty())
+ delete m_lstFTObjects.front();
}
\ No newline at end of file
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferManager.h\r
-\r
-#ifndef __RFB_SFILETRANSFERMANAGER_H__\r
-#define __RFB_SFILETRANSFERMANAGER_H__\r
-\r
-#include <list>\r
-\r
-#include <rfb/SFileTransfer.h>\r
-#include <network/Socket.h>\r
-\r
-namespace rfb {\r
- class SFileTransferManager\r
- {\r
- public:\r
- SFileTransferManager();\r
- ~SFileTransferManager();\r
-\r
- virtual SFileTransfer *createObject(network::Socket *sock) = 0;\r
- void destroyObject(SFileTransfer *pFT);\r
-\r
- protected:\r
- std::list<SFileTransfer*> m_lstFTObjects;\r
-\r
- void destroy();\r
- };\r
-}\r
-\r
-#endif // __RFB_SFILETRANSFERMANAGER_H__\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferManager.h
+
+#ifndef __RFB_SFILETRANSFERMANAGER_H__
+#define __RFB_SFILETRANSFERMANAGER_H__
+
+#include <list>
+
+#include <rfb/SFileTransfer.h>
+#include <network/Socket.h>
+
+namespace rfb {
+ class SFileTransferManager
+ {
+ public:
+ SFileTransferManager();
+ ~SFileTransferManager();
+
+ virtual SFileTransfer *createObject(network::Socket *sock) = 0;
+ void destroyObject(SFileTransfer *pFT);
+
+ protected:
+ std::list<SFileTransfer*> m_lstFTObjects;
+
+ void destroy();
+ };
+}
+
+#endif // __RFB_SFILETRANSFERMANAGER_H__
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferManagerWin32.cxx\r
-\r
-#include <rfb_win32/SFileTransferManagerWin32.h>\r
-\r
-using namespace rfb;\r
-using namespace win32;\r
-\r
-SFileTransferManagerWin32::SFileTransferManagerWin32()\r
-{\r
-\r
-}\r
-\r
-SFileTransferManagerWin32::~SFileTransferManagerWin32()\r
-{\r
-\r
-}\r
-\r
-SFileTransfer *\r
-SFileTransferManagerWin32::createObject(network::Socket *sock)\r
-{\r
- rfb::SFileTransfer *pFT = 0;\r
- rfb::win32::SFileTransferWin32 *pFTWin32 = 0;\r
-\r
- pFTWin32 = new SFileTransferWin32(sock);\r
- if (pFTWin32 == NULL) return NULL;\r
-\r
- pFT = (SFileTransfer *) pFTWin32;\r
-\r
- m_lstFTObjects.push_front(pFT);\r
-\r
- return pFT;\r
-}\r
-\r
-void \r
-SFileTransferManagerWin32::processDownloadMsg(MSG msg)\r
-{\r
- SFileTransfer *pFT = (SFileTransfer *)msg.lParam;\r
-\r
- if (pFT != NULL) {\r
- std::list<SFileTransfer*>::iterator i;\r
- for (i=m_lstFTObjects.begin(); i!=m_lstFTObjects.end(); i++) {\r
- if ((*i) == pFT) {\r
- (*i)->sendFileDownloadPortion();\r
- return;\r
- }\r
- }\r
- }\r
-}\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferManagerWin32.cxx
+
+#include <rfb_win32/SFileTransferManagerWin32.h>
+
+using namespace rfb;
+using namespace win32;
+
+SFileTransferManagerWin32::SFileTransferManagerWin32()
+{
+
+}
+
+SFileTransferManagerWin32::~SFileTransferManagerWin32()
+{
+
+}
+
+SFileTransfer *
+SFileTransferManagerWin32::createObject(network::Socket *sock)
+{
+ rfb::SFileTransfer *pFT = 0;
+ rfb::win32::SFileTransferWin32 *pFTWin32 = 0;
+
+ pFTWin32 = new SFileTransferWin32(sock);
+ if (pFTWin32 == NULL) return NULL;
+
+ pFT = (SFileTransfer *) pFTWin32;
+
+ m_lstFTObjects.push_front(pFT);
+
+ return pFT;
+}
+
+void
+SFileTransferManagerWin32::processDownloadMsg(MSG msg)
+{
+ SFileTransfer *pFT = (SFileTransfer *)msg.lParam;
+
+ if (pFT != NULL) {
+ std::list<SFileTransfer*>::iterator i;
+ for (i=m_lstFTObjects.begin(); i!=m_lstFTObjects.end(); i++) {
+ if ((*i) == pFT) {
+ (*i)->sendFileDownloadPortion();
+ return;
+ }
+ }
+ }
+}
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferManagerWin32.h\r
-\r
-#ifndef __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__\r
-#define __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__\r
-\r
-#include <rfb/SFileTransfer.h>\r
-#include <rfb/SFileTransferManager.h>\r
-#include <rfb_win32/SFileTransferWin32.h>\r
-\r
-namespace rfb {\r
- namespace win32 {\r
- class SFileTransferManagerWin32 : public rfb::SFileTransferManager\r
- {\r
- public:\r
- SFileTransferManagerWin32();\r
- ~SFileTransferManagerWin32(); \r
- \r
- void processDownloadMsg(MSG msg);\r
-\r
- virtual SFileTransfer *createObject(network::Socket *sock);\r
- };\r
- };\r
-}\r
-\r
-#endif // __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferManagerWin32.h
+
+#ifndef __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__
+#define __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__
+
+#include <rfb/SFileTransfer.h>
+#include <rfb/SFileTransferManager.h>
+#include <rfb_win32/SFileTransferWin32.h>
+
+namespace rfb {
+ namespace win32 {
+ class SFileTransferManagerWin32 : public rfb::SFileTransferManager
+ {
+ public:
+ SFileTransferManagerWin32();
+ ~SFileTransferManagerWin32();
+
+ void processDownloadMsg(MSG msg);
+
+ virtual SFileTransfer *createObject(network::Socket *sock);
+ };
+ };
+}
+
+#endif // __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferWin32.cxx\r
-\r
-#include <rfb/msgTypes.h>\r
-#include <rfb_win32/FolderManager.h>\r
-#include <rfb_win32/SFileTransferWin32.h>\r
-\r
-using namespace rfb;\r
-using namespace rfb::win32;\r
-\r
-SFileTransferWin32::SFileTransferWin32(network::Socket *sock) : SFileTransfer(sock)\r
-{\r
-}\r
-\r
-SFileTransferWin32::~SFileTransferWin32()\r
-{\r
-}\r
-\r
-bool \r
-SFileTransferWin32::initDownloadCallback()\r
-{\r
- PostThreadMessage(GetCurrentThreadId(), VNCM_FT_DOWNLOAD, (WPARAM) 0, (LPARAM) this);\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransferWin32::processDownloadCallback()\r
-{\r
- return sendFileDownloadPortion();\r
-}\r
-\r
-bool \r
-SFileTransferWin32::convertPathFromNet(char *pszPath)\r
-{\r
- int len = strlen(pszPath);\r
- if (pszPath[0] == '/') {\r
- if (len == 1) { \r
- pszPath[0] = '\0'; \r
- return true; \r
- }\r
- } else {\r
- return false;\r
- }\r
-\r
- for(int i = 0; i < (len - 1); i++) {\r
- if(pszPath[i+1] == '/') pszPath[i+1] = '\\';\r
- pszPath[i] = pszPath[i+1];\r
- }\r
-\r
- pszPath[len-1] = '\0';\r
- return true;\r
-}\r
-\r
-bool \r
-SFileTransferWin32::makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly)\r
-{\r
- FolderManager fm;\r
- if (fm.getDirInfo(pszPath, pFI, bDirOnly)) \r
- return true; \r
- else \r
- return false;\r
-}\r
-\r
-bool \r
-SFileTransferWin32::deleteIt(char *pszPath)\r
-{\r
- FolderManager fm;\r
-\r
- return fm.deleteIt(pszPath);\r
-}\r
-\r
-bool \r
-SFileTransferWin32::renameIt(char *pszOldPath, char *pszNewPath)\r
-{\r
- FolderManager fm;\r
-\r
- return fm.renameIt(pszOldPath, pszNewPath);\r
-}\r
-\r
-bool \r
-SFileTransferWin32::createDir(char *pszPath)\r
-{\r
- FolderManager fm;\r
-\r
- return fm.createDir(pszPath);\r
-}\r
-\r
-bool \r
-SFileTransferWin32::getDirSize(char *pszName, unsigned short *pHighSize16, \r
- unsigned int *pLowSize32)\r
-{\r
- FolderManager fm;\r
- DWORD64 dw64DirSize = 0;\r
-\r
- if (!fm.getDirSize(pszName, &dw64DirSize)) return false;\r
-\r
- if (dw64DirSize & 0xFFFF000000000000) return false;\r
-\r
- *pHighSize16 = ((dw64DirSize & 0x0000FFFF00000000) >> 32);\r
- *pLowSize32 = (dw64DirSize & 0x00000000FFFFFFFF);\r
-\r
- return true;\r
-}\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferWin32.cxx
+
+#include <rfb/msgTypes.h>
+#include <rfb_win32/FolderManager.h>
+#include <rfb_win32/SFileTransferWin32.h>
+
+using namespace rfb;
+using namespace rfb::win32;
+
+SFileTransferWin32::SFileTransferWin32(network::Socket *sock) : SFileTransfer(sock)
+{
+}
+
+SFileTransferWin32::~SFileTransferWin32()
+{
+}
+
+bool
+SFileTransferWin32::initDownloadCallback()
+{
+ PostThreadMessage(GetCurrentThreadId(), VNCM_FT_DOWNLOAD, (WPARAM) 0, (LPARAM) this);
+ return true;
+}
+
+bool
+SFileTransferWin32::processDownloadCallback()
+{
+ return sendFileDownloadPortion();
+}
+
+bool
+SFileTransferWin32::convertPathFromNet(char *pszPath)
+{
+ int len = strlen(pszPath);
+ if (pszPath[0] == '/') {
+ if (len == 1) {
+ pszPath[0] = '\0';
+ return true;
+ }
+ } else {
+ return false;
+ }
+
+ for(int i = 0; i < (len - 1); i++) {
+ if(pszPath[i+1] == '/') pszPath[i+1] = '\\';
+ pszPath[i] = pszPath[i+1];
+ }
+
+ pszPath[len-1] = '\0';
+ return true;
+}
+
+bool
+SFileTransferWin32::makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly)
+{
+ FolderManager fm;
+ if (fm.getDirInfo(pszPath, pFI, bDirOnly))
+ return true;
+ else
+ return false;
+}
+
+bool
+SFileTransferWin32::deleteIt(char *pszPath)
+{
+ FolderManager fm;
+
+ return fm.deleteIt(pszPath);
+}
+
+bool
+SFileTransferWin32::renameIt(char *pszOldPath, char *pszNewPath)
+{
+ FolderManager fm;
+
+ return fm.renameIt(pszOldPath, pszNewPath);
+}
+
+bool
+SFileTransferWin32::createDir(char *pszPath)
+{
+ FolderManager fm;
+
+ return fm.createDir(pszPath);
+}
+
+bool
+SFileTransferWin32::getDirSize(char *pszName, unsigned short *pHighSize16,
+ unsigned int *pLowSize32)
+{
+ FolderManager fm;
+ DWORD64 dw64DirSize = 0;
+
+ if (!fm.getDirSize(pszName, &dw64DirSize)) return false;
+
+ if (dw64DirSize & 0xFFFF000000000000) return false;
+
+ *pHighSize16 = ((dw64DirSize & 0x0000FFFF00000000) >> 32);
+ *pLowSize32 = (dw64DirSize & 0x00000000FFFFFFFF);
+
+ return true;
+}
-/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.\r
- *\r
- * Developed by Dennis Syrovatsky.\r
- * \r
- * This is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- * \r
- * This software is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this software; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\r
- * USA.\r
- *\r
- * TightVNC distribution homepage on the Web: http://www.tightvnc.com/\r
- *\r
- */\r
-\r
-// -=- SFileTransferWin32.h\r
-\r
-#ifndef __RFB_SFILETRANSFERWIN32_H__\r
-#define __RFB_SFILETRANSFERWIN32_H__\r
-\r
-#include <windows.h>\r
-\r
-#include <rfb/SFileTransfer.h>\r
-\r
-const UINT VNCM_FT_DOWNLOAD = WM_USER + 2;\r
-\r
-namespace rfb {\r
- namespace win32 {\r
- class SFileTransferWin32 : public rfb::SFileTransfer\r
- {\r
- public:\r
- SFileTransferWin32(network::Socket *sock);\r
- ~SFileTransferWin32();\r
-\r
- bool processDownloadCallback();\r
- virtual bool initDownloadCallback();\r
-\r
- virtual bool convertPathFromNet(char *pszPath);\r
- virtual bool makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly);\r
- \r
- virtual bool deleteIt(char *pszPath);\r
- virtual bool renameIt(char *pszOldPath, char *pszNewPath);\r
- virtual bool createDir(char *pszPath);\r
-\r
- virtual bool getDirSize(char *pszName, unsigned short *pHighSize16, unsigned int *pLowSize32);\r
-\r
- };\r
- };\r
-}\r
-\r
-#endif // __RFB_SFILETRANSFERWIN32_H__\r
+/* Copyright (C) 2006 TightVNC Team. All Rights Reserved.
+ *
+ * Developed by Dennis Syrovatsky.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ *
+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
+ *
+ */
+
+// -=- SFileTransferWin32.h
+
+#ifndef __RFB_SFILETRANSFERWIN32_H__
+#define __RFB_SFILETRANSFERWIN32_H__
+
+#include <windows.h>
+
+#include <rfb/SFileTransfer.h>
+
+const UINT VNCM_FT_DOWNLOAD = WM_USER + 2;
+
+namespace rfb {
+ namespace win32 {
+ class SFileTransferWin32 : public rfb::SFileTransfer
+ {
+ public:
+ SFileTransferWin32(network::Socket *sock);
+ ~SFileTransferWin32();
+
+ bool processDownloadCallback();
+ virtual bool initDownloadCallback();
+
+ virtual bool convertPathFromNet(char *pszPath);
+ virtual bool makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly);
+
+ virtual bool deleteIt(char *pszPath);
+ virtual bool renameIt(char *pszOldPath, char *pszNewPath);
+ virtual bool createDir(char *pszPath);
+
+ virtual bool getDirSize(char *pszName, unsigned short *pHighSize16, unsigned int *pLowSize32);
+
+ };
+ };
+}
+
+#endif // __RFB_SFILETRANSFERWIN32_H__