CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
compression.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_COMPRESSION_COMPRESSION_H_
6 #define CVMFS_COMPRESSION_COMPRESSION_H_
7 
8 #include <errno.h>
9 #include <stdint.h>
10 #include <stdio.h>
11 
12 #include <string>
13 
14 #include "duplex_zlib.h"
15 #include "network/sink.h"
16 #include "util/plugin.h"
17 
18 namespace shash {
19 struct Any;
20 class ContextPtr;
21 } // namespace shash
22 
23 bool CopyPath2Path(const std::string &src, const std::string &dest);
24 bool CopyPath2File(const std::string &src, FILE *fdest);
25 bool CopyMem2Path(const unsigned char *buffer, const unsigned buffer_size,
26  const std::string &path);
27 bool CopyMem2File(const unsigned char *buffer, const unsigned buffer_size,
28  FILE *fdest);
29 bool CopyPath2Mem(const std::string &path, unsigned char **buffer,
30  unsigned *buffer_size);
31 
32 namespace zlib {
33 
34 const unsigned kZChunk = 16384;
35 
41 };
42 
43 // Do not change order of algorithms. Used as flags in the catalog
44 enum Algorithms {
47 };
48 
61 class Compressor : public PolymorphicConstruction<Compressor, Algorithms> {
62  public:
63  explicit Compressor(const Algorithms & /* alg */) { }
64  virtual ~Compressor() { }
82  virtual bool Deflate(const bool flush, unsigned char **inbuf,
83  size_t *inbufsize, unsigned char **outbuf,
84  size_t *outbufsize) = 0;
85 
91  virtual size_t DeflateBound(const size_t bytes) = 0;
92  virtual Compressor *Clone() = 0;
93 
94  static void RegisterPlugins();
95 };
96 
97 
98 class ZlibCompressor : public Compressor {
99  public:
100  explicit ZlibCompressor(const Algorithms &alg);
101  ZlibCompressor(const ZlibCompressor &other);
102  ~ZlibCompressor();
103 
104  bool Deflate(const bool flush, unsigned char **inbuf, size_t *inbufsize,
105  unsigned char **outbuf, size_t *outbufsize);
106  size_t DeflateBound(const size_t bytes);
107  Compressor *Clone();
108  static bool WillHandle(const zlib::Algorithms &alg);
109 
110  private:
111  z_stream stream_;
112 };
113 
114 
115 class EchoCompressor : public Compressor {
116  public:
117  explicit EchoCompressor(const Algorithms &alg);
118  bool Deflate(const bool flush, unsigned char **inbuf, size_t *inbufsize,
119  unsigned char **outbuf, size_t *outbufsize);
120  size_t DeflateBound(const size_t bytes);
121  Compressor *Clone();
122  static bool WillHandle(const zlib::Algorithms &alg);
123 };
124 
125 
126 Algorithms ParseCompressionAlgorithm(const std::string &algorithm_option);
127 std::string AlgorithmName(const zlib::Algorithms alg);
128 
129 
130 void CompressInit(z_stream *strm);
131 void DecompressInit(z_stream *strm);
132 void CompressFini(z_stream *strm);
133 void DecompressFini(z_stream *strm);
134 
135 StreamStates CompressZStream2Null(const void *buf, const int64_t size,
136  const bool eof, z_stream *strm,
137  shash::ContextPtr *hash_context);
138 StreamStates DecompressZStream2File(const void *buf, const int64_t size,
139  z_stream *strm, FILE *f);
140 StreamStates DecompressZStream2Sink(const void *buf, const int64_t size,
141  z_stream *strm, cvmfs::Sink *sink);
142 
143 bool CompressPath2Path(const std::string &src, const std::string &dest);
144 bool CompressPath2Path(const std::string &src, const std::string &dest,
145  shash::Any *compressed_hash);
146 bool DecompressPath2Path(const std::string &src, const std::string &dest);
147 
148 bool CompressPath2Null(const std::string &src, shash::Any *compressed_hash);
149 bool CompressFile2Null(FILE *fsrc, shash::Any *compressed_hash);
150 bool CompressFd2Null(int fd_src, shash::Any *compressed_hash,
151  uint64_t *size = NULL);
152 bool CompressFile2File(FILE *fsrc, FILE *fdest);
153 bool CompressFile2File(FILE *fsrc, FILE *fdest, shash::Any *compressed_hash);
154 bool CompressPath2File(const std::string &src, FILE *fdest,
155  shash::Any *compressed_hash);
156 bool DecompressFile2File(FILE *fsrc, FILE *fdest);
157 bool DecompressPath2File(const std::string &src, FILE *fdest);
158 
159 bool CompressMem2File(const unsigned char *buf, const size_t size, FILE *fdest,
160  shash::Any *compressed_hash);
161 
162 // User of these functions has to free out_buf, if successful
163 bool CompressMem2Mem(const void *buf, const int64_t size, void **out_buf,
164  uint64_t *out_size);
165 bool DecompressMem2Mem(const void *buf, const int64_t size, void **out_buf,
166  uint64_t *out_size);
167 
168 } // namespace zlib
169 
170 #endif // CVMFS_COMPRESSION_COMPRESSION_H_
bool CompressPath2Null(const string &src, shash::Any *compressed_hash)
Definition: compression.cc:526
Compressor(const Algorithms &)
Definition: compression.h:63
Algorithms ParseCompressionAlgorithm(const std::string &algorithm_option)
Definition: compression.cc:153
StreamStates DecompressZStream2Sink(const void *buf, const int64_t size, z_stream *strm, cvmfs::Sink *sink)
Definition: compression.cc:233
virtual bool Deflate(const bool flush, unsigned char **inbuf, size_t *inbufsize, unsigned char **outbuf, size_t *outbufsize)=0
Compressor * Clone()
Definition: compression.cc:960
bool CompressPath2File(const string &src, FILE *fdest, shash::Any *compressed_hash)
Definition: compression.cc:586
EchoCompressor(const Algorithms &alg)
Definition: compression.cc:951
bool CopyMem2File(const unsigned char *buffer, const unsigned buffer_size, FILE *fdest)
Definition: compression.cc:94
static bool WillHandle(const zlib::Algorithms &alg)
Definition: compression.cc:955
void DecompressInit(z_stream *strm)
Definition: compression.cc:190
virtual size_t DeflateBound(const size_t bytes)=0
bool DecompressMem2Mem(const void *buf, const int64_t size, void **out_buf, uint64_t *out_size)
Definition: compression.cc:811
StreamStates DecompressZStream2File(const void *buf, const int64_t size, z_stream *strm, FILE *f)
Definition: compression.cc:272
std::string AlgorithmName(const zlib::Algorithms alg)
Definition: compression.cc:163
bool Deflate(const bool flush, unsigned char **inbuf, size_t *inbufsize, unsigned char **outbuf, size_t *outbufsize)
Definition: compression.cc:907
StreamStates
Definition: compression.h:36
Compressor * Clone()
Definition: compression.cc:896
void DecompressFini(z_stream *strm)
Definition: compression.cc:204
bool CopyPath2Path(const string &src, const string &dest)
Definition: compression.cc:66
bool CopyPath2Mem(const string &path, unsigned char **buffer, unsigned *buffer_size)
Definition: compression.cc:114
const unsigned kZChunk
Definition: compression.h:34
bool CopyPath2File(const std::string &src, FILE *fdest)
Definition: compression.cc:46
StreamStates CompressZStream2Null(const void *buf, const int64_t size, const bool eof, z_stream *strm, shash::ContextPtr *hash_context)
Definition: compression.cc:207
bool DecompressFile2File(FILE *fsrc, FILE *fdest)
Definition: compression.cc:654
bool CompressFile2File(FILE *fsrc, FILE *fdest)
Definition: compression.cc:536
size_t DeflateBound(const size_t bytes)
Definition: compression.cc:942
bool CopyMem2Path(const unsigned char *buffer, const unsigned buffer_size, const string &path)
Definition: compression.cc:101
Algorithms
Definition: compression.h:44
static void RegisterPlugins()
Definition: compression.cc:871
bool CompressFd2Null(int fd_src, shash::Any *compressed_hash, uint64_t *processed_bytes)
Definition: compression.cc:461
void CompressFini(z_stream *strm)
Definition: compression.cc:201
bool DecompressPath2File(const string &src, FILE *fdest)
Definition: compression.cc:681
void CompressInit(z_stream *strm)
Definition: compression.cc:179
bool Deflate(const bool flush, unsigned char **inbuf, size_t *inbufsize, unsigned char **outbuf, size_t *outbufsize)
Definition: compression.cc:965
static bool WillHandle(const zlib::Algorithms &alg)
Definition: compression.cc:880
virtual ~Compressor()
Definition: compression.h:64
bool CompressFile2Null(FILE *fsrc, shash::Any *compressed_hash)
Definition: compression.cc:407
bool CompressMem2File(const unsigned char *buf, const size_t size, FILE *fdest, shash::Any *compressed_hash)
Definition: compression.cc:692
bool DecompressPath2Path(const string &src, const string &dest)
Definition: compression.cc:383
bool CompressMem2Mem(const void *buf, const int64_t size, void **out_buf, uint64_t *out_size)
Definition: compression.cc:754
virtual Compressor * Clone()=0
static void size_t size
Definition: smalloc.h:54
ZlibCompressor(const Algorithms &alg)
Definition: compression.cc:885
size_t DeflateBound(const size_t bytes)
Definition: compression.cc:981
bool CompressPath2Path(const string &src, const string &dest)
Definition: compression.cc:315