blob: 2eacee30a34d54817986f3c763ddc2db03db3438 [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
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +000056 m_TransferQueue.free();
57
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000058 m_bInitialized = true;
59 return true;
60}
61
62bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000063FileTransfer::show(HWND hwndParent)
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000064{
Dennis Syrovatskyda17d212005-11-09 05:58:30 +000065 if (!m_bInitialized) return false;
66
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000067 m_bFTDlgShown = m_pFTDialog->createFTDialog(hwndParent);
Dennis Syrovatsky5c761172005-11-09 04:19:05 +000068 return m_bFTDlgShown;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000069}
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000070
71bool
72FileTransfer::processFTMsg(int type)
73{
Dennis Syrovatsky514555b2005-11-21 14:40:56 +000074 if (!m_bInitialized) return false;
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000075
76 switch (type)
77 {
78 case msgTypeFileListData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000079 return procFileListDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000080 case msgTypeFileDownloadData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000081 return procFileDownloadDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000082 case msgTypeFileUploadCancel:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000083 return procFileUploadCancelMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000084 case msgTypeFileDownloadFailed:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000085 return procFileDownloadFailedMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000086 case msgTypeFileDirSizeData:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000087 return procFileDirSizeDataMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000088 case msgTypeFileLastRequestFailed:
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000089 return procFileLastRqstFailedMsg();
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000090 default:
91 return false;
92 }
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000093}
Dennis Syrovatsky63943a32005-11-10 06:24:56 +000094
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +000095bool
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +000096FileTransfer::isTransferEnable()
97{
98 if (m_TransferQueue.getNumEntries() > 0) return true; else return false;
99}
100
101void
102FileTransfer::upload(TransferQueue *pTransQueue)
103{
104 if ((m_bFTDlgShown) && (!isTransferEnable())) m_pFTDialog->setStatusText("Starting Copy Operation");
105
106 pTransQueue->setFlagToAll(FT_ATTR_RESIZE_NEEDED);
107
108 m_TransferQueue.add(pTransQueue);
109
110 resizeSending();
111
112}
113
114void
115FileTransfer::download(TransferQueue *pTransQueue)
116{
117
118}
119
120void
121FileTransfer::resizeSending()
122{
123
124}
125
126bool
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000127FileTransfer::procFileListDataMsg()
128{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000129 FileInfo fileInfo;
130 int res = m_pReader->readFileListData(&fileInfo);
131
132 bool bResult;
133 switch (m_queueFileListRqst.getFlagsAt(0))
134 {
135 case FT_FLR_DEST_MAIN:
136 if (!m_bFTDlgShown) break;
137
138 if (res < 0) {
139 m_pFTDialog->reqFolderUnavailable();
140 bResult = true;
141 } else {
142 bResult = procFLRMain(&fileInfo);
143 }
144 break;
145 case FT_FLR_DEST_BROWSE:
146 bResult = procFLRBrowse(&fileInfo);
147 break;
148 case FT_FLR_DEST_UPLOAD:
149 bResult = procFLRUpload(&fileInfo);
150 break;
151 case FT_FLR_DEST_DOWNLOAD:
152 bResult = procFLRDownload(&fileInfo);
153 break;
154 case FT_FLR_DEST_DELETE:
155 bResult = procFLRDelete(&fileInfo);
156 break;
157 case FT_FLR_DEST_RENAME:
158 bResult = procFLRRename(&fileInfo);
159 break;
160 }
161 m_queueFileListRqst.deleteAt(0);
162 return bResult;
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000163}
164
165bool
166FileTransfer::procFileDownloadDataMsg()
167{
168 return false;
169}
170
171bool
172FileTransfer::procFileUploadCancelMsg()
173{
174 return false;
175}
176
177bool
178FileTransfer::procFileDownloadFailedMsg()
179{
180 return false;
181}
182
183bool
184FileTransfer::procFileDirSizeDataMsg()
185{
186 return false;
187}
188
189bool
190FileTransfer::procFileLastRqstFailedMsg()
191{
192 return false;
193}
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000194
195bool
196FileTransfer::procFLRMain(FileInfo *pFI)
197{
198 if (m_bFTDlgShown) m_pFTDialog->addRemoteLVItems(pFI);
199 return true;
200}
201
202bool
203FileTransfer::procFLRBrowse(FileInfo *pFI)
204{
205 return false;
206}
207
208bool
209FileTransfer::procFLRUpload(FileInfo *pFI)
210{
211 return false;
212}
213
214bool
215FileTransfer::procFLRDownload(FileInfo *pFI)
216{
217 return false;
218}
219
220bool
221FileTransfer::procFLRDelete(FileInfo *pFI)
222{
223 return false;
224}
225
226bool
227FileTransfer::procFLRRename(FileInfo *pFI)
228{
229 return false;
230}
231
232void
233FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
234{
235 m_queueFileListRqst.add(pPath, 0, 0, dest);
236
Dennis Syrovatskyf7b24492005-11-23 04:14:10 +0000237 m_pWriter->writeFileListRqst(strlen(pPath), pPath, bDirOnly);
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000238}