blob: 2cc84ef5e959ae0382b4a69a90d36c1708db7f93 [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 Syrovatskyb595e032005-11-09 06:24:25 +000061FileTransfer::show()
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000062{
Dennis Syrovatskyda17d212005-11-09 05:58:30 +000063 if (!m_bInitialized) return false;
64
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000065 m_bFTDlgShown = m_pFTDialog->createFTDialog();
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{
72 if (m_bInitialized) return false;
73
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;
130
Dennis Syrovatsky63943a32005-11-10 06:24:56 +0000131 return false;
Dennis Syrovatskyc08f0422005-11-10 06:36:46 +0000132}
133
134bool
135FileTransfer::procFileDownloadDataMsg()
136{
137 return false;
138}
139
140bool
141FileTransfer::procFileUploadCancelMsg()
142{
143 return false;
144}
145
146bool
147FileTransfer::procFileDownloadFailedMsg()
148{
149 return false;
150}
151
152bool
153FileTransfer::procFileDirSizeDataMsg()
154{
155 return false;
156}
157
158bool
159FileTransfer::procFileLastRqstFailedMsg()
160{
161 return false;
162}
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000163
164bool
165FileTransfer::procFLRMain(FileInfo *pFI)
166{
167 if (m_bFTDlgShown) m_pFTDialog->addRemoteLVItems(pFI);
168 return true;
169}
170
171bool
172FileTransfer::procFLRBrowse(FileInfo *pFI)
173{
174 return false;
175}
176
177bool
178FileTransfer::procFLRUpload(FileInfo *pFI)
179{
180 return false;
181}
182
183bool
184FileTransfer::procFLRDownload(FileInfo *pFI)
185{
186 return false;
187}
188
189bool
190FileTransfer::procFLRDelete(FileInfo *pFI)
191{
192 return false;
193}
194
195bool
196FileTransfer::procFLRRename(FileInfo *pFI)
197{
198 return false;
199}
200
201void
202FileTransfer::requestFileList(char *pPath, int dest, bool bDirOnly)
203{
204 m_queueFileListRqst.add(pPath, 0, 0, dest);
205
206 m_pWriter->writeFileListRqst(pPath, bDirOnly);
207}