Procházet zdrojové kódy

add ftp expected size check

Michael Vogt před 11 roky
rodič
revize
5b33fab8c9
3 změnil soubory, kde provedl 8 přidání a 5 odebrání
  1. 7 3
      methods/ftp.cc
  2. 1 1
      methods/ftp.h
  3. 0 1
      methods/https.cc

+ 7 - 3
methods/ftp.cc

@@ -849,7 +849,7 @@ bool FTPConn::Finalize()
 /* This opens a data connection, sends REST and RETR and then
    transfers the file over. */
 bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
-		  Hashes &Hash,bool &Missing)
+		  Hashes &Hash,bool &Missing, unsigned long long ExpectedSize)
 {
    Missing = false;
    if (CreateDataFd() == false)
@@ -922,7 +922,11 @@ bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
       {
 	 Close();
 	 return false;
-      }      
+      }
+
+      if (ExpectedSize > 0 && To.Tell() > ExpectedSize)
+         return _error->Error("Writing more data than expected (%llu > %llu)",
+                              To.Tell(), ExpectedSize);
    }
 
    // All done
@@ -1063,7 +1067,7 @@ bool FtpMethod::Fetch(FetchItem *Itm)
       FailFd = Fd.Fd();
       
       bool Missing;
-      if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing) == false)
+      if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Itm->ExpectedSize) == false)
       {
 	 Fd.Close();
 

+ 1 - 1
methods/ftp.h

@@ -62,7 +62,7 @@ class FTPConn
    bool Size(const char *Path,unsigned long long &Size);
    bool ModTime(const char *Path, time_t &Time);
    bool Get(const char *Path,FileFd &To,unsigned long long Resume,
-	    Hashes &MD5,bool &Missing);
+	    Hashes &MD5,bool &Missing, unsigned long long ExpectedSize);
    
    FTPConn(URI Srv);
    ~FTPConn();

+ 0 - 1
methods/https.cc

@@ -86,7 +86,6 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
       return _error->Error("Writing more data than expected (%llu > %llu)",
                            me->TotalWritten, me->Queue->ExpectedSize);
 
-
    return size*nmemb;
 }