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