libzypp  14.32.0
Downloader.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 
10 #include <fstream>
11 #include "zypp/base/String.h"
12 #include "zypp/base/Logger.h"
13 #include "zypp/base/Gettext.h"
14 
15 #include "Downloader.h"
16 #include "zypp/KeyContext.h"
17 #include "zypp/ZYppCallbacks.h"
18 
19 using namespace std;
20 
21 namespace zypp
22 {
23 namespace repo
24 {
25 
26 Downloader::Downloader()
27 {
28 }
29 Downloader::Downloader(const RepoInfo & repoinfo) : _repoinfo(repoinfo)
30 {
31 }
33 {
34 }
35 
37 {
38  WAR << "Non implemented" << endl;
39  return RepoStatus();
40 }
41 
43  const Pathname &dest_dir,
44  const ProgressData::ReceiverFnc & progress )
45 {
46  WAR << "Non implemented" << endl;
47 }
48 
49 void Downloader::defaultDownloadMasterIndex( MediaSetAccess & media_r, const Pathname & destdir_r, const Pathname & masterIndex_r )
50 {
51  Pathname sigpath = masterIndex_r.extend( ".asc" );
52  Pathname keypath = masterIndex_r.extend( ".key" );
53 
54  SignatureFileChecker sigchecker;
55 
56  enqueue( OnMediaLocation( sigpath, 1 ).setOptional( true ) );
57  start( destdir_r, media_r );
58  reset();
59 
60  // only add the signature if it exists
61  if ( PathInfo(destdir_r / sigpath).isExist() )
62  sigchecker = SignatureFileChecker( destdir_r / sigpath );
63 
64  enqueue( OnMediaLocation( keypath, 1 ).setOptional( true ) );
65  start( destdir_r, media_r );
66  reset();
67 
68  KeyContext context;
69  context.setRepoInfo( repoInfo() );
70  // only add the key if it exists
71  if ( PathInfo(destdir_r / keypath).isExist() )
72  sigchecker.addPublicKey( destdir_r / keypath, context );
73  else
74  // set the checker context even if the key is not known (unsigned repo, key
75  // file missing; bnc #495977)
76  sigchecker.setKeyContext( context );
77 
78  if ( ! repoInfo().gpgCheck() )
79  {
80  WAR << "Signature checking disabled in config of repository " << repoInfo().alias() << endl;
81  }
82  enqueue( OnMediaLocation( masterIndex_r, 1 ),
83  repoInfo().gpgCheck() ? FileChecker(sigchecker) : FileChecker(NullFileChecker()) );
84  start( destdir_r, media_r );
85  reset();
86 }
87 
88 
89 }// ns repo
90 } // ns zypp
91 
92 
93 
Interface to gettext.
Checks for nothing Used as the default checker.
Definition: FileChecker.h:135
std::string alias() const
unique identifier for this source.
void defaultDownloadMasterIndex(MediaSetAccess &media_r, const Pathname &destdir_r, const Pathname &masterIndex_r)
Common workflow downloading a (signed) master index file.
Definition: Downloader.cc:49
Describes a path on a certain media amongs as the information required to download it...
Checks for the validity of a signature.
Definition: FileChecker.h:85
Definition: Arch.h:330
What is known about a repository.
Definition: RepoInfo.h:67
const RepoInfo & repoInfo() const
Definition: Downloader.h:58
function< bool(const ProgressData &)> ReceiverFnc
Most simple version of progress reporting The percentage in most cases.
Definition: ProgressData.h:139
void addPublicKey(const PublicKey &publickey, const KeyContext &keycontext=KeyContext())
add a public key to the list of known keys
Definition: FileChecker.cc:114
void reset()
Reset the transfer (jobs) list.
Definition: Fetcher.cc:907
#define WAR
Definition: Logger.h:48
void start(const Pathname &dest_dir, MediaSetAccess &media, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
start the transfer to a destination directory dest_dir You have to provde a media set access media to...
Definition: Fetcher.cc:912
virtual void download(MediaSetAccess &media, const Pathname &dest_dir, const ProgressData::ReceiverFnc &progress=ProgressData::ReceiverFnc())
Download metadata to a local directory.
Definition: Downloader.cc:42
Track changing files or directories.
Definition: RepoStatus.h:38
function< void(const Pathname &file)> FileChecker
Functor signature used to check files.
Definition: FileChecker.h:27
virtual RepoStatus status(MediaSetAccess &media)
Status of the remote repository.
Definition: Downloader.cc:36
void setRepoInfo(const RepoInfo &repoinfo)
Definition: KeyContext.h:16
void enqueue(const OnMediaLocation &resource, const FileChecker &checker=FileChecker())
Enqueue a object for transferal, they will not be transferred until start() is called.
Definition: Fetcher.cc:897
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
Media access layer responsible for handling files distributed on a set of media with media change and...
void setKeyContext(const KeyContext &keycontext)
Set context for this checker.
Definition: FileChecker.cc:108