From 7890c5a25610ef6e35a6128d770fc1d0a783c085 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gerard=20Farr=C3=A0s?= Date: Tue, 22 Jul 2008 06:36:07 +0000 Subject: [PATCH] MediaMetalink handler than uses libmetalink to process first .metalink files --- devel/devel.gfarrasb/MediaMetalink.h | 142 +++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 devel/devel.gfarrasb/MediaMetalink.h diff --git a/devel/devel.gfarrasb/MediaMetalink.h b/devel/devel.gfarrasb/MediaMetalink.h new file mode 100644 index 0000000..ad8fce1 --- /dev/null +++ b/devel/devel.gfarrasb/MediaMetalink.h @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/media/MediaMetalink.h + * +*/ +#ifndef ZYPP_MEDIA_MEDIAMETALINK_H +#define ZYPP_MEDIA_MEDIAMETALINK_H + +#include "zypp/media/MediaHandler.h" +#include "zypp/ZYppCallbacks.h" + +#include + +extern "C" { + #include + } + +namespace zypp { + namespace media { + +/////////////////////////////////////////////////////////////////// +// +// CLASS NAME : MediaMetalink +/** + * @short Implementation class for FTP, HTTP and HTTPS MediaHandler + * @see MediaHandler + **/ +class MediaMetalink : public MediaHandler { + + protected: + + virtual void attachTo (bool next = false); + virtual void releaseFrom( const std::string & ejectDev ); + virtual void getFile( const Pathname & filename ) const; + virtual void getDir( const Pathname & dirname, bool recurse_r ) const; + virtual void getDirInfo( std::list & retlist, + const Pathname & dirname, bool dots = true ) const; + virtual void getDirInfo( filesystem::DirContent & retlist, + const Pathname & dirname, bool dots = true ) const; + /** + * Repeatedly calls doGetDoesFileExist() until it successfully returns, + * fails unexpectedly, or user cancels the operation. This is used to + * handle authentication or similar retry scenarios on media level. + */ + virtual bool getDoesFileExist( const Pathname & filename ) const; + + /** + * \see MediaHandler::getDoesFileExist + */ + virtual bool doGetDoesFileExist( const Pathname & filename ) const; + + /** + * + * \throws MediaException + * + */ + virtual void disconnectFrom(); + /** + * + * \throws MediaException + * + */ + virtual void getFileCopy( const Pathname & srcFilename, const Pathname & targetFilename) const; + + /** + * + * \throws MediaException + * + */ + virtual void doGetFileCopy( const Pathname & srcFilename, const Pathname & targetFilename, callback::SendReport & _report) const; + + + bool doGetMetalinkFileCopy( const Pathname & filename , const Pathname & target, callback::SendReport & report) const; + bool getMetalinkFileCopy( const Pathname & filename , const Pathname & target) const; + + + virtual bool checkAttachPoint(const Pathname &apoint) const; + + public: + + MediaMetalink( const Url & url_r, + const Pathname & attach_point_hint_r ); + + virtual ~MediaMetalink() { try { release(); } catch(...) {} } + + static void setCookieFile( const Pathname & ); + + class Callbacks + { + public: + virtual ~Callbacks() {} + virtual bool progress( int percent ) = 0; + }; + + protected: + + static int progressCallback( void *clientp, double dltotal, double dlnow, + double ultotal, double ulnow ); + + /** The user agent string */ + static const char *const agentString(); + + private: + /** + * Return a comma separated list of available authentication methods + * supported by server. + */ + std::string getAuthHint() const; + + private: + CURL *_curl; + char _curlError[ CURL_ERROR_SIZE ]; + long _curlDebug; + + mutable std::string _userpwd; + std::string _proxy; + std::string _proxyuserpwd; + std::string _currentCookieFile; + std::string _ca_path; + long _xfer_timeout; + + static Pathname _cookieFile; + + + public: + mutable Url alternativeUrl[100]; + mutable int numberofmirrors; + mutable int mirrortotry; +}; + +/////////////////////////////////////////////////////////////////// + + } // namespace media +} // namespace zypp + +#endif // ZYPP_MEDIA_MEDIAMETALINK_H -- 2.7.4