22#include <com/sun/star/io/TempFile.hpp>
23#include <com/sun/star/packages/zip/ZipConstants.hpp>
25#include <osl/diagnose.h>
39using namespace com::sun::star::packages::zip::ZipConstants;
44 css::uno::Reference< css::io::XOutputStream > xOutput,
45 uno::Reference< uno::XComponentContext > xContext,
51, m_xOutStream(
std::move(xOutput))
52, m_pCurrentEntry(&rEntry)
54, m_pCurrentStream(pStream)
55, m_bEncryptCurrentEntry(bEncrypt)
75 OSL_FAIL(
"Invalid entry size");
85 OSL_FAIL(
"Invalid entry CRC-32");
105 uno::Sequence< sal_Int8 > aDigestSeq;
120 uno::Sequence< sal_Int8 > aTmpBuffer( deflateBuffer.getConstArray(),
nLength );
127 sal_Int32 nEat = ::std::min(
nLength, nDiff );
128 uno::Sequence< sal_Int8 > aTmpSeq( aTmpBuffer.getConstArray(), nEat );
134 uno::Sequence< sal_Int8 > aEncryptionBuffer =
m_xCipherContext->convertWithCipherContext( aTmpBuffer );
153 uno::Sequence< sal_Int8 > aEncryptionBuffer =
m_xCipherContext->finalizeCipherContextAndDispose();
154 if ( aEncryptionBuffer.hasElements() )
172 const css::uno::Reference< css::io::XOutputStream >& rxOutput,
173 const uno::Reference< uno::XComponentContext >& rxContext,
180, m_aDeflater(DEFAULT_COMPRESSION, true)
185 const css::uno::Reference< css::io::XOutputStream >& rxOutput,
186 const uno::Reference< uno::XComponentContext >& rxContext,
190:
ZipOutputEntry( rxOutput, rxContext, rEntry, pStream, bEncrypt, true)
240 const uno::Reference< uno::XComponentContext >& rxContext,
252 "should only be called in the threaded mode where there is no existing stream yet");
281 uno::Reference< io::XInputStream > xInStream )
308 catch (uno::Exception
const&)
317 const std::shared_ptr<comphelper::ThreadTaskTag>& pTag,
318 const uno::Reference< io::XInputStream >& xInStream )
320 return std::make_unique<Task>(pTag,
this, xInStream);
341 const css::uno::Reference< css::io::XOutputStream >& rxOutput,
342 const uno::Reference< uno::XComponentContext >& rxContext,
357 [
this](
const uno::Sequence< sal_Int8 >& rBuffer, sal_Int32 nLen) {
361 [
this](
const uno::Sequence< sal_Int8 >& rBuffer, sal_Int32 nLen) {
Reference< XComponentContext > m_xContext
const sal_Int32 n_ConstDigestLength
const sal_Int32 n_ConstBufferSize
sal_Int32 getValue() const
void updateSegment(const css::uno::Sequence< sal_Int8 > &b, sal_Int32 len)
Update CRC32 with specified sequence of bytes.
void update(const css::uno::Sequence< sal_Int8 > &b)
Update CRC32 with specified sequence of bytes.
css::uno::Reference< css::io::XOutputStream > m_xOutStream
virtual sal_Int64 getDeflaterTotalIn() const =0
void processInput(const css::uno::Sequence< sal_Int8 > &rBuffer)
ZipEntry * m_pCurrentEntry
css::uno::Reference< css::uno::XComponentContext > m_xContext
ZipPackageStream * m_pCurrentStream
css::uno::Reference< css::xml::crypto::XDigestContext > m_xDigestContext
css::uno::Reference< css::xml::crypto::XCipherContext > m_xCipherContext
void processDeflated(const css::uno::Sequence< sal_Int8 > &deflateBuffer, sal_Int32 nLength)
virtual void finishDeflater()=0
virtual bool isDeflaterFinished() const =0
virtual sal_Int64 getDeflaterTotalOut() const =0
virtual void deflaterReset()=0
ZipOutputEntryBase(css::uno::Reference< css::io::XOutputStream > xOutStream, css::uno::Reference< css::uno::XComponentContext > xContext, ZipEntry &rEntry, ZipPackageStream *pStream, bool bEncrypt, bool checkStream)
This class is used to deflate Zip entries.
bool m_bEncryptCurrentEntry
uno::Reference< io::XInputStream > mxInStream
Task(const std::shared_ptr< comphelper::ThreadTaskTag > &pTag, ZipOutputEntryInThread *pEntry, uno::Reference< io::XInputStream > xInStream)
virtual void doWork() override
ZipOutputEntryInThread * mpEntry
std::unique_ptr< comphelper::ThreadTask > createTask(const std::shared_ptr< comphelper::ThreadTaskTag > &pTag, const css::uno::Reference< css::io::XInputStream > &xInStream)
ZipOutputEntryInThread(const css::uno::Reference< css::uno::XComponentContext > &rxContext, ZipEntry &rEntry, ZipPackageStream *pStream, bool bEncrypt)
rtl::Reference< utl::TempFileFastService > m_xTempFile
css::uno::Reference< css::io::XInputStream > getData() const
void setParallelDeflateException(const std::exception_ptr &exception)
virtual void finishDeflater() override
virtual void deflaterReset() override
ZipOutputEntryParallel(const css::uno::Reference< css::io::XOutputStream > &rxOutStream, const css::uno::Reference< css::uno::XComponentContext > &rxContext, ZipEntry &rEntry, ZipPackageStream *pStream, bool bEncrypt)
virtual bool isDeflaterFinished() const override
void writeStream(const css::uno::Reference< css::io::XInputStream > &xInStream) override
virtual sal_Int64 getDeflaterTotalIn() const override
virtual sal_Int64 getDeflaterTotalOut() const override
ZipOutputEntry(const css::uno::Reference< css::io::XOutputStream > &rxOutStream, const css::uno::Reference< css::uno::XComponentContext > &rxContext, ZipEntry &rEntry, ZipPackageStream *pStream, bool bEncrypt)
virtual sal_Int64 getDeflaterTotalIn() const override
virtual void finishDeflater() override
virtual bool isDeflaterFinished() const override
virtual void deflaterReset() override
ZipUtils::Deflater m_aDeflater
void writeStream(const css::uno::Reference< css::io::XInputStream > &xInStream) override
void write(const css::uno::Sequence< sal_Int8 > &rBuffer)
virtual sal_Int64 getDeflaterTotalOut() const override
css::uno::Sequence< sal_Int8 > m_aDeflateBuffer
void setDigest(const css::uno::Sequence< sal_Int8 > &rNewDigest)
::rtl::Reference< EncryptionData > GetEncryptionData(Bugs bugs=Bugs::None)
sal_Int64 getTotalOut() const
sal_Int64 getTotalIn() const
sal_Int32 doDeflateSegment(css::uno::Sequence< sal_Int8 > &rBuffer, sal_Int32 nNewLength)
void setInputSegment(const css::uno::Sequence< sal_Int8 > &rBuffer)
Parallel compression a stream using the libz deflate algorithm.
sal_Int64 getTotalOut() const
void deflateWrite(const css::uno::Reference< css::io::XInputStream > &xInStream, std::function< void(const css::uno::Sequence< sal_Int8 > &, sal_Int32)> aProcessInputFunc, std::function< void(const css::uno::Sequence< sal_Int8 > &, sal_Int32)> aProcessOutputFunc)
sal_Int64 getTotalIn() const
ThreadTask(std::shared_ptr< ThreadTaskTag > pTag)
Sequence< sal_Int8 > aSeq
sal_Int64 nCompressedSize