blob: 1bfded2c6b02cb456db08f6d0cc5dc90c514fce7 [file] [log] [blame]
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +00002 *
3 * Developed by Dennis Syrovatsky
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00004 *
5 * This is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This software is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this software; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18 * USA.
19 *
20 * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
21 *
22 */
23
24// -=- FileTransfer.h
25
26#ifndef __RFB_WIN32_FILETRANSFER_H__
27#define __RFB_WIN32_FILETRANSFER_H__
28
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000029#include <rdr/InStream.h>
30#include <rdr/OutStream.h>
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000031#include <rfb/msgTypes.h>
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000032#include <rfb/FileInfo.h>
Dennis Syrovatsky63883e32005-11-28 08:20:19 +000033#include <rfb/FileReader.h>
34#include <rfb/FileWriter.h>
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000035#include <rfb/TransferQueue.h>
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +000036#include <rfb/CFTMsgReader.h>
37#include <rfb/CFTMsgWriter.h>
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000038#include <vncviewer/FTDialog.h>
39
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000040namespace rfb {
41 namespace win32 {
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000042 class FTDialog;
43
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000044 class FileTransfer
45 {
46 public:
47 FileTransfer();
48 ~FileTransfer();
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000049
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000050 bool initialize(rdr::InStream *pIS, rdr::OutStream *pOS);
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000051 bool processFTMsg(int type);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000052 bool show(HWND hwndParent);
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000053
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000054 void requestFileList(char *pPath, int dest, bool bDirOnly);
55
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000056 void addTransferQueue(char *pLocalPath, char *pRemotePath,
57 FileInfo *pFI, unsigned int flags);
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000058 void addDeleteQueue(char *pPathPrefix, FileInfo *pFI,
59 unsigned int flags);
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +000060
61 bool isTransferEnable();
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000062
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000063 void checkTransferQueue();
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000064 void checkDeleteQueue();
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000065 bool checkCancelOperations();
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000066
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000067 void uploadFilePortion();
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +000068
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000069 void createRemoteFolder(char *pPath, char *pName);
Dennis Syrovatsky95509432005-12-14 16:42:33 +000070 void renameRemote(char *pPath, char *pOldName, char *pNewName);
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000071
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000072 bool m_bCancel;
73
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000074 private:
75 bool m_bFTDlgShown;
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000076 bool m_bInitialized;
Dennis Syrovatsky4ad60072005-12-14 08:48:16 +000077 bool m_bResized;
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +000078 bool m_bTransferSuccess;
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +000079 bool m_bOverwriteAll;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000080
81 FTDialog *m_pFTDialog;
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000082
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +000083 rfb::CFTMsgReader *m_pReader;
84 rfb::CFTMsgWriter *m_pWriter;
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000085
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000086 FileReader m_fileReader;
87 FileWriter m_fileWriter;
88
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000089 FileInfo m_queueFileListRqst;
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +000090
91 TransferQueue m_TransferQueue;
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000092 TransferQueue m_DeleteQueue;
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +000093
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000094 bool resizeSending();
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +000095 bool uploadFile();
96 bool downloadFile();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000097
Dennis Syrovatsky29440e82005-12-05 09:31:28 +000098 int isExistName(FileInfo *pFI, char *pName);
99 void freeQueues();
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000100
101 void endUndoneOperation();
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000102
103 bool procFileListDataMsg();
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000104 bool procFileDownloadDataMsg();
105 bool procFileUploadCancelMsg();
106 bool procFileDownloadFailedMsg();
107 bool procFileDirSizeDataMsg();
108 bool procFileLastRqstFailedMsg();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000109
110 bool procFLRMain(FileInfo *pFI);
111 bool procFLRBrowse(FileInfo *pFI);
112 bool procFLRUpload(FileInfo *pFI);
113 bool procFLRDownload(FileInfo *pFI);
114 bool procFLRDelete(FileInfo *pFI);
115 bool procFLRRename(FileInfo *pFI);
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000116
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +0000117 int convertToUnixPath(char *path);
118
119 bool writeFileListRqst(unsigned short dirnameLen, char *pDirName, bool bDirOnly);
120 bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename,
121 unsigned int position);
122 bool writeFileUploadRqst(unsigned short filenameLen, char *pFilename,
123 unsigned int position);
124 bool writeFileCreateDirRqst(unsigned short dirNameLen, char *pDirName);
125 bool writeFileDirSizeRqst(unsigned short dirNameLen, char *pDirName);
126 bool writeFileRenameRqst(unsigned short oldNameLen, unsigned short newNameLen,
127 char *pOldName, char *pNewName);
128 bool writeFileDeleteRqst(unsigned short nameLen, char *pName);
129
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000130 DWORD64 m_dw64SizeSending;
131 unsigned int m_dirSizeRqstNum;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000132 };
133 }
134}
135
136#endif // __RFB_WIN32_FILETRANSFER_H__