blob: 58b92734940f4e0a7ef3dc2c96380cd8c24fbe7e [file] [log] [blame]
Dennis Syrovatskybbbc0362005-10-18 05:14:08 +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// -=- TransferQueue.
23
24#include <rfb/TransferQueue.h>
25
26using namespace rfb;
27
28TransferQueue::TransferQueue()
29{
30 m_numEntries = 0;
31 m_pEntries = NULL;
32}
33
34TransferQueue::~TransferQueue()
35{
36 free();
37}
38
39void
40TransferQueue::add(TransferQueue *pTQ)
41{
42 for (unsigned int i = 0; i < pTQ->getNumEntries(); i++) {
43 add(pTQ->getLocPathAt(i), pTQ->getRemPathAt(i), pTQ->getLocNameAt(i),
44 pTQ->getRemNameAt(i), pTQ->getSizeAt(i), pTQ->getDataAt(i), pTQ->getFlagsAt(i));
45 }
46}
47
48void
49TransferQueue::add(char *pLocPath, char *pRemPath, FileInfo *pFI, unsigned int flags)
50{
51 char locPath[FT_FILENAME_SIZE];
52 char remPath[FT_FILENAME_SIZE];
53 strcpy(locPath, pLocPath);
54 strcpy(remPath, pRemPath);
55
56 for (unsigned int i = 0; i < pFI->getNumEntries(); i++) {
57 add(locPath, remPath, pFI->getNameAt(i), pFI->getNameAt(i),
58 pFI->getSizeAt(i), pFI->getDataAt(i), (pFI->getFlagsAt(i) | flags));
59 }
60}
61
62void
63TransferQueue::add(char *pLocPath, char *pRemPath, char *pLocName, char *pRemName,
64 unsigned int size, unsigned int data, unsigned int flags)
65{
66 FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries + 1];
67 if (m_numEntries != 0)
68 memcpy(pTemporary, m_pEntries, m_numEntries * sizeof(FILEINFOEX));
69
70 strcpy(pTemporary[m_numEntries].locPath, pLocPath);
71 strcpy(pTemporary[m_numEntries].locName, pLocName);
72 strcpy(pTemporary[m_numEntries].remPath, pRemPath);
73 strcpy(pTemporary[m_numEntries].remName, pRemName);
74
75 pTemporary[m_numEntries].info.size = size;
76 pTemporary[m_numEntries].info.data = data;
77 pTemporary[m_numEntries].info.flags = flags;
78
79 if (m_pEntries != NULL) {
80 delete [] m_pEntries;
81 m_pEntries = NULL;
82 }
83
84 m_pEntries = pTemporary;
85 pTemporary = NULL;
86 m_numEntries++;
87}
88
89char *
90TransferQueue::getLocPathAt(unsigned int number)
91{
92 if ((number >= 0) && (number < m_numEntries)) {
93 return m_pEntries[number].locPath;
94 }
95 return NULL;
96}
97
98char *
99TransferQueue::getLocNameAt(unsigned int number)
100{
101 if ((number >= 0) && (number < m_numEntries)) {
102 return m_pEntries[number].locName;
103 }
104 return NULL;
105}
106
107char *
108TransferQueue::getRemPathAt(unsigned int number)
109{
110 if ((number >= 0) && (number < m_numEntries)) {
111 return m_pEntries[number].remPath;
112 }
113 return NULL;
114}
115
116char *
117TransferQueue::getRemNameAt(unsigned int number)
118{
119 if ((number >= 0) && (number < m_numEntries)) {
120 return m_pEntries[number].remName;
121 }
122 return NULL;
123}
124
125char *
126TransferQueue::getFullLocPathAt(unsigned int number)
127{
128 if ((number >= 0) && (number < m_numEntries)) {
129 sprintf(m_szFullLocPath, "%s\\%s", getLocPathAt(number), getLocNameAt(number));
130 return m_szFullLocPath;
131 }
132 return NULL;
133}
134
135char *
136TransferQueue::getFullRemPathAt(unsigned int number)
137{
138 if ((number >= 0) && (number < m_numEntries)) {
139 sprintf(m_szFullRemPath, "%s\\%s", getRemPathAt(number), getRemNameAt(number));
140 return m_szFullRemPath;
141 }
142 return NULL;
143}
144
145SIZEDATAFLAGSINFO *
146TransferQueue::getSizeDataFlagsAt(unsigned int number)
147{
148 if ((number >= 0) && (number < m_numEntries)) {
149 return &m_pEntries[number].info;
150 }
151 return NULL;
152}
153
154bool
155TransferQueue::setLocPathAt(unsigned int number, char *pName)
156{
157 if ((number >= 0) && (number < m_numEntries)) {
158 strcpy(m_pEntries[number].locPath, pName);
159 return true;
160 }
161 return false;
162}
163
164bool
165TransferQueue::setLocNameAt(unsigned int number, char *pName)
166{
167 if ((number >= 0) && (number < m_numEntries)) {
168 strcpy(m_pEntries[number].locName, pName);
169 return true;
170 }
171 return false;
172}
173
174bool
175TransferQueue::setRemPathAt(unsigned int number, char *pName)
176{
177 if ((number >= 0) && (number < m_numEntries)) {
178 strcpy(m_pEntries[number].remPath, pName);
179 return true;
180 }
181 return false;
182}
183
184bool
185TransferQueue::setRemNameAt(unsigned int number, char *pName)
186{
187 if ((number >= 0) && (number < m_numEntries)) {
188 strcpy(m_pEntries[number].remName, pName);
189 return true;
190 }
191 return false;
192}
193
194unsigned int
195TransferQueue::getSizeAt(unsigned int number)
196{
197 if ((number >= 0) && (number < m_numEntries)) {
198 return m_pEntries[number].info.size;
199 }
200 return 0;
201}
202
203unsigned int
204TransferQueue::getDataAt(unsigned int number)
205{
206 if ((number >= 0) && (number < m_numEntries)) {
207 return m_pEntries[number].info.data;
208 }
209 return 0;
210}
211
212unsigned int
213TransferQueue::getFlagsAt(unsigned int number)
214{
215 if ((number >= 0) && (number < m_numEntries)) {
216 return m_pEntries[number].info.flags;
217 }
218 return 0;
219}
220
221bool
222TransferQueue::setSizeAt(unsigned int number, unsigned int value)
223{
224 if ((number >= 0) && (number < m_numEntries)) {
225 m_pEntries[number].info.size = value;
226 return true;
227 }
228 return false;
229}
230
231bool
232TransferQueue::setDataAt(unsigned int number, unsigned int value)
233{
234 if ((number >= 0) && (number < m_numEntries)) {
235 m_pEntries[number].info.data = value;
236 return true;
237 }
238 return false;
239}
240
241bool
242TransferQueue::setFlagsAt(unsigned int number, unsigned int value)
243{
244 if ((number >= 0) && (number < m_numEntries)) {
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000245 m_pEntries[number].info.flags = m_pEntries[number].info.flags | value;
Dennis Syrovatskybbbc0362005-10-18 05:14:08 +0000246 return true;
247 }
248 return false;
249}
250
251bool
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000252TransferQueue::clearFlagAt(unsigned int number, unsigned int value)
253{
254 if ((number >= 0) && (number < m_numEntries)) {
255 m_pEntries[number].info.flags = (m_pEntries[number].info.flags & (value ^ 0xFFFFFFFF));
256 return true;
257 }
258 return false;
259}
260
261bool
262TransferQueue::setFlagToAll(unsigned int flag)
263{
264 for (unsigned int i = 0; i < m_numEntries; i++) {
265 setFlagsAt(i, flag);
266 }
267 return true;
268}
269
270bool
Dennis Syrovatskybbbc0362005-10-18 05:14:08 +0000271TransferQueue::deleteAt(unsigned int number)
272{
273 if ((number >= m_numEntries) || (number < 0)) return false;
274
275 FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries - 1];
276
277 if (number == 0) {
278 memcpy(pTemporary, &m_pEntries[1], (m_numEntries - 1) * sizeof(FILEINFOEX));
279 } else {
280 memcpy(pTemporary, m_pEntries, number * sizeof(FILEINFOEX));
281 if (number != (m_numEntries - 1))
282 memcpy(&pTemporary[number], &m_pEntries[number + 1], (m_numEntries - number - 1) * sizeof(FILEINFOEX));
283 }
284
285 if (m_pEntries != NULL) {
286 delete [] m_pEntries;
287 m_pEntries = NULL;
288 }
289 m_pEntries = pTemporary;
290 pTemporary = NULL;
291 m_numEntries--;
292 return true;
293}
294
295unsigned int
296TransferQueue::getNumEntries()
297{
298 return m_numEntries;
299}
300
301void
302TransferQueue::free()
303{
304 if (m_pEntries != NULL) {
305 delete [] m_pEntries;
306 m_pEntries = NULL;
307 }
308 m_numEntries = 0;
309}