summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-10-07 22:36:09 +0200
committerMichael Vogt <mvo@ubuntu.com>2014-10-07 22:36:09 +0200
commitee27950632c149bb14c9c490e92147579ba4fc2a (patch)
tree2ad71178166534b7ebfd2813e7376139e1ec0de6 /methods
parent27e6c17a18216e2a02de39a6d1722b83ac823d42 (diff)
Send "Fail-Reason: MaximumSizeExceeded" from the method
Communicate the fail reason from the methods to the parent and Rename() failed files.
Diffstat (limited to 'methods')
-rw-r--r--methods/ftp.cc8
-rw-r--r--methods/ftp.h3
-rw-r--r--methods/http.cc1
-rw-r--r--methods/https.cc4
4 files changed, 12 insertions, 4 deletions
diff --git a/methods/ftp.cc b/methods/ftp.cc
index bc84dda7d..5b739ea06 100644
--- a/methods/ftp.cc
+++ b/methods/ftp.cc
@@ -849,7 +849,8 @@ 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, unsigned long long MaximumSize)
+ Hashes &Hash,bool &Missing, unsigned long long MaximumSize,
+ pkgAcqMethod *Owner)
{
Missing = false;
if (CreateDataFd() == false)
@@ -925,8 +926,11 @@ bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
}
if (MaximumSize > 0 && To.Tell() > MaximumSize)
+ {
+ Owner->SetFailReason("MaximumSizeExceeded");
return _error->Error("Writing more data than expected (%llu > %llu)",
To.Tell(), MaximumSize);
+ }
}
// All done
@@ -1067,7 +1071,7 @@ bool FtpMethod::Fetch(FetchItem *Itm)
FailFd = Fd.Fd();
bool Missing;
- if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Itm->MaximumSize) == false)
+ if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Itm->MaximumSize,this) == false)
{
Fd.Close();
diff --git a/methods/ftp.h b/methods/ftp.h
index a31ebc999..2efd28ec6 100644
--- a/methods/ftp.h
+++ b/methods/ftp.h
@@ -62,7 +62,8 @@ 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, unsigned long long MaximumSize);
+ Hashes &MD5,bool &Missing, unsigned long long MaximumSize,
+ pkgAcqMethod *Owner);
FTPConn(URI Srv);
~FTPConn();
diff --git a/methods/http.cc b/methods/http.cc
index f8faa0cf8..c00b439b7 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -657,6 +657,7 @@ bool HttpServerState::Go(bool ToFile, FileFd * const File)
if (MaximumSize > 0 && File && File->Tell() > MaximumSize)
{
+ Owner->SetFailReason("MaximumSizeExceeded");
return _error->Error("Writing more data than expected (%llu > %llu)",
File->Tell(), MaximumSize);
}
diff --git a/methods/https.cc b/methods/https.cc
index 787e4a507..16d564b34 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -83,9 +83,11 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
return false;
if(me->Queue->MaximumSize > 0 && me->File->Tell() > me->Queue->MaximumSize)
+ {
+ me->SetFailReason("MaximumSizeExceeded");
return _error->Error("Writing more data than expected (%llu > %llu)",
me->TotalWritten, me->Queue->MaximumSize);
-
+ }
return size*nmemb;
}