"Fossies" - the Fresh Open Source Software Archive

Member "tor-0.4.1.6/src/lib/compress/compress.h" (10 Jun 2019, 3586 Bytes) of package /linux/misc/tor-0.4.1.6.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "compress.h" see the Fossies "Dox" file reference documentation.

    1 /* Copyright (c) 2003, Roger Dingledine
    2  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
    3  * Copyright (c) 2007-2019, The Tor Project, Inc. */
    4 /* See LICENSE for licensing information */
    5 
    6 /**
    7  * \file compress.h
    8  * \brief Headers for compress.c
    9  **/
   10 
   11 #ifndef TOR_COMPRESS_H
   12 #define TOR_COMPRESS_H
   13 
   14 #include <stddef.h>
   15 #include "lib/testsupport/testsupport.h"
   16 
   17 /** Enumeration of what kind of compression to use.  Only ZLIB_METHOD and
   18  * GZIP_METHOD is guaranteed to be supported by the compress/uncompress
   19  * functions here. Call tor_compress_supports_method() to check if a given
   20  * compression schema is supported by Tor. */
   21 typedef enum compress_method_t {
   22   NO_METHOD=0, // This method must be first.
   23   GZIP_METHOD=1,
   24   ZLIB_METHOD=2,
   25   LZMA_METHOD=3,
   26   ZSTD_METHOD=4,
   27   UNKNOWN_METHOD=5, // This method must be last. Add new ones in the middle.
   28 } compress_method_t;
   29 
   30 /**
   31  * Enumeration to define tradeoffs between memory usage and compression level.
   32  * BEST_COMPRESSION saves the most bandwidth; LOW_COMPRESSION saves the most
   33  * memory.
   34  **/
   35 typedef enum compression_level_t {
   36   BEST_COMPRESSION, HIGH_COMPRESSION, MEDIUM_COMPRESSION, LOW_COMPRESSION
   37 } compression_level_t;
   38 
   39 int tor_compress(char **out, size_t *out_len,
   40                  const char *in, size_t in_len,
   41                  compress_method_t method);
   42 
   43 int tor_uncompress(char **out, size_t *out_len,
   44                    const char *in, size_t in_len,
   45                    compress_method_t method,
   46                    int complete_only,
   47                    int protocol_warn_level);
   48 
   49 compress_method_t detect_compression_method(const char *in, size_t in_len);
   50 
   51 MOCK_DECL(int,tor_compress_is_compression_bomb,(size_t size_in,
   52                                                 size_t size_out));
   53 
   54 int tor_compress_supports_method(compress_method_t method);
   55 unsigned tor_compress_get_supported_method_bitmask(void);
   56 const char *compression_method_get_name(compress_method_t method);
   57 const char *compression_method_get_human_name(compress_method_t method);
   58 compress_method_t compression_method_get_by_name(const char *name);
   59 
   60 const char *tor_compress_version_str(compress_method_t method);
   61 
   62 const char *tor_compress_header_version_str(compress_method_t method);
   63 
   64 size_t tor_compress_get_total_allocation(void);
   65 
   66 /** Return values from tor_compress_process; see that function's documentation
   67  * for details. */
   68 typedef enum {
   69   TOR_COMPRESS_OK,
   70   TOR_COMPRESS_DONE,
   71   TOR_COMPRESS_BUFFER_FULL,
   72   TOR_COMPRESS_ERROR
   73 } tor_compress_output_t;
   74 
   75 /** Internal state for an incremental compression/decompression. */
   76 typedef struct tor_compress_state_t tor_compress_state_t;
   77 
   78 tor_compress_state_t *tor_compress_new(int compress,
   79                                        compress_method_t method,
   80                                        compression_level_t level);
   81 
   82 tor_compress_output_t tor_compress_process(tor_compress_state_t *state,
   83                                            char **out, size_t *out_len,
   84                                            const char **in, size_t *in_len,
   85                                            int finish);
   86 void tor_compress_free_(tor_compress_state_t *state);
   87 #define tor_compress_free(st) \
   88   FREE_AND_NULL(tor_compress_state_t, tor_compress_free_, (st))
   89 
   90 size_t tor_compress_state_size(const tor_compress_state_t *state);
   91 
   92 int tor_compress_init(void);
   93 void tor_compress_log_init_warnings(void);
   94 
   95 struct buf_t;
   96 int buf_add_compress(struct buf_t *buf, struct tor_compress_state_t *state,
   97                      const char *data, size_t data_len, int done);
   98 
   99 #endif /* !defined(TOR_COMPRESS_H) */