2007-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Use filename and size from Metalink file instead of sending HEAD
	request:
	* src/UrlRequestInfo.h
	(_filename): New variable.
	(_totalLength): New variable.
	(setTotalLength): New variable.
	(setFilename): New variable.
	* src/MetalinkRequestInfo.cc
	(execute): Set filename and size to UrlRequestInfo
	* src/UrlRequestInfo.cc
	(execute): Use filename and size from Metalink instead of seding
	HEAD request to servers.
pull/1/head
Tatsuhiro Tsujikawa 2007-03-25 03:44:47 +00:00
parent 460c874e26
commit 228ed66f73
5 changed files with 49 additions and 7 deletions

View File

@ -1,3 +1,18 @@
2007-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Use filename and size from Metalink file instead of sending HEAD
request:
* src/UrlRequestInfo.h
(_filename): New variable.
(_totalLength): New variable.
(setTotalLength): New variable.
(setFilename): New variable.
* src/MetalinkRequestInfo.cc
(execute): Set filename and size to UrlRequestInfo
* src/UrlRequestInfo.cc
(execute): Use filename and size from Metalink instead of seding
HEAD request to servers.
2007-03-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add the ability to resume downloading a partially downloaded file

View File

@ -122,6 +122,8 @@ RequestInfos MetalinkRequestInfo::execute() {
urls.push_back((*itr)->url);
}
UrlRequestInfoHandle reqInfo = new UrlRequestInfo(urls, maxConnection, op);
reqInfo->setFilename(entry->filename);
reqInfo->setTotalLength(entry->size);
#ifdef ENABLE_MESSAGE_DIGEST
reqInfo->setChecksum(checksum);
if(!entry->chunkChecksum.isNull()) {

View File

@ -159,13 +159,19 @@ RequestInfos UrlRequestInfo::execute() {
RequestInfo* next = 0;
try {
HeadResultHandle hr = getHeadResult();
if(hr.isNull()) {
logger->notice("No URI to download. Download aborted.");
return RequestInfos();
HeadResultHandle hr(0);
if(_totalLength == 0 || _filename.length() == 0) {
hr = getHeadResult();
if(hr.isNull()) {
logger->notice(MSG_NO_URL_TO_DOWNLOAD);
return RequestInfos();
}
} else {
hr = new HeadResult();
hr->filename = _filename;
hr->totalLength = _totalLength;
}
logger->info("Head result: filename=%s, total length=%s",
hr->filename.c_str(), Util::ullitos(hr->totalLength, true).c_str());
@ -174,6 +180,11 @@ RequestInfos UrlRequestInfo::execute() {
op->get(PREF_REFERER),
op->getAsInt(PREF_SPLIT)));
if(requests.size() == 0) {
logger->notice(MSG_NO_URL_TO_DOWNLOAD);
return RequestInfos();
}
adjustRequestSize(requests, reserved, maxConnections);
SharedHandle<ConsoleDownloadEngine> e(DownloadEngineFactory::newConsoleEngine(op, requests, reserved));

View File

@ -53,6 +53,8 @@ class UrlRequestInfo : public RequestInfo {
private:
Strings urls;
int maxConnections;
string _filename;
int64_t _totalLength;
#ifdef ENABLE_MESSAGE_DIGEST
MessageDigestContext::DigestAlgo digestAlgo;
int32_t chunkChecksumLength;
@ -69,7 +71,8 @@ public:
UrlRequestInfo(const Strings& urls, int maxConnections, Option* op):
RequestInfo(op),
urls(urls),
maxConnections(maxConnections)
maxConnections(maxConnections),
_totalLength(0)
#ifdef ENABLE_MESSAGE_DIGEST
,
digestAlgo(DIGEST_ALGO_SHA1),
@ -98,6 +101,16 @@ public:
this->chunkChecksums = chunkChecksums;
}
#endif // ENABLE_MESSAGE_DIGEST
void setTotalLength(int64_t totalLength)
{
_totalLength = totalLength;
}
void setFilename(const string& filename)
{
_filename = filename;
}
};
typedef SharedHandle<UrlRequestInfo> UrlRequestInfoHandle;

View File

@ -64,6 +64,7 @@
#define MSG_SAVED_SEGMENT_FILE _("The segment file was saved successfully.")
#define MSG_LOADING_SEGMENT_FILE _("Loading the segment file %s.")
#define MSG_LOADED_SEGMENT_FILE _("The segment file was loaded successfully.")
#define MSG_NO_URL_TO_DOWNLOAD _("No URI to download. Download aborted.")
#define EX_TIME_OUT _("Timeout.")
#define EX_INVALID_CHUNK_SIZE _("Invalid chunk size.")