1 // Copyright © 2017 Pioneer Developers. See AUTHORS.txt for details 2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt 3 4 #ifndef GZIP_FORMAT_H 5 #define GZIP_FORMAT_H 6 7 #include <string> 8 9 namespace gzip { 10 struct GZipException {}; 11 struct DecompressionFailedException : public GZipException {}; 12 struct CompressionFailedException : public GZipException {}; 13 14 // Checks if the data block could plausibly be a GZip file. 15 // This really just checks for the magic GZip bytes and a basic length check. 16 bool IsGZipFormat(const unsigned char *data, size_t length); 17 18 // Decompresses a compressed block. 19 // If the input starts with GZip header marker bytes then it will interpret the input as GZip data. 20 // If the input does not start with the GZip header marker then it will assume it's a plain DEFLATE 21 // input and decompress it as such. 22 std::string DecompressDeflateOrGZip(const unsigned char *data, size_t length); 23 24 // Decompress GZip format data. 25 // This tries to follow RFC 1952 (GZip format). 26 // If the input fails format or CRC checks then it will throw an exception. 27 std::string DecompressGZip(const unsigned char *data, size_t length); 28 29 // Wrapper for miniz inflate function; assumes no header. 30 std::string DecompressRawDeflate(const unsigned char *data, size_t length); 31 32 // Compresses a block of data and adds a GZip format header. 33 // This tries to follow RFC 1952 (GZip format). 34 // If compression fails it throws an exception. 35 // Parameter 'inner_file_name' is the name written in the GZip header as the file name of the compressed block. 36 std::string CompressGZip(const std::string &data, const std::string &inner_file_name); 37 } // namespace gzip 38 39 #endif 40