libzypp  11.13.5
MediaMultiCurl.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_MEDIA_MEDIAMULTICURL_H
13 #define ZYPP_MEDIA_MEDIAMULTICURL_H
14 
15 #include <string>
16 #include <vector>
17 #include <list>
18 #include <set>
19 
21 #include "zypp/media/MediaCurl.h"
24 #include "zypp/ZYppCallbacks.h"
25 
26 namespace zypp {
27  namespace media {
28 
37 class multifetchrequest;
38 class multifetchworker;
39 
40 class MediaMultiCurl : public MediaCurl {
41 public:
42  friend class multifetchrequest;
43  friend class multifetchworker;
44 
45  MediaMultiCurl(const Url &url_r, const Pathname & attach_point_hint_r);
47 
48  virtual void doGetFileCopy( const Pathname & srcFilename, const Pathname & targetFilename, callback::SendReport<DownloadProgressReport> & _report, RequestOptions options = OPTION_NONE ) const;
49 
50  void multifetch(const Pathname &filename, FILE *fp, std::vector<Url> *urllist, callback::SendReport<DownloadProgressReport> *report = 0, MediaBlockList *blklist = 0, off_t filesize = off_t(-1)) const;
51 
52 protected:
53 
54  bool isDNSok(const std::string &host) const;
55  void setDNSok(const std::string &host) const;
56 
57  CURL *fromEasyPool(const std::string &host) const;
58  void toEasyPool(const std::string &host, CURL *easy) const;
59 
60  virtual void setupEasy();
61  void checkFileDigest(Url &url, FILE *fp, MediaBlockList *blklist) const;
62 
63 private:
64  // the custom headers from MediaCurl plus a "Accept: metalink" header
66  mutable CURLM *_multi; // reused for all fetches so we can make use of the dns cache
67  mutable std::set<std::string> _dnsok;
68  mutable std::map<std::string, CURL *> _easypool;
69 };
70 
72 
73  } // namespace media
74 } // namespace zypp
75 
76 #endif // ZYPP_MEDIA_MEDIAMULTICURL_H