summaryrefslogtreecommitdiff
path: root/src/RequestGroup.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-05-31 15:56:20 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-05-31 15:56:20 +0000
commitccdd5b31a3dfa07cd13d6f7f0f5eaa3d8ff8a61e (patch)
tree4513f2373675d69e97170388b93a455cbb53b333 /src/RequestGroup.cc
parent8eeeac71928919fa5e4fb0c1c389fa229637bea3 (diff)
2007-06-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/FileAllocationCommand.cc: Derived from RealtimeCommand. * src/CheckIntegrityCommand.cc: Derived from RealtimeCommand. * src/MetalinkEntry.h (checksum): Changed to ChecksumHandle * src/MetalinkRequestInfo.cc (checksum): Changed to ChecksumHandle * src/File.cc (mkdirs): OPEN_MODE -> DIR_OPEN_MODE * src/common.h (DIR_OPEN_MODE): New definition * src/RequestGroup.cc (prepareForNextAction): Added an argument. * src/message.h (MSG_GOOD_CHECKSUM): New definition (MSG_BAD_CHECKSUM): New definition * src/HttpResponseCommand.cc (handleDefaultEncoding): Continue download sequence in new non-segmented download. * src/FileAllocationEntry.h (_nextDownloadCommand): New variable. * src/DownloadCommand.cc (prepareForNextSegment): Create ChecksumCommand if checksum is available. * src/RealtimeCommand.h, src/RealtimeCommand.cc: New class. * src/IteratableChecksumValidator.h, src/IteratableChecksumValidator.cc: New class. * src/ChecksumCommand.h, src/ChecksumCommand.cc: New class.
Diffstat (limited to 'src/RequestGroup.cc')
-rw-r--r--src/RequestGroup.cc21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc
index 7ebb011b..63e8ac7b 100644
--- a/src/RequestGroup.cc
+++ b/src/RequestGroup.cc
@@ -191,21 +191,28 @@ bool RequestGroup::downloadFinishedByFileLength()
}
}
-void RequestGroup::prepareForNextAction(int cuid, const RequestHandle& req, DownloadEngine* e)
+void RequestGroup::prepareForNextAction(int cuid, const RequestHandle& req, DownloadEngine* e, DownloadCommand* downloadCommand)
{
File existingFile(getFilePath());
if(existingFile.size() > 0 && _option->get(PREF_CHECK_INTEGRITY) == V_TRUE) {
CheckIntegrityCommand* command = new CheckIntegrityCommand(cuid, req, this, e);
+ command->setNextDownloadCommand(downloadCommand);
command->initValidator();
e->commands.push_back(command);
} else if(needsFileAllocation()) {
- e->_fileAllocationMan->pushFileAllocationEntry(new FileAllocationEntry(cuid, req, this));
+ FileAllocationEntryHandle entry = new FileAllocationEntry(cuid, req, this);
+ entry->setNextDownloadCommand(downloadCommand);
+ e->_fileAllocationMan->pushFileAllocationEntry(entry);
} else {
- int32_t numCommandsToGenerate = 15;
- Commands commands = getNextCommand(e, numCommandsToGenerate);
- Command* command = InitiateConnectionCommandFactory::createInitiateConnectionCommand(cuid, req, this, e);
- commands.push_front(command);
- e->addCommand(commands);
+ if(downloadCommand) {
+ e->commands.push_back(downloadCommand);
+ } else {
+ int32_t numCommandsToGenerate = 15;
+ Commands commands = getNextCommand(e, numCommandsToGenerate);
+ Command* command = InitiateConnectionCommandFactory::createInitiateConnectionCommand(cuid, req, this, e);
+ commands.push_front(command);
+ e->addCommand(commands);
+ }
}
}