27#ifndef FICHIER_LIBCURL_HPP
28#define FICHIER_LIBCURL_HPP
43#ifdef LIBTHREADAR_AVAILABLE
44#include <libthreadar/libthreadar.hpp>
58#if defined ( LIBCURL_AVAILABLE ) && defined ( LIBTHREADAR_AVAILABLE )
62 class fichier_libcurl :
public fichier_global,
protected libthreadar::thread
67 fichier_libcurl(
const std::shared_ptr<user_interaction> & dialog,
68 const std::string & chemin,
69 mycurl_protocol proto,
70 const std::shared_ptr<mycurl_easyhandle_node> & handle,
73 bool force_permission,
80 fichier_libcurl(
const fichier_libcurl & ref) =
delete;
83 fichier_libcurl(fichier_libcurl && ref) =
delete;
87 fichier_libcurl & operator = (
const fichier_libcurl & ref) =
delete;
90 fichier_libcurl & operator = (fichier_libcurl && ref) =
delete;
93 ~fichier_libcurl() noexcept { kill(); join(); detruit(); };
96 virtual void change_permission(U_I perm)
override;
99 virtual void change_ownership(
const std::string & user,
const std::string & group)
override
100 {
throw Efeature(gettext(
"user/group ownership not supported for this repository")); };
103 virtual infinint get_size()
const override;
106 virtual void fadvise(advise adv)
const override {};
109 virtual bool skippable(skippability direction,
const infinint & amount)
override;
110 virtual bool skip(
const infinint & pos)
override;
111 virtual bool skip_to_eof()
override;
112 virtual bool skip_relative(S_I x)
override;
113 virtual bool truncatable(
const infinint & pos)
const override {
return pos == get_position(); };
114 virtual infinint get_position()
const override {
return current_offset; };
118 virtual void inherited_read_ahead(
const infinint & amount)
override;
119 virtual void inherited_truncate(
const infinint & pos)
override;
120 virtual void inherited_sync_write()
override;
121 virtual void inherited_flush_read()
override;
122 virtual void inherited_terminate()
override;
125 virtual U_I fichier_global_inherited_write(
const char *a, U_I size)
override;
126 virtual bool fichier_global_inherited_read(
char *a, U_I size, U_I & read, std::string & message)
override;
129 virtual void inherited_run()
override;
132 static const U_I tampon_size = CURL_MAX_WRITE_SIZE;
157 std::shared_ptr<mycurl_easyhandle_node> ehandle;
159 infinint current_offset;
165 infinint network_block;
166 infinint subthread_net_offset;
167 infinint subthread_cur_offset;
168 libthreadar::fast_tampon<char> interthread;
169 libthreadar::barrier synchronize;
170 mycurl_protocol x_proto;
172 void set_range(
const infinint & begin,
const infinint & range_size);
174 void switch_to_metadata(
bool mode);
178 void relaunch_thread(
const infinint & block_size);
179 void initialize_subthread();
180 void finalize_subthread();
181 void set_subthread(U_I & needed_bytes);
182 bool still_data_to_write();
184 static size_t write_data_callback(
char *buffer,
size_t size,
size_t nmemb,
void *userp);
185 static size_t read_data_callback(
char *bufptr,
size_t size,
size_t nitems,
void *userp);
186 static size_t write_meta_callback(
char *buffer,
size_t size,
size_t nmemb,
void *userp);
187 static size_t read_meta_callback(
char *bufptr,
size_t size,
size_t nitems,
void *userp);
class fichier_global definition. This class is a pure virtual class class fichier_global is an abstra...
are defined here basic integer types that tend to be portable
include macro defined by the configure script and some specific additional ones
used to optimize session creation done by libcurl
datastructure defining the network protocols available for entrepot_libcurl class
libdar namespace encapsulate all libdar symbols
defines the interaction interface between libdar and users.