mirror of https://github.com/aria2/aria2
2010-05-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Store both whole checksum and piece hash in metalink file. Dispatch whole checksum verification only when piece hash is not set. * src/DownloadCommand.cc * src/Metalink2RequestGroup.cc * test/Metalink2RequestGroupTest.ccpull/1/head
parent
b305edd7c5
commit
83465ff83d
|
@ -1,3 +1,12 @@
|
|||
2010-05-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Store both whole checksum and piece hash in metalink file.
|
||||
Dispatch whole checksum verification only when piece hash is not
|
||||
set.
|
||||
* src/DownloadCommand.cc
|
||||
* src/Metalink2RequestGroup.cc
|
||||
* test/Metalink2RequestGroupTest.cc
|
||||
|
||||
2010-05-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Left only IANA hash function textual name in messageDigest.cc.
|
||||
|
|
|
@ -210,7 +210,7 @@ bool DownloadCommand::executeInternal() {
|
|||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
|
||||
{
|
||||
std::string expectedPieceHash =
|
||||
const std::string& expectedPieceHash =
|
||||
_requestGroup->getDownloadContext()->getPieceHash(segment->getIndex());
|
||||
if(_pieceHashValidationEnabled && !expectedPieceHash.empty()) {
|
||||
if(segment->isHashCalculated()) {
|
||||
|
@ -271,20 +271,22 @@ void DownloadCommand::checkLowestDownloadSpeed() const
|
|||
|
||||
bool DownloadCommand::prepareForNextSegment() {
|
||||
if(_requestGroup->downloadFinished()) {
|
||||
const SharedHandle<DownloadContext>& dctx =
|
||||
_requestGroup->getDownloadContext();
|
||||
// Remove in-flight request here.
|
||||
_fileEntry->poolRequest(req);
|
||||
// If this is a single file download, and file size becomes known
|
||||
// just after downloading, set total length to FileEntry object
|
||||
// here.
|
||||
if(_requestGroup->getDownloadContext()->getFileEntries().size() == 1) {
|
||||
const SharedHandle<FileEntry>& fileEntry =
|
||||
_requestGroup->getDownloadContext()->getFirstFileEntry();
|
||||
if(dctx->getFileEntries().size() == 1) {
|
||||
const SharedHandle<FileEntry>& fileEntry = dctx->getFirstFileEntry();
|
||||
if(fileEntry->getLength() == 0) {
|
||||
fileEntry->setLength
|
||||
(_requestGroup->getPieceStorage()->getCompletedLength());
|
||||
}
|
||||
}
|
||||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
if(dctx->getPieceHashAlgo().empty()) {
|
||||
SharedHandle<CheckIntegrityEntry> entry
|
||||
(new ChecksumCheckIntegrityEntry(_requestGroup));
|
||||
if(entry->isValidationReady()) {
|
||||
|
@ -292,6 +294,7 @@ bool DownloadCommand::prepareForNextSegment() {
|
|||
// TODO do we need cuttrailinggarbage here?
|
||||
e->_checkIntegrityMan->pushEntry(entry);
|
||||
}
|
||||
}
|
||||
// Following 2lines are needed for DownloadEngine to detect
|
||||
// completed RequestGroups without 1sec delay.
|
||||
e->setNoWait(true);
|
||||
|
|
|
@ -256,12 +256,11 @@ Metalink2RequestGroup::createRequestGroup
|
|||
dctx->getFirstFileEntry()->disableSingleHostMultiConnection();
|
||||
}
|
||||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
if(entry->chunkChecksum.isNull()) {
|
||||
if(!entry->checksum.isNull()) {
|
||||
dctx->setChecksum(entry->checksum->getMessageDigest());
|
||||
dctx->setChecksumHashAlgo(entry->checksum->getAlgo());
|
||||
}
|
||||
} else {
|
||||
if(!entry->chunkChecksum.isNull()) {
|
||||
dctx->setPieceHashes(entry->chunkChecksum->getChecksums().begin(),
|
||||
entry->chunkChecksum->getChecksums().end());
|
||||
dctx->setPieceHashAlgo(entry->chunkChecksum->getAlgo());
|
||||
|
|
|
@ -85,8 +85,11 @@ void Metalink2RequestGroupTest::testGenerate()
|
|||
CPPUNIT_ASSERT_EQUAL(MessageDigestContext::SHA1, dctx->getPieceHashAlgo());
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, dctx->getPieceHashes().size());
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)262144, dctx->getPieceLength());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(""), dctx->getChecksumHashAlgo());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(""), dctx->getChecksum());
|
||||
CPPUNIT_ASSERT_EQUAL(MessageDigestContext::SHA1,
|
||||
dctx->getChecksumHashAlgo());
|
||||
CPPUNIT_ASSERT_EQUAL
|
||||
(std::string("4c255b0ed130f5ea880f0aa061c3da0487e251cc"),
|
||||
dctx->getChecksum());
|
||||
#endif // ENABLE_MESSAGE_DIGEST
|
||||
CPPUNIT_ASSERT(dctx->getSignature().isNull());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue