diff --git a/lib/downloader.cpp b/lib/downloader.cpp index 3168f9e5..de4e2626 100644 --- a/lib/downloader.cpp +++ b/lib/downloader.cpp @@ -183,7 +183,15 @@ namespace HTTP{ return true; // Success! } // reset the data timeout - reqTime = Util::bootSecs(); + if (reqTime != Util::bootSecs()){ + if (progressCallback != 0){ + if (!progressCallback()){ + WARN_MSG("Download aborted by callback"); + return false; + } + } + reqTime = Util::bootSecs(); + } } if (getSocket()){ FAIL_MSG("Timeout while retrieving %s (%zu/%" PRIu32 ")", link.getUrl().c_str(), @@ -239,7 +247,15 @@ namespace HTTP{ return true; // Success! } // reset the data timeout - reqTime = Util::bootSecs(); + if (reqTime != Util::bootSecs()){ + if (progressCallback != 0){ + if (!progressCallback()){ + WARN_MSG("Download aborted by callback"); + return false; + } + } + reqTime = Util::bootSecs(); + } } if (getSocket()){ FAIL_MSG("Timeout while retrieving %s", link.getUrl().c_str()); diff --git a/lib/http_parser.cpp b/lib/http_parser.cpp index fe62e30d..11522373 100644 --- a/lib/http_parser.cpp +++ b/lib/http_parser.cpp @@ -751,6 +751,13 @@ bool HTTP::Parser::Read(std::string &strbuf){ return parse(strbuf); }// HTTPReader::Read +/// Checks download completion percentage. +/// Returns zero if that doesn't make sense at the time or cannot be determined. +uint8_t HTTP::Parser::getPercentage() const{ + if (!seenHeaders || length < 1){return 0;} + return ((body.length() * 100) / length); +} + /// Attempt to read a whole HTTP response or request from a data buffer. /// If succesful, fills its own fields with the proper data and removes the response/request /// from the data buffer. diff --git a/lib/http_parser.h b/lib/http_parser.h index cbb0e265..a2080cb1 100644 --- a/lib/http_parser.h +++ b/lib/http_parser.h @@ -24,6 +24,7 @@ namespace HTTP{ const std::string &GetHeader(const std::string &i) const; bool hasHeader(const std::string &i) const; void clearHeader(const std::string &i); + uint8_t getPercentage() const; const std::string &GetVar(const std::string &i) const; std::string getUrl(); std::string allVars();