26#ifndef MACRO_TOOLS_HPP 
   27#define MACRO_TOOLS_HPP 
   29#include "../my_config.h" 
   55#define BUFFER_SIZE 102400 
   57#if SSIZE_MAX < BUFFER_SIZE 
   59#define BUFFER_SIZE SSIZE_MAX 
   69    constexpr U_I GLOBAL_ELASTIC_BUFFER_SIZE = 51200;
 
   71    extern const archive_version macro_tools_supported_version;
 
   72    extern const std::string LIBDAR_STACK_LABEL_UNCOMPRESSED;
 
   73    extern const std::string LIBDAR_STACK_LABEL_CLEAR;
 
   74    extern const std::string LIBDAR_STACK_LABEL_UNCYPHERED;
 
   75    extern const std::string LIBDAR_STACK_LABEL_LEVEL1;
 
   81                               const label & internal_name,
 
   82                               const label & data_name,
 
   83                               bool slice_header_format_07,
 
   84                               const std::string & execute);
 
  111                     const std::shared_ptr<entrepot> & where,          
 
  112                                         const std::string &basename,   
 
  114                                         const std::string &extension,  
 
  120                                         const std::string &input_pipe, 
 
  121                                         const std::string &output_pipe,       
 
  122                                         const std::string & execute,          
 
  123                     infinint & second_terminateur_offset, 
 
  125                     bool has_external_cat,    
 
  126                     bool sequential_read, 
 
  128                     std::list<signator> & gnupg_signed, 
 
  130                     U_I multi_threaded_crypto,  
 
  131                     U_I multi_threaded_compress,  
 
  134                     bool force_read_first_slice   
 
  145                                   const infinint & second_terminateur_offset, 
 
  146                                   std::list<signator> & signatories, 
 
  155                             const infinint & second_terminateur_offset,
 
  156                             std::list<signator> & signatories, 
 
  162                         const pile_descriptor & cata_pdesc,
 
  164                         std::list<signator> & signatories,
 
  166                         const label & lax_layer1_data_name,
 
  169    extern catalogue *macro_tools_lax_search_catalogue(
const std::shared_ptr<user_interaction> & dialog,
 
  174                               bool even_partial_catalogues,
 
  175                               const label & layer1_data_name);
 
  243                      slice_layout & slicing,
 
  244                      const slice_layout *ref_slicing,
 
  245                      const std::shared_ptr<entrepot> & sauv_path_t,
 
  246                      const std::string & filename,
 
  247                      const std::string & extension,
 
  253                      U_I compression_level,
 
  254                      U_I compression_block_size,
 
  257                      const std::string & execute,
 
  261                      const std::vector<std::string> & gnupg_recipients,
 
  262                      const std::vector<std::string> & gnupg_signatories,
 
  264                      const std::string & slice_permission,
 
  265                      bool add_marks_for_sequential_reading,
 
  266                      const std::string & user_comment,
 
  269                      const label & internal_name,
 
  270                      const label & data_name,
 
  273                      U_I multi_threaded_crypto,
 
  274                      U_I multi_threaded_compress);
 
  295                     const std::vector<std::string> & gnupg_recipients,
 
  296                     const std::vector<std::string> & gnupg_signatories,
 
  317                       const std::string &input,
 
  318                       const std::string & output,
 
  330                                    U_I compression_level,
 
  342                                U_I compression_level,
 
here is defined the classe used to manage catalogue of archives
 
class archive_version manages the version of the archive format
 
the base class for all entry that have a name
 
the catalogue class which gather all objects contained in a give archive
 
this is the interface class from which all other data transfer classes inherit
 
the arbitrary large positive integer class
 
manage label data structure used in archive slice headers
 
stores a stack of generic_files writing/reading on each others
 
stores a range of integers or a set of ranges
 
pipe implementation under the generic_file interface.
 
compression parameters for API
 
the crypto algoritm definition
 
defines the entrepot interface.
 
class generic_file is defined here as well as class fichier
 
hash_algo
hashing algorithm available
 
compression
the different compression algorithm available
 
crypto_algo
the different cypher available for encryption (strong or weak)
 
void macro_tools_create_layers(const std::shared_ptr< user_interaction > &dialog, pile &layers, header_version &ver, slice_layout &slicing, const slice_layout *ref_slicing, const std::shared_ptr< entrepot > &sauv_path_t, const std::string &filename, const std::string &extension, bool allow_over, bool warn_over, bool info_details, const infinint &pause, compression algo, U_I compression_level, U_I compression_block_size, const infinint &file_size, const infinint &first_file_size, const std::string &execute, crypto_algo crypto, const secu_string &pass, U_32 crypto_size, const std::vector< std::string > &gnupg_recipients, const std::vector< std::string > &gnupg_signatories, bool empty, const std::string &slice_permission, bool add_marks_for_sequential_reading, const std::string &user_comment, hash_algo hash, const infinint &slice_min_digits, const label &internal_name, const label &data_name, const infinint &iteration_count, hash_algo kdf_hash, U_I multi_threaded_crypto, U_I multi_threaded_compress)
build layers for a new archive
 
void macro_tools_close_layers(const std::shared_ptr< user_interaction > &dialog, pile &layers, const header_version &ver, const catalogue &cat, bool info_details, crypto_algo crypto, compression algo, const std::vector< std::string > &gnupg_recipients, const std::vector< std::string > &gnupg_signatories, bool empty)
dumps the catalogue and close all the archive layers to terminate the archive
 
range macro_tools_get_slices(const cat_nomme *obj, slice_layout sl)
gives the location of data EA and FSA (when they are saved) of the object given in argument
 
catalogue * macro_tools_read_catalogue(const std::shared_ptr< user_interaction > &dialog, const header_version &ver, const pile_descriptor &cata_pdesc, const infinint &cat_size, std::list< signator > &signatories, bool lax_mode, const label &lax_layer1_data_name, bool only_detruits)
read the catalogue from cata_stack assuming the cata_stack is positionned at the beginning of the are...
 
catalogue * macro_tools_get_catalogue_from(const std::shared_ptr< user_interaction > &dialog, pile &stack, const header_version &ver, bool info_details, infinint &cat_size, const infinint &second_terminateur_offset, std::list< signator > &signatories, bool lax_mode)
uses terminator to skip to the position where to find the catalogue and read it
 
void macro_tools_open_pipes(const std::shared_ptr< user_interaction > &dialog, const std::string &input, const std::string &output, tuyau *&in, tuyau *&out)
open a pair of tuyau objects encapsulating two named pipes.
 
catalogue * macro_tools_get_derivated_catalogue_from(const std::shared_ptr< user_interaction > &dialog, pile &data_stack, pile &cata_stack, const header_version &ver, bool info_details, infinint &cat_size, const infinint &second_terminateur_offset, std::list< signator > &signatories, bool lax_mode)
uses terminator to skip to the position where to find the catalogue and read it, taking care of havin...
 
proto_compressor * macro_tools_build_block_compressor(compression algo, generic_file &base, U_I compression_level, U_I num_workers, U_I block_size)
return a proto_compressor object realizing the desired (de)compression level/algo on to of "base" in ...
 
proto_compressor * macro_tools_build_streaming_compressor(compression algo, generic_file &base, U_I compression_level, U_I num_workers)
return a proto_compressor object realizing the desired (de)compression level/aglo on top of "base" in...
 
gf_mode
generic_file openning modes
 
trivial_sar * macro_tools_open_archive_tuyau(const std::shared_ptr< user_interaction > &dialog, S_I fd, gf_mode mode, const label &internal_name, const label &data_name, bool slice_header_format_07, const std::string &execute)
create an container to write an archive to a pipe
 
void macro_tools_open_archive(const std::shared_ptr< user_interaction > &dialog, const std::shared_ptr< entrepot > &where, const std::string &basename, const infinint &min_digits, const std::string &extension, crypto_algo crypto, const secu_string &pass, U_32 crypto_size, pile &stack, header_version &ver, const std::string &input_pipe, const std::string &output_pipe, const std::string &execute, infinint &second_terminateur_offset, bool lax, bool has_external_cat, bool sequential_read, bool info_details, std::list< signator > &gnupg_signed, slice_layout &sl, U_I multi_threaded_crypto, U_I multi_threaded_compress, bool header_only, bool silent, bool force_read_first_slice)
setup the given pile object to contain a stack of generic_files suitable to read an archive
 
switch module to limitint (32 ou 64 bits integers) or infinint
 
libdar namespace encapsulate all libdar symbols
 
class pile definition. Used to manage a stack of generic_file objects
 
abstracted ancestor class for compressor and parallel_compressor classes
 
class than provide a way to manipulate and represent range of integer numbers (infinint)
 
object describing the slicing of an archive
 
the trivial_sar classes manages the slicing layer when single slice is used
 
defines the implementation of pipe under the generic_file interface.