libzypp  17.22.0
request_p.h
Go to the documentation of this file.
1 #ifndef ZYPP_NG_MEDIA_CURL_PRIVATE_REQUEST_P_H_INCLUDED
2 #define ZYPP_NG_MEDIA_CURL_PRIVATE_REQUEST_P_H_INCLUDED
3 
7 #include <zypp/zyppng/base/Timer>
8 #include <curl/curl.h>
9 #include <array>
10 #include <memory>
11 #include <zypp/Digest.h>
12 
13 namespace zyppng {
14 
16  {
17  public:
19 
20  NetworkRequestPrivate( Url &&url, zypp::Pathname &&targetFile, off_t &&start, off_t &&len, NetworkRequest::FileMode fMode );
21  virtual ~NetworkRequestPrivate();
22 
23  bool initialize(std::string &errBuf );
24  void aboutToStart ();
25  void setResult ( NetworkRequestError &&err );
26  void reset ();
27  void onActivityTimeout (Timer &);
28 
29  template<typename T>
30  void setCurlOption ( CURLoption opt, T data )
31  {
32  auto ret = curl_easy_setopt( _easyHandle, opt, data );
33  if ( ret != 0 ) {
35  }
36  }
37 
38  Url _url; //file URL
39  zypp::Pathname _targetFile; //target file
41  NetworkRequest::Options _options;
42 
43  long _curlDebug = 0L;
44  std::string _lastRedirect;
45  std::string _currentCookieFile = "/var/lib/YaST2/cookies";
46 
47  off_t _start = -1; //start offset of block to request
48  off_t _len = 0; //len of block to request ( 0 if full length
49  off_t _downloaded = -1; //downloaded bytes
50  off_t _reportedSize = 0; //size reported by the curl backend
51  bool _expectRangeStatus = false;
54 
55  std::shared_ptr<zypp::Digest> _digest; //digest to be used to calculate checksum
56  std::vector<unsigned char> _expectedChecksum; //checksum to be expected after download is finished
57 
60  std::array<char, CURL_ERROR_SIZE+1> _errorBuf; //provide a buffer for a nicely formatted error
61 
62  FILE *_outFile = nullptr;
63  void *_easyHandle = nullptr; // the easy handle that controlling this request
64  NetworkRequestDispatcher *_dispatcher = nullptr; // the parent downloader owning this request
65 
67 
68  //signals
69  signal<void ( NetworkRequest &req )> _sigStarted;
70  signal<void ( NetworkRequest &req, off_t dltotal, off_t dlnow, off_t ultotal, off_t ulnow )> _sigProgress;
71  signal<void ( NetworkRequest &req, const NetworkRequestError &err )> _sigFinished;
72 
73  static int curlProgressCallback ( void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow );
74  static size_t writeCallback ( char *ptr, size_t size, size_t nmemb, void *userdata );
75 
76  std::unique_ptr< curl_slist, decltype (&curl_slist_free_all) > _headers;
77  };
78 
79  std::vector<char> peek_data_fd ( FILE *fd, off_t offset, size_t count );
80 }
81 
82 #endif
NetworkRequest::Priority _priority
Definition: request_p.h:53
void setCurlOption(CURLoption opt, T data)
Definition: request_p.h:30
std::array< char, CURL_ERROR_SIZE+1 > _errorBuf
Definition: request_p.h:60
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:392
NetworkRequest::FileMode _fMode
Definition: request_p.h:52
signal< void(NetworkRequest &req, off_t dltotal, off_t dlnow, off_t ultotal, off_t ulnow)> _sigProgress
Definition: request_p.h:70
Holds transfer setting.
static size_t writeCallback(char *ptr, size_t size, size_t nmemb, void *userdata)
Definition: request.cc:423
NetworkRequest::Options _options
Definition: request_p.h:41
NetworkRequest::State _state
Definition: request_p.h:58
NetworkRequestPrivate(Url &&url, zypp::Pathname &&targetFile, off_t &&start, off_t &&len, NetworkRequest::FileMode fMode)
Definition: request.cc:36
Url url
Definition: MediaCurl.cc:65
signal< void(NetworkRequest &req)> _sigStarted
Definition: request_p.h:69
void onActivityTimeout(Timer &)
Definition: request.cc:389
zypp::Pathname _targetFile
Definition: request_p.h:39
virtual ~NetworkRequestPrivate()
Definition: request.cc:48
std::vector< unsigned char > _expectedChecksum
Definition: request_p.h:56
bool initialize(std::string &errBuf)
Definition: request.cc:58
The NetworkRequestError class Represents a error that occured in.
The Timer class provides repetitive and single-shot timers.
Definition: timer.h:42
std::shared_ptr< zypp::Digest > _digest
Definition: request_p.h:55
std::unique_ptr< curl_slist, decltype(&curl_slist_free_all) > _headers
Definition: request_p.h:76
std::shared_ptr< Timer > Ptr
Definition: timer.h:49
std::vector< char > peek_data_fd(FILE *fd, off_t offset, size_t count)
Definition: request.cc:18
static int curlProgressCallback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
Definition: request.cc:397
NetworkRequestError _result
Definition: request_p.h:59
std::string _lastRedirect
to log/report redirections
Definition: request_p.h:44
signal< void(NetworkRequest &req, const NetworkRequestError &err)> _sigFinished
Definition: request_p.h:71
TransferSettings _settings
Definition: request_p.h:40
NetworkRequestDispatcher * _dispatcher
Definition: request_p.h:64
std::string _currentCookieFile
Definition: request_p.h:45
#define ZYPP_DECLARE_PUBLIC(Class)
Definition: zyppglobal.h:39
void setResult(NetworkRequestError &&err)
Definition: request.cc:337
Url manipulation class.
Definition: Url.h:87