blob: 2b58362312871d4805585e6493f8f2d33b6faeaa [file] [log] [blame]
/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
*
* Developed by Dennis Syrovatsky.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*
*
*
*/
// -=- TransferQueue.
#include <rfb/TransferQueue.h>
using namespace rfb;
TransferQueue::TransferQueue()
{
m_numEntries = 0;
m_pEntries = NULL;
}
TransferQueue::~TransferQueue()
{
free();
}
void
TransferQueue::add(TransferQueue *pTQ)
{
for (unsigned int i = 0; i < pTQ->getNumEntries(); i++) {
add(pTQ->getLocPathAt(i), pTQ->getRemPathAt(i), pTQ->getLocNameAt(i),
pTQ->getRemNameAt(i), pTQ->getSizeAt(i), pTQ->getDataAt(i), pTQ->getFlagsAt(i));
}
}
void
TransferQueue::add(char *pLocPath, char *pRemPath, FileInfo *pFI, unsigned int flags)
{
char locPath[FT_FILENAME_SIZE];
char remPath[FT_FILENAME_SIZE];
strcpy(locPath, pLocPath);
strcpy(remPath, pRemPath);
for (unsigned int i = 0; i < pFI->getNumEntries(); i++) {
add(locPath, remPath, pFI->getNameAt(i), pFI->getNameAt(i),
pFI->getSizeAt(i), pFI->getDataAt(i), (pFI->getFlagsAt(i) | flags));
}
}
void
TransferQueue::add(char *pLocPath, char *pRemPath, char *pLocName, char *pRemName,
unsigned int size, unsigned int data, unsigned int flags)
{
FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries + 1];
if (m_numEntries != 0)
memcpy(pTemporary, m_pEntries, m_numEntries * sizeof(FILEINFOEX));
strcpy(pTemporary[m_numEntries].locPath, pLocPath);
strcpy(pTemporary[m_numEntries].locName, pLocName);
strcpy(pTemporary[m_numEntries].remPath, pRemPath);
strcpy(pTemporary[m_numEntries].remName, pRemName);
pTemporary[m_numEntries].info.size = size;
pTemporary[m_numEntries].info.data = data;
pTemporary[m_numEntries].info.flags = flags;
if (m_pEntries != NULL) {
delete [] m_pEntries;
m_pEntries = NULL;
}
m_pEntries = pTemporary;
pTemporary = NULL;
m_numEntries++;
}
char *
TransferQueue::getLocPathAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].locPath;
}
return NULL;
}
char *
TransferQueue::getLocNameAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].locName;
}
return NULL;
}
char *
TransferQueue::getRemPathAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].remPath;
}
return NULL;
}
char *
TransferQueue::getRemNameAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].remName;
}
return NULL;
}
char *
TransferQueue::getFullLocPathAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
sprintf(m_szFullLocPath, "%s\\%s", getLocPathAt(number), getLocNameAt(number));
return m_szFullLocPath;
}
return NULL;
}
char *
TransferQueue::getFullRemPathAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
sprintf(m_szFullRemPath, "%s\\%s", getRemPathAt(number), getRemNameAt(number));
return m_szFullRemPath;
}
return NULL;
}
SIZEDATAFLAGSINFO *
TransferQueue::getSizeDataFlagsAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return &m_pEntries[number].info;
}
return NULL;
}
bool
TransferQueue::setLocPathAt(unsigned int number, char *pName)
{
if ((number >= 0) && (number < m_numEntries)) {
strcpy(m_pEntries[number].locPath, pName);
return true;
}
return false;
}
bool
TransferQueue::setLocNameAt(unsigned int number, char *pName)
{
if ((number >= 0) && (number < m_numEntries)) {
strcpy(m_pEntries[number].locName, pName);
return true;
}
return false;
}
bool
TransferQueue::setRemPathAt(unsigned int number, char *pName)
{
if ((number >= 0) && (number < m_numEntries)) {
strcpy(m_pEntries[number].remPath, pName);
return true;
}
return false;
}
bool
TransferQueue::setRemNameAt(unsigned int number, char *pName)
{
if ((number >= 0) && (number < m_numEntries)) {
strcpy(m_pEntries[number].remName, pName);
return true;
}
return false;
}
unsigned int
TransferQueue::getSizeAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].info.size;
}
return 0;
}
unsigned int
TransferQueue::getDataAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].info.data;
}
return 0;
}
unsigned int
TransferQueue::getFlagsAt(unsigned int number)
{
if ((number >= 0) && (number < m_numEntries)) {
return m_pEntries[number].info.flags;
}
return 0;
}
bool
TransferQueue::setSizeAt(unsigned int number, unsigned int value)
{
if ((number >= 0) && (number < m_numEntries)) {
m_pEntries[number].info.size = value;
return true;
}
return false;
}
bool
TransferQueue::setDataAt(unsigned int number, unsigned int value)
{
if ((number >= 0) && (number < m_numEntries)) {
m_pEntries[number].info.data = value;
return true;
}
return false;
}
bool
TransferQueue::setFlagsAt(unsigned int number, unsigned int value)
{
if ((number >= 0) && (number < m_numEntries)) {
m_pEntries[number].info.flags = m_pEntries[number].info.flags | value;
return true;
}
return false;
}
bool
TransferQueue::clearFlagAt(unsigned int number, unsigned int value)
{
if ((number >= 0) && (number < m_numEntries)) {
m_pEntries[number].info.flags = (m_pEntries[number].info.flags & (value ^ 0xFFFFFFFF));
return true;
}
return false;
}
bool
TransferQueue::setFlagToAll(unsigned int flag)
{
for (unsigned int i = 0; i < m_numEntries; i++) {
setFlagsAt(i, flag);
}
return true;
}
bool
TransferQueue::deleteAt(unsigned int number)
{
if ((number >= m_numEntries) || (number < 0)) return false;
FILEINFOEX *pTemporary = new FILEINFOEX[m_numEntries - 1];
if (number == 0) {
memcpy(pTemporary, &m_pEntries[1], (m_numEntries - 1) * sizeof(FILEINFOEX));
} else {
memcpy(pTemporary, m_pEntries, number * sizeof(FILEINFOEX));
if (number != (m_numEntries - 1))
memcpy(&pTemporary[number], &m_pEntries[number + 1], (m_numEntries - number - 1) * sizeof(FILEINFOEX));
}
if (m_pEntries != NULL) {
delete [] m_pEntries;
m_pEntries = NULL;
}
m_pEntries = pTemporary;
pTemporary = NULL;
m_numEntries--;
return true;
}
unsigned int
TransferQueue::getNumEntries()
{
return m_numEntries;
}
void
TransferQueue::free()
{
if (m_pEntries != NULL) {
delete [] m_pEntries;
m_pEntries = NULL;
}
m_numEntries = 0;
}