File indexing completed on 2025-02-16 13:00:36
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