summaryrefslogtreecommitdiff
path: root/methods/mirror.h
blob: bd807e1227c0f84b4bf92bf24753337541f2d88b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// -*- mode: cpp; mode: fold -*-
// Description								/*{{{*/// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
/* ######################################################################

   MIRROR Aquire Method - This is the MIRROR aquire method for APT.

   ##################################################################### */
									/*}}}*/

#ifndef APT_MIRROR_H
#define APT_MIRROR_H


#include <iostream>

using std::cout;
using std::cerr;
using std::endl;

#include "http.h"

class MirrorMethod : public HttpMethod
{
   FetchResult Res;
   // we simply transform between BaseUri and Mirror
   string BaseUri;    // the original mirror://... url
   string Mirror;     // the selected mirror uri (http://...)
   vector<string> AllMirrors; // all available mirrors
   string MirrorFile; // the file that contains the list of mirrors
   bool DownloadedMirrorFile; // already downloaded this session

   bool Debug;

 protected:
   bool DownloadMirrorFile(string uri);
   bool RandomizeMirrorFile(string file);
   string GetMirrorFileName(string uri);
   bool InitMirrors();
   bool TryNextMirror();
   void CurrentQueueUriToMirror();
   bool Clean(string dir);
   
   // we need to overwrite those to transform the url back
   virtual void Fail(string Why, bool Transient = false);
   virtual void URIStart(FetchResult &Res);
   virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0);
   virtual bool Configuration(string Message);

 public:
   MirrorMethod();
   virtual bool Fetch(FetchItem *Itm);
};


#endif