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
zyppng::NetworkRequestPrivate::_reportedSize
off_t _reportedSize
Definition: request_p.h:50
zyppng::NetworkRequestPrivate::curlProgressCallback
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
zyppng::NetworkRequest::State
State
Definition: request.h:42
zyppng::NetworkRequestPrivate::_len
off_t _len
Definition: request_p.h:48
zyppng::BasePrivate
Definition: base_p.h:12
zyppng::NetworkRequestPrivate::onActivityTimeout
void onActivityTimeout(Timer &)
Definition: request.cc:389
zyppng::NetworkRequestPrivate::_start
off_t _start
Definition: request_p.h:47
zyppng::NetworkRequestPrivate::NetworkRequestPrivate
NetworkRequestPrivate(Url &&url, zypp::Pathname &&targetFile, off_t &&start, off_t &&len, NetworkRequest::FileMode fMode)
Definition: request.cc:36
zyppng::NetworkRequestPrivate::_easyHandle
void * _easyHandle
Definition: request_p.h:63
zyppng::NetworkRequestPrivate::_activityTimer
Timer::Ptr _activityTimer
Definition: request_p.h:66
zyppng::NetworkRequestPrivate::aboutToStart
void aboutToStart()
Definition: request.cc:328
zyppng::NetworkRequestPrivate::writeCallback
static size_t writeCallback(char *ptr, size_t size, size_t nmemb, void *userdata)
Definition: request.cc:423
zyppng::NetworkRequestPrivate::~NetworkRequestPrivate
virtual ~NetworkRequestPrivate()
Definition: request.cc:48
ZYPP_THROW
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:392
zyppng::NetworkRequest::Pending
Definition: request.h:43
zyppng::NetworkRequestPrivate::_currentCookieFile
std::string _currentCookieFile
Definition: request_p.h:45
zyppng::NetworkRequestPrivate::setCurlOption
void setCurlOption(CURLoption opt, T data)
Definition: request_p.h:30
zyppng::NetworkRequestPrivate::_fMode
NetworkRequest::FileMode _fMode
Definition: request_p.h:52
zyppng::NetworkRequestPrivate::_curlDebug
long _curlDebug
Definition: request_p.h:43
zypp::media::TransferSettings
Holds transfer setting.
Definition: TransferSettings.h:20
zyppng::NetworkRequestPrivate::initialize
bool initialize(std::string &errBuf)
Definition: request.cc:58
zyppng::NetworkRequestPrivate::setResult
void setResult(NetworkRequestError &&err)
Definition: request.cc:337
zyppng::NetworkRequestPrivate::_priority
NetworkRequest::Priority _priority
Definition: request_p.h:53
zyppng::NetworkRequest::Normal
Definition: request.h:50
zyppng::Timer::Ptr
std::shared_ptr< Timer > Ptr
Definition: timer.h:49
zyppng::NetworkRequestPrivate::_options
NetworkRequest::Options _options
Definition: request_p.h:41
zyppng::NetworkRequestPrivate::_outFile
FILE * _outFile
Definition: request_p.h:62
zyppng::NetworkRequestPrivate::_state
NetworkRequest::State _state
Definition: request_p.h:58
base_p.h
zyppng::NetworkRequestPrivate::_sigFinished
signal< void(NetworkRequest &req, const NetworkRequestError &err)> _sigFinished
Definition: request_p.h:71
MediaException.h
zyppng::Timer
The Timer class provides repetitive and single-shot timers.
Definition: timer.h:42
zyppng::NetworkRequestPrivate::_url
Url _url
Definition: request_p.h:38
zyppng::NetworkRequestPrivate::_result
NetworkRequestError _result
Definition: request_p.h:59
zyppng::NetworkRequestPrivate
Definition: request_p.h:15
request.h
zyppng::NetworkRequest::Priority
Priority
Definition: request.h:49
zyppng::NetworkRequestPrivate::_targetFile
zypp::Pathname _targetFile
Definition: request_p.h:39
zyppng::NetworkRequestPrivate::_sigStarted
signal< void(NetworkRequest &req)> _sigStarted
Definition: request_p.h:69
zyppng::NetworkRequestPrivate::_settings
TransferSettings _settings
Definition: request_p.h:40
zyppng::NetworkRequestPrivate::_errorBuf
std::array< char, CURL_ERROR_SIZE+1 > _errorBuf
Definition: request_p.h:60
zyppng::NetworkRequestPrivate::_digest
std::shared_ptr< zypp::Digest > _digest
Definition: request_p.h:55
zyppng::NetworkRequestPrivate::_downloaded
off_t _downloaded
Definition: request_p.h:49
zyppng::NetworkRequestError
The NetworkRequestError class Represents a error that occured in.
Definition: networkrequesterror.h:20
zyppng::NetworkRequestPrivate::_dispatcher
NetworkRequestDispatcher * _dispatcher
Definition: request_p.h:64
Digest.h
ZYPP_DECLARE_PUBLIC
#define ZYPP_DECLARE_PUBLIC(Class)
Definition: zyppglobal.h:39
zyppng::NetworkRequestPrivate::reset
void reset()
Definition: request.cc:371
zyppng::peek_data_fd
std::vector< char > peek_data_fd(FILE *fd, off_t offset, size_t count)
Definition: request.cc:18
zyppng::NetworkRequest::FileMode
FileMode
Definition: request.h:54
zypp::media::MediaCurlSetOptException
Definition: MediaException.h:362
zypp::filesystem::Pathname
Pathname.
Definition: Pathname.h:44
zyppng::NetworkRequestPrivate::_expectedChecksum
std::vector< unsigned char > _expectedChecksum
Definition: request_p.h:56
zyppng::NetworkRequest::WriteExclusive
Definition: request.h:55
zyppng::NetworkRequestPrivate::_expectRangeStatus
bool _expectRangeStatus
Definition: request_p.h:51
zyppng
Definition: abstracteventsource.cc:8
zyppng::NetworkRequest
Definition: request.h:35
zyppng::NetworkRequestPrivate::_headers
std::unique_ptr< curl_slist, decltype(&curl_slist_free_all) > _headers
Definition: request_p.h:76
url
Url url
Definition: MediaCurl.cc:65
zypp::Url
Url manipulation class.
Definition: Url.h:87
zyppng::NetworkRequestPrivate::_sigProgress
signal< void(NetworkRequest &req, off_t dltotal, off_t dlnow, off_t ultotal, off_t ulnow)> _sigProgress
Definition: request_p.h:70
zyppng::NetworkRequestPrivate::_lastRedirect
std::string _lastRedirect
to log/report redirections
Definition: request_p.h:44