blob: 8997ebc50f8a41b52558b733d82bf9f8b0f5ce59 [file] [log] [blame]
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
2 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 *
18 * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
19 *
20 */
21
22// -=- FileTransfer.cxx
23
24#include <vncviewer/FileTransfer.h>
25
26using namespace rfb;
27using namespace rfb::win32;
28
29FileTransfer::FileTransfer()
30{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000031 m_bFTDlgShown = false;
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000032 m_bInitialized = false;
33
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000034 m_pFTDialog = new FTDialog(GetModuleHandle(0), this);
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000035
36 m_pReader = NULL;
37 m_pWriter = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000038}
39
40FileTransfer::~FileTransfer()
41{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000042 if (m_pFTDialog != NULL) {
43 delete m_pFTDialog;
44 m_pFTDialog = NULL;
45 }
46}
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000047
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000048bool
49FileTransfer::initialize(rdr::InStream *pIS, rdr::OutStream *pOS)
50{
51 if (m_bInitialized) return false;
52
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000053 m_pReader = new FTMsgReader(pIS);
54 m_pWriter = new FTMsgWriter(pOS);
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000055
56 m_bInitialized = true;
57 return true;
58}
59
60bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000061FileTransfer::show(HWND hwndParent)
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000062{
Dennis Syrovatskyda17d212005-11-09 05:58:30 +000063 if (!m_bInitialized) return false;
64
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000065 m_bFTDlgShown = m_pFTDialog->createFTDialog(hwndParent);
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000066 return m_bFTDlgShown;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000067}
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000068
69bool
70FileTransfer::processFTMsg(int type)
71{
Dennis Syrovatsky514555b2005-11-21 14:40:56 +000072 if (!m_bInitialized) return false;
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000073
74 switch (type)
75 {
76 case msgTypeFileListData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000077 return procFileListDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000078 case msgTypeFileDownloadData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000079 return procFileDownloadDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000080 case msgTypeFileUploadCancel:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000081 return procFileUploadCancelMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000082 case msgTypeFileDownloadFailed:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000083 return procFileDownloadFailedMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000084 case msgTypeFileDirSizeData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000085 return procFileDirSizeDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000086 case msgTypeFileLastRequestFailed:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000087 return procFileLastRqstFailedMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000088 default:
89 return false;
90 }
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000091}
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000092
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000093bool
94FileTransfer::procFileListDataMsg()
95{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +000096 FileInfo fileInfo;
97 int res = m_pReader->readFileListData(&fileInfo);
98
99 bool bResult;
100 switch (m_queueFileListRqst.getFlagsAt(0))
101 {
102 case FT_FLR_DEST_MAIN:
103 if (!m_bFTDlgShown) break;
104
105 if (res < 0) {
106 m_pFTDialog->reqFolderUnavailable();
107 bResult = true;
108 } else {
109 bResult = procFLRMain(&fileInfo);
110 }
111 break;
112 case FT_FLR_DEST_BROWSE:
113 bResult = procFLRBrowse(&fileInfo);
114 break;
115 case FT_FLR_DEST_UPLOAD:
116 bResult = procFLRUpload(&fileInfo);
117 break;
118 case FT_FLR_DEST_DOWNLOAD:
119 bResult = procFLRDownload(&fileInfo);
120 break;
121 case FT_FLR_DEST_DELETE:
122 bResult = procFLRDelete(&fileInfo);
123 break;
124 case FT_FLR_DEST_RENAME:
125 bResult = procFLRRename(&fileInfo);
126 break;
127 }
128 m_queueFileListRqst.deleteAt(0);
129 return bResult;
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000130}
131
132bool
133FileTransfer::procFileDownloadDataMsg()
134{
135 return false;
136}
137
138bool
139FileTransfer::procFileUploadCancelMsg()
140{
141 return false;
142}
143
144bool
145FileTransfer::procFileDownloadFailedMsg()
146{
147 return false;
148}
149
150bool
151FileTransfer::procFileDirSizeDataMsg()
152{
153 return false;
154}
155
156bool
157FileTransfer::procFileLastRqstFailedMsg()
158{
159 return false;
160}
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000161
162bool
163FileTransfer::procFLRMain(FileInfo *pFI)
164{
165 if (m_bFTDlgShown) m_pFTDialog->addRemoteLVItems(pFI);
166 return true;
167}
168
169bool
170FileTransfer::procFLRBrowse(FileInfo *pFI)
171{
172 return false;
173}
174
175bool
176FileTransfer::procFLRUpload(FileInfo *pFI)
177{
178 return false;
179}
180
181bool
182FileTransfer::procFLRDownload(FileInfo *pFI)
183{
184 return false;
185}
186
187bool
188FileTransfer::procFLRDelete(FileInfo *pFI)
189{
190 return false;
191}
192
193bool
194FileTransfer::procFLRRename(FileInfo *pFI)
195{
196 return false;
197}
198
199void
200FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
201{
202 m_queueFileListRqst.add(pPath, 0, 0, dest);
203
204 m_pWriter->writeFileListRqst(pPath, bDirOnly);
205}