mirror.cc 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // -*- mode: cpp; mode: fold -*-
  2. // Description /*{{{*/
  3. // $Id: mirror.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $
  4. /* ######################################################################
  5. Mirror Aquire Method - This is the Mirror aquire method for APT.
  6. ##################################################################### */
  7. /*}}}*/
  8. // Include Files /*{{{*/
  9. #include <apt-pkg/fileutl.h>
  10. #include <apt-pkg/acquire-method.h>
  11. #include <apt-pkg/acquire-item.h>
  12. #include <apt-pkg/acquire.h>
  13. #include <apt-pkg/error.h>
  14. #include <apt-pkg/hashes.h>
  15. #include <fstream>
  16. #include <iostream>
  17. using namespace std;
  18. #include "mirror.h"
  19. #include "http.h"
  20. /*}}}*/
  21. MirrorMethod::MirrorMethod()
  22. : pkgAcqMethod("1.2",Pipeline | SendConfig), HasMirrorFile(false)
  23. {
  24. #if 0
  25. HasMirrorFile=true;
  26. BaseUri="http://people.ubuntu.com/~mvo/mirror/mirrors///";
  27. Mirror="http://de.archive.ubuntu.com/ubuntu/";
  28. #endif
  29. };
  30. bool MirrorMethod::GetMirrorFile(string uri)
  31. {
  32. string Marker = _config->Find("Acquire::Mirror::MagicMarker","///");
  33. BaseUri = uri.substr(0,uri.find(Marker));
  34. BaseUri.replace(0,strlen("mirror://"),"http://");
  35. MirrorFile = _config->FindDir("Dir::State::lists") + URItoFileName(BaseUri);
  36. cerr << "base-uri: " << BaseUri << endl;
  37. cerr << "mirror-file: " << MirrorFile << endl;
  38. // FIXME: fetch it with curl
  39. pkgAcquire Fetcher;
  40. new pkgAcqFile(&Fetcher, BaseUri, "", 0, "", "", "", MirrorFile);
  41. bool res = (Fetcher.Run() == pkgAcquire::Continue);
  42. cerr << "fetch-result: " << res << endl;
  43. if(res)
  44. HasMirrorFile = true;
  45. Fetcher.Shutdown();
  46. return true;
  47. }
  48. bool MirrorMethod::SelectMirror()
  49. {
  50. ifstream in(MirrorFile.c_str());
  51. getline(in, Mirror);
  52. cerr << "Mirror: " << Mirror << endl;
  53. }
  54. // MirrorMethod::Fetch - Fetch an item /*{{{*/
  55. // ---------------------------------------------------------------------
  56. /* This adds an item to the pipeline. We keep the pipeline at a fixed
  57. depth. */
  58. bool MirrorMethod::Fetch(FetchItem *Itm)
  59. {
  60. // get mirror information
  61. if(!HasMirrorFile)
  62. {
  63. GetMirrorFile(Itm->Uri);
  64. SelectMirror();
  65. }
  66. // change the items in the queue
  67. Itm->Uri.replace(0,BaseUri.size()+_config->Find("Acquire::Mirror::MagicMarker","///").size()+2/*len("mirror")-len("http")*/,Mirror);
  68. cerr << "new Fetch-uri: " << Itm->Uri << endl;
  69. // FIXME: fetch it with!
  70. };
  71. int main()
  72. {
  73. setlocale(LC_ALL, "");
  74. MirrorMethod Mth;
  75. return Mth.Run();
  76. }