| /* 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; |
| } |