27#ifndef FICHIER_LIBCURL_HPP 
   28#define FICHIER_LIBCURL_HPP 
   31#include "../my_config.h" 
   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,     
 
   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;
 
   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    bool sync_write_asked;            
 
  159    std::shared_ptr<mycurl_easyhandle_node> ehandle; 
 
  161    infinint current_offset;          
 
  167    infinint network_block;           
 
  168    infinint subthread_net_offset;    
 
  169    infinint subthread_cur_offset;    
 
  170    libthreadar::fast_tampon<char> interthread; 
 
  171    libthreadar::barrier synchronize; 
 
  174    void set_range(
const infinint & begin, 
const infinint & range_size); 
 
  176    void switch_to_metadata(
bool mode);
 
  179    void relaunch_thread(
const infinint & block_size); 
 
  180    void initialize_subthread(); 
 
  181    void finalize_subthread();   
 
  182    void set_subthread(U_I & needed_bytes); 
 
  183    bool still_data_to_write(); 
 
  185    static size_t write_data_callback(
char *buffer, 
size_t size, 
size_t nmemb, 
void *userp);
 
  186    static size_t read_data_callback(
char *bufptr, 
size_t size, 
size_t nitems, 
void *userp);
 
  187        static size_t write_meta_callback(
char *buffer, 
size_t size, 
size_t nmemb, 
void *userp);
 
  188    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...
 
remote_entrepot_type
type of entrepot to create
 
gf_mode
generic_file openning modes
 
are defined here basic integer types that tend to be portable
 
used to optimize session creation done by libcurl
 
libdar namespace encapsulate all libdar symbols
 
Libdar API to create entrepot objects.
 
defines the interaction interface between libdar and users.