libzypp  13.10.6
MediaCurl.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_MEDIA_MEDIACURL_H
13 #define ZYPP_MEDIA_MEDIACURL_H
14 
15 #include "zypp/base/Flags.h"
18 #include "zypp/ZYppCallbacks.h"
19 
20 #include <curl/curl.h>
21 
22 namespace zypp {
23  namespace media {
24 
26 //
27 // CLASS NAME : MediaCurl
32 class MediaCurl : public MediaHandler
33 {
34  public:
36  {
38  OPTION_NONE = 0x0,
40  OPTION_RANGE = 0x1,
42  OPTION_HEAD = 0x02,
47  };
48  ZYPP_DECLARE_FLAGS(RequestOptions,RequestOption);
49 
50  protected:
51 
52  Url clearQueryString(const Url &url) const;
53 
54  virtual void attachTo (bool next = false);
55  virtual void releaseFrom( const std::string & ejectDev );
56  virtual void getFile( const Pathname & filename ) const;
57  virtual void getDir( const Pathname & dirname, bool recurse_r ) const;
58  virtual void getDirInfo( std::list<std::string> & retlist,
59  const Pathname & dirname, bool dots = true ) const;
60  virtual void getDirInfo( filesystem::DirContent & retlist,
61  const Pathname & dirname, bool dots = true ) const;
67  virtual bool getDoesFileExist( const Pathname & filename ) const;
68 
72  virtual bool doGetDoesFileExist( const Pathname & filename ) const;
73 
79  virtual void disconnectFrom();
85  virtual void getFileCopy( const Pathname & srcFilename, const Pathname & targetFilename) const;
86 
92  virtual void doGetFileCopy( const Pathname & srcFilename, const Pathname & targetFilename, callback::SendReport<DownloadProgressReport> & _report, RequestOptions options = OPTION_NONE ) const;
93 
94 
95  virtual bool checkAttachPoint(const Pathname &apoint) const;
96 
97  public:
98 
99  MediaCurl( const Url & url_r,
100  const Pathname & attach_point_hint_r );
101 
102  virtual ~MediaCurl() { try { release(); } catch(...) {} }
103 
105 
106  static void setCookieFile( const Pathname & );
107 
108  class Callbacks
109  {
110  public:
111  virtual ~Callbacks() {}
112  virtual bool progress( int percent ) = 0;
113  };
114 
115  protected:
116 
117  static int progressCallback( void *clientp, double dltotal, double dlnow,
118  double ultotal, double ulnow );
119  static CURL *progressCallback_getcurl( void *clientp );
124  void checkProtocol(const Url &url) const;
125 
130  virtual void setupEasy();
135  Url getFileUrl(const Pathname & filename) const;
136 
149  void evaluateCurlCode( const zypp::Pathname &filename, CURLcode code, bool timeout ) const;
150 
151  void doGetFileCopyFile( const Pathname & srcFilename, const Pathname & dest, FILE *file, callback::SendReport<DownloadProgressReport> & _report, RequestOptions options = OPTION_NONE ) const;
152 
153  private:
158  std::string getAuthHint() const;
159 
160  bool authenticate(const std::string & availAuthTypes, bool firstTry) const;
161 
162  bool detectDirIndex() const;
163 
164  private:
166 
167  std::string _currentCookieFile;
168  static Pathname _cookieFile;
169 
170  protected:
171  CURL *_curl;
172  char _curlError[ CURL_ERROR_SIZE ];
173  curl_slist *_customHeaders;
175 };
176 ZYPP_DECLARE_OPERATORS_FOR_FLAGS(MediaCurl::RequestOptions);
177 
179 
180  } // namespace media
181 } // namespace zypp
182 
183 #endif // ZYPP_MEDIA_MEDIACURL_H
void checkProtocol(const Url &url) const
check the url is supported by the curl library
Definition: MediaCurl.cc:527
bool authenticate(const std::string &availAuthTypes, bool firstTry) const
Definition: MediaCurl.cc:1666
virtual void releaseFrom(const std::string &ejectDev)
Call concrete handler to release the media.
Definition: MediaCurl.cc:845
Implementation class for FTP, HTTP and HTTPS MediaHandler.
Definition: MediaCurl.h:32
to not add a IFMODSINCE header if target exists
Definition: MediaCurl.h:44
TransferSettings & settings()
Definition: MediaCurl.cc:514
Holds transfer setting.
Url clearQueryString(const Url &url) const
Definition: MediaCurl.cc:492
static int progressCallback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
Definition: MediaCurl.cc:1547
virtual void setupEasy()
initializes the curl easy handle with the data from the url
Definition: MediaCurl.cc:552
std::string _currentCookieFile
Definition: MediaCurl.h:167
virtual void getFile(const Pathname &filename) const
Call concrete handler to provide file below attach point.
Definition: MediaCurl.cc:878
MediaCurl(const Url &url_r, const Pathname &attach_point_hint_r)
Definition: MediaCurl.cc:456
static void setCookieFile(const Pathname &)
Definition: MediaCurl.cc:520
std::string getAuthHint() const
Return a comma separated list of available authentication methods supported by server.
Definition: MediaCurl.cc:1649
virtual bool progress(int percent)=0
void doGetFileCopyFile(const Pathname &srcFilename, const Pathname &dest, FILE *file, callback::SendReport< DownloadProgressReport > &_report, RequestOptions options=OPTION_NONE) const
Definition: MediaCurl.cc:1396
Abstract base class for &#39;physical&#39; MediaHandler like MediaCD, etc.
Definition: MediaHandler.h:45
virtual bool getDoesFileExist(const Pathname &filename) const
Repeatedly calls doGetDoesFileExist() until it successfully returns, fails unexpectedly, or user cancels the operation.
Definition: MediaCurl.cc:928
long timeout
Definition: MediaCurl.cc:176
do not send a start ProgressReport
Definition: MediaCurl.h:46
only issue a HEAD (or equivalent) request
Definition: MediaCurl.h:42
TransferSettings _settings
Definition: MediaCurl.h:174
std::list< DirEntry > DirContent
Returned by readdir.
Definition: PathInfo.h:544
ZYPP_DECLARE_FLAGS(RequestOptions, RequestOption)
virtual bool checkAttachPoint(const Pathname &apoint) const
Verify if the specified directory as attach point (root) as requires by the particular media handler ...
Definition: MediaCurl.cc:821
virtual void getDir(const Pathname &dirname, bool recurse_r) const
Call concrete handler to provide directory content (not recursive!) below attach point.
Definition: MediaCurl.cc:1498
virtual void disconnectFrom()
Definition: MediaCurl.cc:828
bool detectDirIndex() const
retrieve only a range of the file
Definition: MediaCurl.h:40
curl_slist * _customHeaders
Definition: MediaCurl.h:173
Url getFileUrl(const Pathname &filename) const
concatenate the attach url and the filename to a complete download url
Definition: MediaCurl.cc:850
virtual void getDirInfo(std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
Call concrete handler to provide a content list of directory on media via retlist.
Definition: MediaCurl.cc:1531
static CURL * progressCallback_getcurl(void *clientp)
Definition: MediaCurl.cc:1641
ZYPP_DECLARE_OPERATORS_FOR_FLAGS(MediaCurl::RequestOptions)
virtual void attachTo(bool next=false)
Call concrete handler to attach the media.
Definition: MediaCurl.cc:781
virtual void getFileCopy(const Pathname &srcFilename, const Pathname &targetFilename) const
Definition: MediaCurl.cc:887
virtual void doGetFileCopy(const Pathname &srcFilename, const Pathname &targetFilename, callback::SendReport< DownloadProgressReport > &_report, RequestOptions options=OPTION_NONE) const
Definition: MediaCurl.cc:1282
static Pathname _cookieFile
Definition: MediaCurl.h:168
virtual bool doGetDoesFileExist(const Pathname &filename) const
Definition: MediaCurl.cc:1092
void release(const std::string &ejectDev="")
Use concrete handler to release the media.
char _curlError[CURL_ERROR_SIZE]
Definition: MediaCurl.h:172
void evaluateCurlCode(const zypp::Pathname &filename, CURLcode code, bool timeout) const
Evaluates a curl return code and throws the right MediaException filename Filename being downloaded c...
Definition: MediaCurl.cc:959
Url url() const
Url used.
Definition: MediaHandler.h:506
Url manipulation class.
Definition: Url.h:87