libzypp  17.22.0
downloader_p.h
Go to the documentation of this file.
1 #ifndef ZYPP_NG_MEDIA_HTTP_PRIVATE_DOWNLOADER_P_H_INCLUDED
2 #define ZYPP_NG_MEDIA_HTTP_PRIVATE_DOWNLOADER_P_H_INCLUDED
3 
8 #include <zypp/zyppng/media/network/TransferSettings>
11 
12 #include <deque>
13 
14 namespace zyppng {
15 
16  class NetworkRequestDispatcher;
17 
19  {
20  public:
22  DownloadPrivate ( Downloader &parent, std::shared_ptr<NetworkRequestDispatcher> requestDispatcher, Url &&file, zypp::filesystem::Pathname &&targetPath, zypp::ByteCount &&expectedFileSize );
23 
24  struct Request : public NetworkRequest {
25 
27  using Ptr = std::shared_ptr<Request>;
28  using WeakPtr = std::shared_ptr<Request>;
29 
30  void connectSignals ( DownloadPrivate &dl );
31  void disconnectSignals ();
32 
33  size_t _myBlock = -1;
34  int _retryCount = 0; //< how many times was this request restarted
35  bool _triedCredFromStore = false; //< already tried to authenticate from credential store?
36  Url _originalUrl; //< The unstripped URL as it was passed to Download , before transfer settings are removed
37 
38  connection _sigStartedConn;
39  connection _sigProgressConn;
40  connection _sigFinishedConn;
41  };
42 
43  //keep a list with failed blocks in case we run out of mirrors,
44  //in that case we can retry to download them once we have a finished download
45  struct FailedBlock {
46  size_t _block = -1;
47  int _retryCount = 0;
49  };
50  std::deque<FailedBlock> _failedBlocks;
51 
52  std::vector< std::shared_ptr<Request> > _runningRequests;
53  std::shared_ptr<NetworkRequestDispatcher> _requestDispatcher;
54 
59  std::string _errorString;
61 
63 
64  //data requires for multi part downloads
65  off_t _downloadedMultiByteCount = 0; //< the number of bytes that were already fetched in RunningMulti state
66  std::deque<Url> _multiPartMirrors;
68  size_t _blockIter = 0;
69 
70  Downloader *_parent = nullptr;
72 
73  bool _isMultiDownload = false; //< State flag, shows if we are currently downloading a multi part file
74  bool _isMultiPartEnabled = true; //< Enables/Disables automatic multipart downloads
75  bool _checkExistsOnly = false; //< Set to true if Downloader should only check if the URL exits
76 
77  signal<void ( Download &req )> _sigStarted;
78  signal<void ( Download &req, Download::State state )> _sigStateChanged;
79  signal<void ( Download &req, off_t dlnow )> _sigAlive;
80  signal<void ( Download &req, off_t dltotal, off_t dlnow )> _sigProgress;
81  signal<void ( Download &req )> _sigFinished;
82  signal<void ( zyppng::Download &req, zyppng::NetworkAuthData &auth, const std::string &availAuth )> _sigAuthRequired;
83 
84  private:
85  void start ();
86  void setState ( Download::State newState );
88  void onRequestProgress ( NetworkRequest &req, off_t dltotal, off_t dlnow, off_t, off_t );
89  void onRequestFinished ( NetworkRequest &req , const NetworkRequestError &err );
90  void addNewRequest (std::shared_ptr<Request> req );
91  std::shared_ptr<Request> initMultiRequest(size_t block , NetworkRequestError &err);
93  void setFailed ( std::string && reason );
94  void setFinished ( bool success = true );
96  };
97 
99  {
101  public:
103 
104  std::vector< std::shared_ptr<Download> > _runningDownloads;
105  std::shared_ptr<NetworkRequestDispatcher> _requestDispatcher;
106 
107  void onDownloadStarted ( Download &download );
108  void onDownloadFinished ( Download &download );
109 
110  signal<void ( Downloader &parent, Download& download )> _sigStarted;
111  signal<void ( Downloader &parent, Download& download )> _sigFinished;
112  signal<void ( Downloader &parent )> _queueEmpty;
113  };
114 
115 }
116 
117 #endif
void setFinished(bool success=true)
Definition: downloader.cc:648
The Downloader class.
Definition: downloader.h:34
void onRequestStarted(NetworkRequest &)
Definition: downloader.cc:132
std::deque< Url > _multiPartMirrors
Definition: downloader_p.h:66
signal< void(Downloader &parent, Download &download)> _sigFinished
Definition: downloader_p.h:111
std::weak_ptr< Base > WeakPtr
Definition: base.h:39
std::shared_ptr< Request > initMultiRequest(size_t block, NetworkRequestError &err)
Definition: downloader.cc:577
Download::State _state
Definition: downloader_p.h:71
Store and operate with byte count.
Definition: ByteCount.h:30
Holds transfer setting.
std::shared_ptr< NetworkRequestDispatcher > _requestDispatcher
Definition: downloader_p.h:105
std::vector< std::shared_ptr< Request > > _runningRequests
Definition: downloader_p.h:52
zypp::media::MediaBlockList _blockList
Definition: downloader_p.h:67
Url url
Definition: MediaCurl.cc:65
std::vector< std::shared_ptr< Download > > _runningDownloads
Definition: downloader_p.h:104
void setFailed(std::string &&reason)
Definition: downloader.cc:641
DownloadPrivate(Downloader &parent, std::shared_ptr< NetworkRequestDispatcher > requestDispatcher, Url &&file, zypp::filesystem::Pathname &&targetPath, zypp::ByteCount &&expectedFileSize)
Definition: downloader.cc:60
signal< void(Downloader &parent)> _queueEmpty
Definition: downloader_p.h:112
signal< void(Download &req, Download::State state)> _sigStateChanged
Definition: downloader_p.h:78
void onDownloadFinished(Download &download)
Definition: downloader.cc:787
std::shared_ptr< NetworkRequestDispatcher > _requestDispatcher
Definition: downloader_p.h:53
std::string _errorString
Definition: downloader_p.h:59
zypp::Pathname _deltaFilePath
Definition: downloader_p.h:57
void connectSignals(DownloadPrivate &dl)
Definition: downloader.cc:68
TransferSettings _transferSettings
Definition: downloader_p.h:62
The NetworkRequestError class Represents a error that occured in.
Base::WeakPtr parent
Definition: base_p.h:17
signal< void(Download &req, off_t dlnow)> _sigAlive
Definition: downloader_p.h:79
signal< void(Download &req, off_t dltotal, off_t dlnow)> _sigProgress
Definition: downloader_p.h:80
bool findNextMirror(Url &url, TransferSettings &set, NetworkRequestError &err)
Definition: downloader.cc:607
NetworkRequestError safeFillSettingsFromURL(const Url &url, TransferSettings &set)
Definition: downloader.cc:654
void onRequestFinished(NetworkRequest &req, const NetworkRequestError &err)
Definition: downloader.cc:192
signal< void(zyppng::Download &req, zyppng::NetworkAuthData &auth, const std::string &availAuth)> _sigAuthRequired
Definition: downloader_p.h:82
signal< void(Downloader &parent, Download &download)> _sigStarted
Definition: downloader_p.h:110
void setState(Download::State newState)
Definition: downloader.cc:124
signal< void(Download &req)> _sigStarted
Definition: downloader_p.h:77
void onDownloadStarted(Download &download)
Definition: downloader.cc:782
std::deque< FailedBlock > _failedBlocks
Definition: downloader_p.h:50
NetworkRequestError _requestError
Definition: downloader_p.h:60
NetworkRequestError _failedWithErr
Definition: downloader_p.h:48
zypp::ByteCount _expectedFileSize
Definition: downloader_p.h:58
signal< void(Download &req)> _sigFinished
Definition: downloader_p.h:81
zypp::filesystem::Pathname _targetPath
Definition: downloader_p.h:56
#define ZYPP_DECLARE_PUBLIC(Class)
Definition: zyppglobal.h:39
void addNewRequest(std::shared_ptr< Request > req)
Definition: downloader.cc:569
Url manipulation class.
Definition: Url.h:87
std::shared_ptr< Base > Ptr
Definition: base.h:38
NetworkRequest(Url url, zypp::Pathname targetFile, off_t start=-1, off_t len=0, FileMode fMode=WriteExclusive)
Definition: request.cc:486
void onRequestProgress(NetworkRequest &req, off_t dltotal, off_t dlnow, off_t, off_t)
Definition: downloader.cc:138