]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-method.cc
G++3 fixes from Randolph
[apt.git] / apt-pkg / acquire-method.cc
index 55d2b75c773f88f8146606a262e18e7c8bbbea6a..0ecd8df934568d9cfb3810ca424ae766d588ee26 100644 (file)
@@ -1,12 +1,12 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-method.cc,v 1.22 1999/11/16 03:16:34 jgg Exp $
+// $Id: acquire-method.cc,v 1.26 2001/03/13 06:51:46 jgg Exp $
 /* ######################################################################
 
    Acquire Method
 
    This is a skeleton class that implements most of the functionality
-   of a method and some usefull functions to make method implementation
+   of a method and some useful functions to make method implementation
    simpler. The methods all derive this and specialize it. The most
    complex implementation is the http method which needs to provide
    pipelining, it runs the message engine at the same time it is 
@@ -23,7 +23,9 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/fileutl.h>
-
+#include <apt-pkg/hashes.h>
+    
+#include <stdarg.h>
 #include <stdio.h>
 #include <unistd.h>
                                                                        /*}}}*/
@@ -52,6 +54,9 @@ pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags)
 
    if ((Flags & NeedsCleanup) == NeedsCleanup)
       strcat(End,"Needs-Cleanup: true\n");
+
+   if ((Flags & Removable) == Removable)
+      strcat(End,"Removable: true\n");
    strcat(End,"\n");
 
    if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
@@ -93,7 +98,8 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
    if (Queue != 0)
    {
       snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
-              "Message: %s\n",Queue->Uri.c_str(),Err.c_str());
+              "Message: %s %s\n",Queue->Uri.c_str(),Err.c_str(),
+              FailExtra.c_str());
 
       // Dequeue
       FetchItem *Tmp = Queue;
@@ -104,7 +110,8 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
    }
    else
       snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
-              "Message: %s\n",Err.c_str());
+              "Message: %s %s\n",Err.c_str(),
+              FailExtra.c_str());
       
    // Set the transient flag 
    if (Transient == true)
@@ -169,6 +176,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
 
    if (Res.MD5Sum.empty() == false)
       End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str());
+   if (Res.SHA1Sum.empty() == false)
+      End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
 
    if (Res.ResumePoint != 0)
       End += snprintf(End,sizeof(S)-50 - (End - S),"Resume-Point: %lu\n",
@@ -193,6 +202,9 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
       if (Alt->MD5Sum.empty() == false)
         End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-MD5-Hash: %s\n",
                         Alt->MD5Sum.c_str());
+      if (Alt->SHA1Sum.empty() == false)
+        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA1-Hash: %s\n",
+                        Alt->SHA1Sum.c_str());
       
       if (Alt->IMSHit == true)
         strcat(End,"Alt-IMS-Hit: true\n");
@@ -428,3 +440,13 @@ pkgAcqMethod::FetchResult::FetchResult() : LastModified(0),
 {
 }
                                                                        /*}}}*/
+// AcqMethod::FetchResult::TakeHashes - Load hashes                    /*{{{*/
+// ---------------------------------------------------------------------
+/* This hides the number of hashes we are supporting from the caller. 
+   It just deals with the hash class. */
+void pkgAcqMethod::FetchResult::TakeHashes(Hashes &Hash)
+{
+   MD5Sum = Hash.MD5.Result();
+   SHA1Sum = Hash.SHA1.Result();
+}
+                                                                       /*}}}*/