void FileTransferReplyBuffer::onFileListReply() { UINT8 compressionLevel = 0; UINT32 compressedSize = 0; UINT32 uncompressedSize = 0; UINT8 *buffer = NULL; { omni_mutex_lock l(*m_readMutex); compressionLevel = m_dataInputStream->readUInt8(); compressedSize = m_dataInputStream->readUInt32(); uncompressedSize = m_dataInputStream->readUInt32(); buffer = readCompressedDataBlock(compressedSize, uncompressedSize, compressionLevel); } ByteArrayInputStream memoryInputStream((char *)buffer, uncompressedSize); DataInputStream filesInfoReader(&memoryInputStream); if (m_filesInfo != NULL) { delete[] m_filesInfo; } try { m_filesInfoCount = filesInfoReader.readUInt32(); m_filesInfo = new FileInfo[m_filesInfoCount]; for (UINT32 i = 0; i < m_filesInfoCount; i++) { FileInfo *fileInfo = &m_filesInfo[i]; fileInfo->setSize(filesInfoReader.readUInt64()); fileInfo->setLastModified(filesInfoReader.readUInt64()); fileInfo->setFlags(filesInfoReader.readUInt16()); StringStorage t; filesInfoReader.readUTF8(&t); fileInfo->setFileName(t.getString()); } } catch (IOException &ioEx) { delete[] buffer; throw ioEx; } Log::info(_T("Recieved file list reply: \n") _T("\t files count = %d\n") _T("\t use compression = %d\n"), m_filesInfoCount, compressionLevel); delete[] buffer; }
void FileTransferReplyBuffer::onFileListReply() { UINT8 compressionLevel = 0; UINT32 compressedSize = 0; UINT32 uncompressedSize = 0; vector<UINT8> buffer; { compressionLevel = m_input->readUInt8(); compressedSize = m_input->readUInt32(); uncompressedSize = m_input->readUInt32(); buffer = readCompressedDataBlock(compressedSize, uncompressedSize, compressionLevel); } // FIXME: type conversion in C-style ByteArrayInputStream memoryInputStream((const char *)(&buffer.front()), uncompressedSize); DataInputStream filesInfoReader(&memoryInputStream); if (m_filesInfo != NULL) { delete[] m_filesInfo; } m_filesInfoCount = filesInfoReader.readUInt32(); m_filesInfo = new FileInfo[m_filesInfoCount]; for (UINT32 i = 0; i < m_filesInfoCount; i++) { FileInfo *fileInfo = &m_filesInfo[i]; fileInfo->setSize(filesInfoReader.readUInt64()); fileInfo->setLastModified(filesInfoReader.readUInt64()); fileInfo->setFlags(filesInfoReader.readUInt16()); StringStorage t; filesInfoReader.readUTF8(&t); fileInfo->setFileName(t.getString()); } // for all newly created file's info m_logWriter->info(_T("Received file list reply: \n") _T("\t files count = %d\n") _T("\t use compression = %d\n"), m_filesInfoCount, compressionLevel); }