File indexing completed on 2024-04-21 07:39:13

0001 /* This file is part of the KDE libraries
0002    SPDX-FileCopyrightText: 2000, 2009 David Faure <faure@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef __kgzipfilter__h
0008 #define __kgzipfilter__h
0009 
0010 #include "kfilterbase.h"
0011 
0012 /**
0013  * Internal class used by KCompressionDevice
0014  *
0015  * This header is not installed.
0016  *
0017  * @internal
0018  */
0019 class KGzipFilter : public KFilterBase
0020 {
0021 public:
0022     KGzipFilter();
0023     ~KGzipFilter() override;
0024 
0025     bool init(int mode) override;
0026 
0027     // The top of zlib.h explains it: there are three cases.
0028     // - Raw deflate, no header (e.g. inside a ZIP file)
0029     // - Thin zlib header (1) (which is normally what HTTP calls "deflate" (2))
0030     // - Gzip header, implemented here by readHeader
0031     //
0032     // (1) as written out by compress()/compress2()
0033     // (2) see https://www.zlib.net/zlib_faq.html#faq39
0034     enum Flag {
0035         RawDeflate = 0, // raw deflate data
0036         ZlibHeader = 1, // zlib headers (HTTP deflate)
0037         GZipHeader = 2,
0038     };
0039     bool init(int mode, Flag flag); // for direct users of KGzipFilter
0040     int mode() const override;
0041     bool terminate() override;
0042     void reset() override;
0043     bool readHeader() override; // this is about the GZIP header
0044     bool writeHeader(const QByteArray &fileName) override;
0045     void writeFooter();
0046     void setOutBuffer(char *data, uint maxlen) override;
0047     void setInBuffer(const char *data, uint size) override;
0048     int inBufferAvailable() const override;
0049     int outBufferAvailable() const override;
0050     Result uncompress() override;
0051     Result compress(bool finish) override;
0052 
0053 private:
0054     Result uncompress_noop();
0055     class Private;
0056     Private *const d;
0057 };
0058 
0059 #endif