2009-07-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Call RequestGroup::createNextCommandWithAdj() from
	BtFileAllocationEntry if at least one FileEntry has URI.  The
	static function hasAssociatedUri in RequestGroup.cc is renamed as
	isUriSuppliedForRequsetFileEntry() and placed in FileEntry.h.
	* src/BtFileAllocationEntry.cc
	* src/FileEntry.h
	* src/RequestGroup.cc
pull/1/head
Tatsuhiro Tsujikawa 2009-07-04 15:26:00 +00:00
parent f8fd518229
commit 24d258cf66
4 changed files with 30 additions and 15 deletions

View File

@ -1,3 +1,13 @@
2009-07-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Call RequestGroup::createNextCommandWithAdj() from
BtFileAllocationEntry if at least one FileEntry has URI. The
static function hasAssociatedUri in RequestGroup.cc is renamed as
isUriSuppliedForRequsetFileEntry() and placed in FileEntry.h.
* src/BtFileAllocationEntry.cc
* src/FileEntry.h
* src/RequestGroup.cc
2009-07-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Generate peer ID after SimpleRandomizer is initialized.

View File

@ -55,7 +55,11 @@ void BtFileAllocationEntry::prepareForNextAction(std::deque<Command*>& commands,
BtSetup().setup(commands, _requestGroup, e, _requestGroup->getOption().get());
if(!_requestGroup->downloadFinished()) {
_requestGroup->getDownloadContext()->resetDownloadStartTime();
_requestGroup->createNextCommandWithAdj(commands, e, 0);
const std::vector<SharedHandle<FileEntry> >& fileEntries =
_requestGroup->getDownloadContext()->getFileEntries();
if(isUriSuppliedForRequsetFileEntry(fileEntries.begin(), fileEntries.end())) {
_requestGroup->createNextCommandWithAdj(commands, e, 0);
}
}
}

View File

@ -265,6 +265,18 @@ size_t countRequestedFileEntry(InputIterator first, InputIterator last)
return count;
}
// Returns true if at least one requested FileEntry has URIs.
template<typename InputIterator>
bool isUriSuppliedForRequsetFileEntry(InputIterator first, InputIterator last)
{
for(; first != last; ++first) {
if((*first)->isRequested() && !(*first)->getRemainingUris().empty()) {
return true;
}
}
return false;
}
// Writes first filename to given o. If memory is true, the output is
// "[MEMORY]" plus the basename of the first filename. If there is no
// FileEntry, writes "n/a" to o. If more than 1 FileEntry are in the

View File

@ -398,17 +398,6 @@ void RequestGroup::processCheckIntegrityEntry(std::deque<Command*>& commands,
}
}
template<typename InputIterator>
static bool hasAssociatedUri(InputIterator first, InputIterator last)
{
for(; first != last; ++first) {
if((*first)->isRequested() && !(*first)->getRemainingUris().empty()) {
return true;
}
}
return false;
}
void RequestGroup::initPieceStorage()
{
if(_downloadContext->knowsTotalLength()) {
@ -418,8 +407,9 @@ void RequestGroup::initPieceStorage()
// Use LongestSequencePieceSelector when HTTP/FTP/BitTorrent integrated
// downloads. Currently multi-file integrated download is not supported.
if(_downloadContext->hasAttribute(bittorrent::BITTORRENT) &&
hasAssociatedUri(_downloadContext->getFileEntries().begin(),
_downloadContext->getFileEntries().end())) {
isUriSuppliedForRequsetFileEntry
(_downloadContext->getFileEntries().begin(),
_downloadContext->getFileEntries().end())) {
_logger->debug("Using LongestSequencePieceSelector");
ps->setPieceSelector
(SharedHandle<PieceSelector>(new LongestSequencePieceSelector()));
@ -635,7 +625,6 @@ void RequestGroup::createNextCommand(std::deque<Command*>& commands,
for(; numCommand--; ) {
Command* command = new CreateRequestCommand(e->newCUID(), this, e);
_logger->debug("filePath=%s", _downloadContext->getFileEntries().front()->getPath().c_str());
commands.push_back(command);
}
if(!commands.empty()) {