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);
115 const std::shared_ptr<entrepot> & where,
116 const std::string &basename,
118 const std::string &extension,
124 const std::string &input_pipe,
125 const std::string &output_pipe,
126 const std::string & execute,
127 infinint & second_terminateur_offset,
129 bool has_external_cat,
130 bool sequential_read,
132 std::list<signator> & gnupg_signed,
146 const infinint & second_terminateur_offset,
147 std::list<signator> & signatories,
156 const infinint & second_terminateur_offset,
157 std::list<signator> & signatories,
163 const pile_descriptor & cata_pdesc,
165 std::list<signator> & signatories,
167 const label & lax_layer1_data_name,
170 extern catalogue *macro_tools_lax_search_catalogue(
const std::shared_ptr<user_interaction> & dialog,
175 bool even_partial_catalogues,
176 const label & layer1_data_name);
245 slice_layout & slicing,
246 const slice_layout *ref_slicing,
247 const std::shared_ptr<entrepot> & sauv_path_t,
248 const std::string & filename,
249 const std::string & extension,
255 U_I compression_level,
258 const std::string & execute,
262 const std::vector<std::string> & gnupg_recipients,
263 const std::vector<std::string> & gnupg_signatories,
265 const std::string & slice_permission,
266 bool add_marks_for_sequential_reading,
267 const std::string & user_comment,
270 const label & internal_name,
271 const label & data_name,
274 bool multi_threaded);
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,
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. Entrepot interface defines a generic way to interact with files (slic...
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)
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_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
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, 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, bool multi_threaded)
build layers for a new 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
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_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_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_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...
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, bool multi_threaded, bool header_only)
setup the given pile object to contain a stack of generic_files suitable to read an archive
gf_mode
generic_file openning modes
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
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.