void ActiveMQTextMessage::beforeMarshal( wireformat::WireFormat* wireFormat ) throw ( decaf::io::IOException ) { ActiveMQMessageTemplate<cms::TextMessage>::beforeMarshal( wireFormat ); if( this->text.get() != NULL ) { ByteArrayOutputStream* bytesOut = new ByteArrayOutputStream; OutputStream* os = bytesOut; if( this->connection != NULL && this->connection->isUseCompression() ) { this->compressed = true; os = new DeflaterOutputStream( os, true ); } DataOutputStream dataOut( os, true ); if( this->text.get() == NULL ) { dataOut.writeInt( -1 ); } else { MarshallingSupport::writeString32( dataOut, *( this->text ) ); } dataOut.close(); if( bytesOut->size() > 0 ) { std::pair<const unsigned char*, int> array = bytesOut->toByteArray(); this->setContent( std::vector<unsigned char>( array.first, array.first + array.second ) ); delete [] array.first; } this->text.reset( NULL ); } }
void FilterOutputStreamTest::testFlush() { try { ByteArrayOutputStream baos; FilterOutputStream os( &baos ); os.write( (unsigned char*)&testString[0], (int)testString.size(), 0, 500 ); os.flush(); CPPUNIT_ASSERT_MESSAGE( "Bytes not written after flush", 500 == baos.size() ); os.close(); } catch( IOException& e ) { CPPUNIT_FAIL("Flush test failed : " + e.getMessage()); } }
void FileTransferRequestHandler::fileListRequested() { UINT8 requestedCompressionLevel; WinFilePath fullPathName; // // Read input data // { requestedCompressionLevel = m_input->readUInt8(); m_input->readUTF8(&fullPathName); } m_log->message(_T("File list of folder '%s' requested"), fullPathName.getString()); checkAccess(); UINT8 compressionLevel = requestedCompressionLevel; UINT32 compressedSize = 0; UINT32 uncompressedSize = 0; UINT32 filesCount = 0; UINT32 filesInfoDataSize = 0; const FileInfo *files = NULL; // // Get file list from specified folder // FolderListener folderListener(fullPathName.getString()); if (!folderListener.list()) { throw SystemException(); } files = folderListener.getFilesInfo(); filesCount = folderListener.getFilesCount(); // // Create buffer with "CompressedData" block inside // ByteArrayOutputStream memStream; DataOutputStream outMemStream(&memStream); outMemStream.writeUInt32(filesCount); for (UINT32 i = 0; i < filesCount; i++) { outMemStream.writeUInt64(files[i].getSize()); outMemStream.writeUInt64(files[i].lastModified()); outMemStream.writeUInt16(files[i].getFlags()); outMemStream.writeUTF8(files[i].getFileName()); } // for _ASSERT((UINT32)memStream.size() == memStream.size()); uncompressedSize = (UINT32)memStream.size(); // // Buffer for data in "CompressedData" block // compressedSize = uncompressedSize; if (compressionLevel != 0) { m_deflater.setInput(memStream.toByteArray(), memStream.size()); m_deflater.deflate(); _ASSERT((UINT32)m_deflater.getOutputSize() == m_deflater.getOutputSize()); compressedSize = (UINT32)m_deflater.getOutputSize(); } // // Write data to socket // { AutoLock l(m_output); m_output->writeUInt32(FTMessage::FILE_LIST_REPLY); m_output->writeUInt8(compressionLevel); m_output->writeUInt32(compressedSize); m_output->writeUInt32(uncompressedSize); if (compressionLevel != 0) { m_output->writeFully(m_deflater.getOutput(), compressedSize); } else { m_output->writeFully(memStream.toByteArray(), uncompressedSize); } m_output->flush(); } // synchronized(m_output) } // void