summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-29 08:42:58 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-29 08:42:58 +0000
commite82f870fdc3c1a7fc2c0b66a9f623a5386ece3d6 (patch)
tree8b48808e3a23e9ac2fd69ada00990d9d190f110b
parent8122399ca746b9bc69dc17a08ea126c791189e4a (diff)
2009-06-29 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed _uris from RequestGroup. All functions that refer to _uris were moved to FileEntry. Exit status code are now defined in DownloadResultCode.h. * src/AbstractCommand.cc * src/AdaptiveURISelector.cc * src/AdaptiveURISelector.h * src/AutoSaveCommand.cc * src/BtPostDownloadHandler.cc * src/CheckIntegrityDispatcherCommand.cc * src/CookieStorage.cc * src/DHTAutoSaveCommand.cc * src/DHTBucketRefreshCommand.cc * src/DHTEntryPointNameResolveCommand.cc * src/DHTInteractionCommand.cc * src/DHTPeerAnnounceCommand.cc * src/DHTTokenUpdateCommand.cc * src/DlAbortEx.h * src/DlRetryEx.h * src/DownloadCommand.cc * src/DownloadContext.h * src/DownloadFailureException.h * src/DownloadResult.h * src/DownloadResultCode.h * src/FeedbackURISelector.cc * src/FeedbackURISelector.h * src/FileEntry.cc * src/FileEntry.h * src/FtpNegotiationCommand.cc * src/HttpListenCommand.cc * src/HttpResponseCommand.cc * src/HttpServerResponseCommand.cc * src/HttpSkipResponseCommand.cc * src/InOrderURISelector.cc * src/InOrderURISelector.h * src/Makefile.am * src/Makefile.in * src/Metalink2RequestGroup.cc * src/MultiUrlRequestInfo.cc * src/MultiUrlRequestInfo.h * src/OptionHandlerFactory.cc * src/PeerListenCommand.cc * src/RecoverableException.h * src/RequestGroup.cc * src/RequestGroup.h * src/RequestGroupMan.cc * src/RequestGroupMan.h * src/TimedHaltCommand.cc * src/TrackerWatcherCommand.cc * src/URIResult.cc * src/URIResult.h * src/URISelector.h * src/XmlRpcMethodImpl.cc * src/bittorrent_helper.cc * src/bittorrent_helper.h * src/download_helper.cc * src/main.cc * src/option_processing.cc * test/BtDependencyTest.cc * test/BtPostDownloadHandlerTest.cc * test/CookieStorageTest.cc * test/DefaultBtMessageDispatcherTest.cc * test/DownloadHandlerFactoryTest.cc * test/DownloadHelperTest.cc * test/FeedbackURISelectorTest.cc * test/FileEntryTest.cc * test/InOrderURISelectorTest.cc * test/Metalink2RequestGroupTest.cc * test/MetalinkPostDownloadHandlerTest.cc * test/RequestGroupManTest.cc * test/RequestGroupTest.cc * test/XmlRpcMethodTest.cc
-rw-r--r--ChangeLog74
-rw-r--r--src/AbstractCommand.cc15
-rw-r--r--src/AdaptiveURISelector.cc12
-rw-r--r--src/AdaptiveURISelector.h4
-rw-r--r--src/AutoSaveCommand.cc1
-rw-r--r--src/BtPostDownloadHandler.cc2
-rw-r--r--src/CheckIntegrityDispatcherCommand.cc1
-rw-r--r--src/CookieStorage.cc1
-rw-r--r--src/DHTAutoSaveCommand.cc1
-rw-r--r--src/DHTBucketRefreshCommand.cc1
-rw-r--r--src/DHTEntryPointNameResolveCommand.cc1
-rw-r--r--src/DHTInteractionCommand.cc1
-rw-r--r--src/DHTPeerAnnounceCommand.cc1
-rw-r--r--src/DHTTokenUpdateCommand.cc1
-rw-r--r--src/DlAbortEx.h2
-rw-r--r--src/DlRetryEx.h2
-rw-r--r--src/DownloadCommand.cc2
-rw-r--r--src/DownloadContext.h2
-rw-r--r--src/DownloadFailureException.h3
-rw-r--r--src/DownloadResult.h32
-rw-r--r--src/DownloadResultCode.h59
-rw-r--r--src/FeedbackURISelector.cc4
-rw-r--r--src/FeedbackURISelector.h4
-rw-r--r--src/FileEntry.cc60
-rw-r--r--src/FileEntry.h32
-rw-r--r--src/FtpNegotiationCommand.cc12
-rw-r--r--src/HttpListenCommand.cc1
-rw-r--r--src/HttpResponseCommand.cc6
-rw-r--r--src/HttpServerResponseCommand.cc1
-rw-r--r--src/HttpSkipResponseCommand.cc2
-rw-r--r--src/InOrderURISelector.cc4
-rw-r--r--src/InOrderURISelector.h2
-rw-r--r--src/Makefile.am3
-rw-r--r--src/Makefile.in21
-rw-r--r--src/Metalink2RequestGroup.cc6
-rw-r--r--src/MultiUrlRequestInfo.cc8
-rw-r--r--src/MultiUrlRequestInfo.h2
-rw-r--r--src/OptionHandlerFactory.cc1
-rw-r--r--src/PeerListenCommand.cc1
-rw-r--r--src/RecoverableException.h14
-rw-r--r--src/RequestGroup.cc182
-rw-r--r--src/RequestGroup.h66
-rw-r--r--src/RequestGroupMan.cc28
-rw-r--r--src/RequestGroupMan.h8
-rw-r--r--src/TimedHaltCommand.cc1
-rw-r--r--src/TrackerWatcherCommand.cc2
-rw-r--r--src/URIResult.cc2
-rw-r--r--src/URIResult.h8
-rw-r--r--src/URISelector.h5
-rw-r--r--src/XmlRpcMethodImpl.cc8
-rw-r--r--src/bittorrent_helper.cc54
-rw-r--r--src/bittorrent_helper.h18
-rw-r--r--src/download_helper.cc13
-rw-r--r--src/main.cc8
-rw-r--r--src/option_processing.cc20
-rw-r--r--test/BtDependencyTest.cc6
-rw-r--r--test/BtPostDownloadHandlerTest.cc6
-rw-r--r--test/CookieStorageTest.cc1
-rw-r--r--test/DefaultBtMessageDispatcherTest.cc2
-rw-r--r--test/DownloadHandlerFactoryTest.cc8
-rw-r--r--test/DownloadHelperTest.cc32
-rw-r--r--test/FeedbackURISelectorTest.cc28
-rw-r--r--test/FileEntryTest.cc45
-rw-r--r--test/InOrderURISelectorTest.cc23
-rw-r--r--test/Metalink2RequestGroupTest.cc8
-rw-r--r--test/MetalinkPostDownloadHandlerTest.cc6
-rw-r--r--test/RequestGroupManTest.cc6
-rw-r--r--test/RequestGroupTest.cc74
-rw-r--r--test/XmlRpcMethodTest.cc14
69 files changed, 641 insertions, 443 deletions
diff --git a/ChangeLog b/ChangeLog
index 927c4062..88744514 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,77 @@
+2009-06-29 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+
+ Removed _uris from RequestGroup. All functions that refer to _uris
+ were moved to FileEntry. Exit status code are now defined in
+ DownloadResultCode.h.
+ * src/AbstractCommand.cc
+ * src/AdaptiveURISelector.cc
+ * src/AdaptiveURISelector.h
+ * src/AutoSaveCommand.cc
+ * src/BtPostDownloadHandler.cc
+ * src/CheckIntegrityDispatcherCommand.cc
+ * src/CookieStorage.cc
+ * src/DHTAutoSaveCommand.cc
+ * src/DHTBucketRefreshCommand.cc
+ * src/DHTEntryPointNameResolveCommand.cc
+ * src/DHTInteractionCommand.cc
+ * src/DHTPeerAnnounceCommand.cc
+ * src/DHTTokenUpdateCommand.cc
+ * src/DlAbortEx.h
+ * src/DlRetryEx.h
+ * src/DownloadCommand.cc
+ * src/DownloadContext.h
+ * src/DownloadFailureException.h
+ * src/DownloadResult.h
+ * src/DownloadResultCode.h
+ * src/FeedbackURISelector.cc
+ * src/FeedbackURISelector.h
+ * src/FileEntry.cc
+ * src/FileEntry.h
+ * src/FtpNegotiationCommand.cc
+ * src/HttpListenCommand.cc
+ * src/HttpResponseCommand.cc
+ * src/HttpServerResponseCommand.cc
+ * src/HttpSkipResponseCommand.cc
+ * src/InOrderURISelector.cc
+ * src/InOrderURISelector.h
+ * src/Makefile.am
+ * src/Makefile.in
+ * src/Metalink2RequestGroup.cc
+ * src/MultiUrlRequestInfo.cc
+ * src/MultiUrlRequestInfo.h
+ * src/OptionHandlerFactory.cc
+ * src/PeerListenCommand.cc
+ * src/RecoverableException.h
+ * src/RequestGroup.cc
+ * src/RequestGroup.h
+ * src/RequestGroupMan.cc
+ * src/RequestGroupMan.h
+ * src/TimedHaltCommand.cc
+ * src/TrackerWatcherCommand.cc
+ * src/URIResult.cc
+ * src/URIResult.h
+ * src/URISelector.h
+ * src/XmlRpcMethodImpl.cc
+ * src/bittorrent_helper.cc
+ * src/bittorrent_helper.h
+ * src/download_helper.cc
+ * src/main.cc
+ * src/option_processing.cc
+ * test/BtDependencyTest.cc
+ * test/BtPostDownloadHandlerTest.cc
+ * test/CookieStorageTest.cc
+ * test/DefaultBtMessageDispatcherTest.cc
+ * test/DownloadHandlerFactoryTest.cc
+ * test/DownloadHelperTest.cc
+ * test/FeedbackURISelectorTest.cc
+ * test/FileEntryTest.cc
+ * test/InOrderURISelectorTest.cc
+ * test/Metalink2RequestGroupTest.cc
+ * test/MetalinkPostDownloadHandlerTest.cc
+ * test/RequestGroupManTest.cc
+ * test/RequestGroupTest.cc
+ * test/XmlRpcMethodTest.cc
+
2009-06-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed MockBtContext.h
* test/Makefile.am
diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc
index 2c05a555..7e1a43cc 100644
--- a/src/AbstractCommand.cc
+++ b/src/AbstractCommand.cc
@@ -174,7 +174,7 @@ bool AbstractCommand::execute() {
req->getProtocol());
ss->setError();
- throw DL_RETRY_EX2(EX_TIME_OUT, DownloadResult::TIME_OUT);
+ throw DL_RETRY_EX2(EX_TIME_OUT, downloadresultcode::TIME_OUT);
}
e->commands.push_back(this);
return false;
@@ -187,7 +187,8 @@ bool AbstractCommand::execute() {
DL_ABORT_EX2(StringFormat
("URI=%s", req->getCurrentUrl().c_str()).str(),err),
cuid, req->getUrl().c_str());
- _requestGroup->addURIResult(req->getUrl(), err.getCode());
+ _fileEntry->addURIResult(req->getUrl(), err.getCode());
+ _requestGroup->setLastUriResult(req->getUrl(), err.getCode());
}
onAbort();
// TODO Do we need this?
@@ -195,6 +196,7 @@ bool AbstractCommand::execute() {
tryReserved();
return true;
} catch(DlRetryEx& err) {
+ // TODO1.5 Consider the case when req is null
logger->info(MSG_RESTARTING_DOWNLOAD,
DL_RETRY_EX2(StringFormat
("URI=%s", req->getCurrentUrl().c_str()).str(),err),
@@ -214,15 +216,18 @@ bool AbstractCommand::execute() {
if(isAbort) {
logger->info(MSG_MAX_TRY, cuid, req->getTryCount());
logger->error(MSG_DOWNLOAD_ABORTED, err, cuid, req->getUrl().c_str());
- _requestGroup->addURIResult(req->getUrl(), err.getCode());
+ _fileEntry->addURIResult(req->getUrl(), err.getCode());
+ _requestGroup->setLastUriResult(req->getUrl(), err.getCode());
tryReserved();
return true;
} else {
return prepareForRetry(getOption()->getAsInt(PREF_RETRY_WAIT));
}
} catch(DownloadFailureException& err) {
+ // TODO1.5 Consider the case when req is null
logger->error(EX_EXCEPTION_CAUGHT, err);
- _requestGroup->addURIResult(req->getUrl(), err.getCode());
+ _fileEntry->addURIResult(req->getUrl(), err.getCode());
+ _requestGroup->setLastUriResult(req->getUrl(), err.getCode());
_requestGroup->setHaltRequested(true);
return true;
}
@@ -279,7 +284,7 @@ void AbstractCommand::onAbort() {
// TODO This might be a problem if the failure is caused by proxy.
e->_requestGroupMan->getOrCreateServerStat(req->getHost(),
req->getProtocol())->setError();
- _requestGroup->removeIdenticalURI(req->getUrl());
+ _fileEntry->removeIdenticalURI(req->getUrl());
_fileEntry->removeRequest(req);
}
diff --git a/src/AdaptiveURISelector.cc b/src/AdaptiveURISelector.cc
index ef355b15..7ceb09fa 100644
--- a/src/AdaptiveURISelector.cc
+++ b/src/AdaptiveURISelector.cc
@@ -50,6 +50,7 @@
#include "Option.h"
#include "SimpleRandomizer.h"
#include "SocketCore.h"
+#include "FileEntry.h"
namespace aria2 {
@@ -71,14 +72,15 @@ AdaptiveURISelector::AdaptiveURISelector
AdaptiveURISelector::~AdaptiveURISelector() {}
-std::string AdaptiveURISelector::select(std::deque<std::string>& uris)
+std::string AdaptiveURISelector::select(FileEntry* fileEntry)
{
_logger->debug("AdaptiveURISelector: called %d",
_requestGroup->getNumConnection());
+ std::deque<std::string>& uris = fileEntry->getRemainingUris();
if (uris.empty() && _requestGroup->getNumConnection() <= 1) {
// here we know the download will fail, trying to find previously
// failed uris that may succeed with more permissive values
- mayRetryWithIncreasedTimeout(uris);
+ mayRetryWithIncreasedTimeout(fileEntry);
}
std::string selected = selectOne(uris);
@@ -89,15 +91,15 @@ std::string AdaptiveURISelector::select(std::deque<std::string>& uris)
return selected;
}
-void AdaptiveURISelector::mayRetryWithIncreasedTimeout
-(std::deque<std::string>& uris)
+void AdaptiveURISelector::mayRetryWithIncreasedTimeout(FileEntry* fileEntry)
{
if (_requestGroup->getTimeout()*2 >= MAX_TIMEOUT) return;
_requestGroup->setTimeout(_requestGroup->getTimeout()*2);
+ std::deque<std::string>& uris = fileEntry->getRemainingUris();
// looking for retries
std::deque<URIResult> timeouts;
- _requestGroup->extractURIResult(timeouts, DownloadResult::TIME_OUT);
+ fileEntry->extractURIResult(timeouts, downloadresultcode::TIME_OUT);
std::transform(timeouts.begin(), timeouts.end(), std::back_inserter(uris),
std::mem_fun_ref(&URIResult::getURI));
diff --git a/src/AdaptiveURISelector.h b/src/AdaptiveURISelector.h
index 6804b9cc..1e3c0869 100644
--- a/src/AdaptiveURISelector.h
+++ b/src/AdaptiveURISelector.h
@@ -57,7 +57,7 @@ private:
Logger* _logger;
- void mayRetryWithIncreasedTimeout(std::deque<std::string>& uris);
+ void mayRetryWithIncreasedTimeout(FileEntry* fileEntry);
std::string selectOne(const std::deque<std::string>& uris);
void adjustLowestSpeedLimit(const std::deque<std::string>& uris,
@@ -78,7 +78,7 @@ public:
virtual ~AdaptiveURISelector();
- virtual std::string select(std::deque<std::string>& uris);
+ virtual std::string select(FileEntry* fileEntry);
virtual void tuneDownloadCommand(const std::deque<std::string>& uris,
DownloadCommand* command);
diff --git a/src/AutoSaveCommand.cc b/src/AutoSaveCommand.cc
index ad5001bc..4202c68c 100644
--- a/src/AutoSaveCommand.cc
+++ b/src/AutoSaveCommand.cc
@@ -35,6 +35,7 @@
#include "AutoSaveCommand.h"
#include "DownloadEngine.h"
#include "RequestGroupMan.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/BtPostDownloadHandler.cc b/src/BtPostDownloadHandler.cc
index 5e733d75..14d3c4ae 100644
--- a/src/BtPostDownloadHandler.cc
+++ b/src/BtPostDownloadHandler.cc
@@ -66,7 +66,7 @@ void BtPostDownloadHandler::getNextRequestGroups
const SharedHandle<Option>& op = requestGroup->getOption();
_logger->debug("Generating RequestGroups for Torrent file %s",
requestGroup->getFirstFilePath().c_str());
- RequestGroupHandle rg(new RequestGroup(op, std::deque<std::string>()));
+ RequestGroupHandle rg(new RequestGroup(op));
std::string content;
try {
diff --git a/src/CheckIntegrityDispatcherCommand.cc b/src/CheckIntegrityDispatcherCommand.cc
index fff00638..ceec1f4a 100644
--- a/src/CheckIntegrityDispatcherCommand.cc
+++ b/src/CheckIntegrityDispatcherCommand.cc
@@ -37,6 +37,7 @@
#include "CheckIntegrityCommand.h"
#include "message.h"
#include "Logger.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/CookieStorage.cc b/src/CookieStorage.cc
index 3e838657..8c3d6ac1 100644
--- a/src/CookieStorage.cc
+++ b/src/CookieStorage.cc
@@ -44,6 +44,7 @@
#include "DlAbortEx.h"
#include "StringFormat.h"
#include "NsCookieParser.h"
+#include "File.h"
#ifdef HAVE_SQLITE3
# include "Sqlite3MozCookieParser.h"
#endif // HAVE_SQLITE3
diff --git a/src/DHTAutoSaveCommand.cc b/src/DHTAutoSaveCommand.cc
index 026fc445..aa4b34e4 100644
--- a/src/DHTAutoSaveCommand.cc
+++ b/src/DHTAutoSaveCommand.cc
@@ -52,6 +52,7 @@
#include "message.h"
#include "Logger.h"
#include "a2functional.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DHTBucketRefreshCommand.cc b/src/DHTBucketRefreshCommand.cc
index 30d62cdb..e4923c10 100644
--- a/src/DHTBucketRefreshCommand.cc
+++ b/src/DHTBucketRefreshCommand.cc
@@ -39,6 +39,7 @@
#include "DHTTask.h"
#include "DownloadEngine.h"
#include "RequestGroupMan.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DHTEntryPointNameResolveCommand.cc b/src/DHTEntryPointNameResolveCommand.cc
index 0e09d746..dbe9ae9a 100644
--- a/src/DHTEntryPointNameResolveCommand.cc
+++ b/src/DHTEntryPointNameResolveCommand.cc
@@ -51,6 +51,7 @@
#include "RequestGroupMan.h"
#include "Logger.h"
#include "StringFormat.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DHTInteractionCommand.cc b/src/DHTInteractionCommand.cc
index ec86d7ae..a5fd28e8 100644
--- a/src/DHTInteractionCommand.cc
+++ b/src/DHTInteractionCommand.cc
@@ -45,6 +45,7 @@
#include "Logger.h"
#include "DHTMessageCallback.h"
#include "DHTNode.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DHTPeerAnnounceCommand.cc b/src/DHTPeerAnnounceCommand.cc
index 1de3fead..2b8ddc4c 100644
--- a/src/DHTPeerAnnounceCommand.cc
+++ b/src/DHTPeerAnnounceCommand.cc
@@ -39,6 +39,7 @@
#include "RecoverableException.h"
#include "message.h"
#include "Logger.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DHTTokenUpdateCommand.cc b/src/DHTTokenUpdateCommand.cc
index a699f4ca..e29dcebb 100644
--- a/src/DHTTokenUpdateCommand.cc
+++ b/src/DHTTokenUpdateCommand.cc
@@ -39,6 +39,7 @@
#include "RecoverableException.h"
#include "message.h"
#include "Logger.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/DlAbortEx.h b/src/DlAbortEx.h
index d6bc4d4e..4d6e9281 100644
--- a/src/DlAbortEx.h
+++ b/src/DlAbortEx.h
@@ -54,7 +54,7 @@ public:
DlAbortEx(const char* file, int line, const RecoverableException& e):
RecoverableException(file, line, e) {}
DlAbortEx(const char* file, int line, const std::string& msg,
- DownloadResult::RESULT code):
+ downloadresultcode::RESULT code):
RecoverableException(file, line, msg, code) {}
};
diff --git a/src/DlRetryEx.h b/src/DlRetryEx.h
index 8c88a0fd..0b861e97 100644
--- a/src/DlRetryEx.h
+++ b/src/DlRetryEx.h
@@ -54,7 +54,7 @@ public:
DlRetryEx(const char* file, int line, const DlRetryEx& e):
RecoverableException(file, line, e) {}
DlRetryEx(const char* file, int line, const std::string& msg,
- DownloadResult::RESULT code):
+ downloadresultcode::RESULT code):
RecoverableException(file, line, msg, code) {}
};
diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc
index 3c563984..48783817 100644
--- a/src/DownloadCommand.cc
+++ b/src/DownloadCommand.cc
@@ -252,7 +252,7 @@ void DownloadCommand::checkLowestDownloadSpeed() const
nowSpeed,
lowestDownloadSpeedLimit,
req->getHost().c_str()).str(),
- DownloadResult::TOO_SLOW_DOWNLOAD_SPEED);
+ downloadresultcode::TOO_SLOW_DOWNLOAD_SPEED);
}
}
}
diff --git a/src/DownloadContext.h b/src/DownloadContext.h
index ef55b035..479efab5 100644
--- a/src/DownloadContext.h
+++ b/src/DownloadContext.h
@@ -47,10 +47,10 @@
#include "A2STR.h"
#include "BDE.h"
#include "IntSequence.h"
+#include "FileEntry.h"
namespace aria2 {
-class FileEntry;
class RequestGroup;
class DownloadContext
diff --git a/src/DownloadFailureException.h b/src/DownloadFailureException.h
index aee71046..b9fb1132 100644
--- a/src/DownloadFailureException.h
+++ b/src/DownloadFailureException.h
@@ -59,7 +59,8 @@ public:
const DownloadFailureException& e):
RecoverableException(file, line, e) {}
DownloadFailureException(const char* file, int line,
- const std::string& msg, DownloadResult::RESULT code):
+ const std::string& msg,
+ downloadresultcode::RESULT code):
RecoverableException(file, line, msg, code) {}
};
diff --git a/src/DownloadResult.h b/src/DownloadResult.h
index d52c79dc..093154da 100644
--- a/src/DownloadResult.h
+++ b/src/DownloadResult.h
@@ -43,59 +43,37 @@
#include <vector>
#include "SharedHandle.h"
-#include "FileEntry.h"
+#include "DownloadResultCode.h"
namespace aria2 {
+class FileEntry;
+
class DownloadResult
{
public:
- // RESULT is used as an exit status code.
- enum RESULT {
- FINISHED = 0,
- UNKNOWN_ERROR = 1,
- TIME_OUT = 2,
- RESOURCE_NOT_FOUND = 3,
- MAX_FILE_NOT_FOUND = 4,
- TOO_SLOW_DOWNLOAD_SPEED = 5,
- NETWORK_PROBLEM = 6,
- IN_PROGRESS = 7,
- };
-
int32_t gid;
std::vector<SharedHandle<FileEntry> > fileEntries;
bool inMemoryDownload;
- uint64_t totalLength;
-
- std::string uri;
-
- size_t numUri;
-
uint64_t sessionDownloadLength;
// milliseconds
int64_t sessionTime;
- RESULT result;
+ downloadresultcode::RESULT result;
DownloadResult(int32_t gid,
const std::vector<SharedHandle<FileEntry> >& fileEntries,
bool inMemoryDownload,
- uint64_t totalLength,
- const std::string& uri,
- size_t numUri,
uint64_t sessionDownloadLength,
int64_t sessionTime,
- RESULT result):
+ downloadresultcode::RESULT result):
gid(gid),
fileEntries(fileEntries),
inMemoryDownload(inMemoryDownload),
- totalLength(totalLength),
- uri(uri),
- numUri(numUri),
sessionDownloadLength(sessionDownloadLength),
sessionTime(sessionTime),
result(result) {}
diff --git a/src/DownloadResultCode.h b/src/DownloadResultCode.h
new file mode 100644
index 00000000..8a99f730
--- /dev/null
+++ b/src/DownloadResultCode.h
@@ -0,0 +1,59 @@
+/* <!-- copyright */
+/*
+ * aria2 - The high speed download utility
+ *
+ * Copyright (C) 2009 Tatsuhiro Tsujikawa
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the
+ * OpenSSL library under certain conditions as described in each
+ * individual source file, and distribute linked combinations
+ * including the two.
+ * You must obey the GNU General Public License in all respects
+ * for all of the code used other than OpenSSL. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you
+ * do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source
+ * files in the program, then also delete it here.
+ */
+/* copyright --> */
+#ifndef _D_DOWNLOAD_RESULT_CODE_H_
+#define _D_DOWNLOAD_RESULT_CODE_H_
+
+#include "common.h"
+
+namespace aria2 {
+
+namespace downloadresultcode {
+
+enum RESULT {
+ FINISHED = 0,
+ UNKNOWN_ERROR = 1,
+ TIME_OUT = 2,
+ RESOURCE_NOT_FOUND = 3,
+ MAX_FILE_NOT_FOUND = 4,
+ TOO_SLOW_DOWNLOAD_SPEED = 5,
+ NETWORK_PROBLEM = 6,
+ IN_PROGRESS = 7,
+};
+
+} // namespace downloadresultcode
+
+} // namespace aria2
+
+#endif // _D_DOWNLOAD_RESULT_CODE_H_
diff --git a/src/FeedbackURISelector.cc b/src/FeedbackURISelector.cc
index fe96f080..f20d4286 100644
--- a/src/FeedbackURISelector.cc
+++ b/src/FeedbackURISelector.cc
@@ -40,6 +40,7 @@
#include "ServerStat.h"
#include "Request.h"
#include "A2STR.h"
+#include "FileEntry.h"
namespace aria2 {
@@ -59,8 +60,9 @@ public:
}
};
-std::string FeedbackURISelector::select(std::deque<std::string>& uris)
+std::string FeedbackURISelector::select(FileEntry* fileEntry)
{
+ std::deque<std::string>& uris = fileEntry->getRemainingUris();
if(uris.empty()) {
return A2STR::NIL;
}
diff --git a/src/FeedbackURISelector.h b/src/FeedbackURISelector.h
index 10ed6f88..46e5c8fa 100644
--- a/src/FeedbackURISelector.h
+++ b/src/FeedbackURISelector.h
@@ -4,7 +4,7 @@
*
* Copyright (C) 2006 Tatsuhiro Tsujikawa
*
- * This program is free software; you can redistribute it and/or modify
+nn * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
@@ -50,7 +50,7 @@ public:
virtual ~FeedbackURISelector();
- virtual std::string select(std::deque<std::string>& uris);
+ virtual std::string select(FileEntry* fileEntry);
};
} // namespace aria2
diff --git a/src/FileEntry.cc b/src/FileEntry.cc
index 4e23f5d4..c07ecbb8 100644
--- a/src/FileEntry.cc
+++ b/src/FileEntry.cc
@@ -35,9 +35,11 @@
#include "FileEntry.h"
#include <cassert>
+#include <algorithm>
#include "Util.h"
#include "URISelector.h"
+#include "LogFactory.h"
namespace aria2 {
@@ -46,7 +48,12 @@ FileEntry::FileEntry(const std::string& path,
off_t offset,
const std::deque<std::string>& uris):
path(path), _uris(uris), length(length), offset(offset),
- extracted(false), requested(true) {}
+ extracted(false), requested(true),
+ _logger(LogFactory::getInstance()) {}
+
+FileEntry::FileEntry():
+ length(0), offset(0), extracted(false), requested(false),
+ _logger(LogFactory::getInstance()) {}
FileEntry::~FileEntry() {}
@@ -91,7 +98,7 @@ void FileEntry::getUris(std::deque<std::string>& uris) const
std::string FileEntry::selectUri(const SharedHandle<URISelector>& uriSelector)
{
- return uriSelector->select(_uris);
+ return uriSelector->select(this);
}
SharedHandle<Request>
@@ -100,7 +107,7 @@ FileEntry::getRequest(const SharedHandle<URISelector>& selector)
SharedHandle<Request> req;
if(_requestPool.empty()) {
while(1) {
- std::string uri = selector->select(_uris);
+ std::string uri = selector->select(this);
if(uri.empty()) {
return req;
}
@@ -139,4 +146,51 @@ bool FileEntry::removeRequest(const SharedHandle<Request>& request)
return false;
}
+void FileEntry::removeURIWhoseHostnameIs(const std::string& hostname)
+{
+ std::deque<std::string> newURIs;
+ Request req;
+ for(std::deque<std::string>::const_iterator itr = _uris.begin(); itr != _uris.end(); ++itr) {
+ if(((*itr).find(hostname) == std::string::npos) ||
+ (req.setUrl(*itr) && (req.getHost() != hostname))) {
+ newURIs.push_back(*itr);
+ }
+ }
+ _logger->debug("Removed %d duplicate hostname URIs for path=%s",
+ _uris.size()-newURIs.size(), getPath().c_str());
+ _uris = newURIs;
+}
+
+void FileEntry::removeIdenticalURI(const std::string& uri)
+{
+ _uris.erase(std::remove(_uris.begin(), _uris.end(), uri), _uris.end());
+}
+
+void FileEntry::addURIResult(std::string uri, downloadresultcode::RESULT result)
+{
+ _uriResults.push_back(URIResult(uri, result));
+}
+
+class FindURIResultByResult {
+private:
+ downloadresultcode::RESULT _r;
+public:
+ FindURIResultByResult(downloadresultcode::RESULT r):_r(r) {}
+
+ bool operator()(const URIResult& uriResult) const
+ {
+ return uriResult.getResult() == _r;
+ }
+};
+
+void FileEntry::extractURIResult
+(std::deque<URIResult>& res, downloadresultcode::RESULT r)
+{
+ std::deque<URIResult>::iterator i =
+ std::stable_partition(_uriResults.begin(), _uriResults.end(),
+ FindURIResultByResult(r));
+ std::copy(_uriResults.begin(), i, std::back_inserter(res));
+ _uriResults.erase(_uriResults.begin(), i);
+}
+
} // namespace aria2
diff --git a/src/FileEntry.h b/src/FileEntry.h
index a40be12e..3d9106e9 100644
--- a/src/FileEntry.h
+++ b/src/FileEntry.h
@@ -44,11 +44,15 @@
#include "SharedHandle.h"
#include "File.h"
#include "Request.h"
+#include "URIResult.h"
+#include "DownloadResultCode.h"
namespace aria2 {
class URISelector;
+class Logger;
+
class FileEntry {
private:
std::string path;
@@ -61,8 +65,13 @@ private:
std::deque<SharedHandle<Request> > _requestPool;
std::deque<SharedHandle<Request> > _inFlightRequests;
std::string _contentType;
+ // URIResult is stored in the ascending order of the time when its result is
+ // available.
+ std::deque<URIResult> _uriResults;
+
+ Logger* _logger;
public:
- FileEntry():length(0), offset(0), extracted(false), requested(false) {}
+ FileEntry();
FileEntry(const std::string& path, uint64_t length, off_t offset,
const std::deque<std::string>& uris = std::deque<std::string>());
@@ -116,6 +125,11 @@ public:
return _uris;
}
+ std::deque<std::string>& getRemainingUris()
+ {
+ return _uris;
+ }
+
const std::deque<std::string>& getSpentUris() const
{
return _spentUris;
@@ -159,6 +173,22 @@ public:
// Translate global offset goff to file local offset.
off_t gtoloff(off_t goff) const;
+
+ void removeURIWhoseHostnameIs(const std::string& hostname);
+
+ void removeIdenticalURI(const std::string& uri);
+
+ void addURIResult(std::string uri, downloadresultcode::RESULT result);
+
+ const std::deque<URIResult>& getURIResults() const
+ {
+ return _uriResults;
+ }
+
+ // Extracts URIResult whose _result is r and stores them into res.
+ // The extracted URIResults are removed from _uriResults.
+ void extractURIResult
+ (std::deque<URIResult>& res, downloadresultcode::RESULT r);
};
typedef SharedHandle<FileEntry> FileEntryHandle;
diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc
index 555ea605..9abdaa34 100644
--- a/src/FtpNegotiationCommand.cc
+++ b/src/FtpNegotiationCommand.cc
@@ -65,6 +65,7 @@
#include "AuthConfigFactory.h"
#include "AuthConfig.h"
#include "a2functional.h"
+#include "URISelector.h"
namespace aria2 {
@@ -106,10 +107,11 @@ bool FtpNegotiationCommand::executeInternal() {
SharedHandle<ServerHost> sv =
_requestGroup->searchServerHost(req->getHost());
if(!sv.isNull()) {
- _requestGroup->removeURIWhoseHostnameIs(sv->getHostname());
+ _fileEntry->removeURIWhoseHostnameIs(sv->getHostname());
}
}
- _requestGroup->tuneDownloadCommand(command);
+ _requestGroup->getURISelector()->tuneDownloadCommand
+ (_fileEntry->getRemainingUris(), command);
e->commands.push_back(command);
return true;
} else if(sequence == SEQ_HEAD_OK || sequence == SEQ_DOWNLOAD_ALREADY_COMPLETED) {
@@ -265,7 +267,8 @@ bool FtpNegotiationCommand::recvCwd() {
poolConnection();
_requestGroup->increaseAndValidateFileNotFoundCount();
if (status == 550)
- throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND, DownloadResult::RESOURCE_NOT_FOUND);
+ throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND,
+ downloadresultcode::RESOURCE_NOT_FOUND);
else
throw DL_ABORT_EX(StringFormat(EX_BAD_STATUS, status).str());
}
@@ -579,7 +582,8 @@ bool FtpNegotiationCommand::recvRetr() {
if(status != 150 && status != 125) {
_requestGroup->increaseAndValidateFileNotFoundCount();
if (status == 550)
- throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND, DownloadResult::RESOURCE_NOT_FOUND);
+ throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND,
+ downloadresultcode::RESOURCE_NOT_FOUND);
else
throw DL_ABORT_EX(StringFormat(EX_BAD_STATUS, status).str());
}
diff --git a/src/HttpListenCommand.cc b/src/HttpListenCommand.cc
index 55cec76f..381aa1fa 100644
--- a/src/HttpListenCommand.cc
+++ b/src/HttpListenCommand.cc
@@ -41,6 +41,7 @@
#include "HttpServerCommand.h"
#include "CUIDCounter.h"
#include "RequestGroupMan.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/HttpResponseCommand.cc b/src/HttpResponseCommand.cc
index 9dbf9ffe..4b4d8080 100644
--- a/src/HttpResponseCommand.cc
+++ b/src/HttpResponseCommand.cc
@@ -66,6 +66,7 @@
#include "AuthConfigFactory.h"
#include "AuthConfig.h"
#include "a2functional.h"
+#include "URISelector.h"
namespace aria2 {
@@ -131,7 +132,7 @@ bool HttpResponseCommand::executeInternal()
SharedHandle<ServerHost> sv =
_requestGroup->searchServerHost(req->getHost());
if(!sv.isNull()) {
- _requestGroup->removeURIWhoseHostnameIs(sv->getHostname());
+ _fileEntry->removeURIWhoseHostnameIs(sv->getHostname());
}
}
if(_requestGroup->getPieceStorage().isNull()) {
@@ -409,7 +410,8 @@ HttpDownloadCommand* HttpResponseCommand::createHttpDownloadCommand
_requestGroup->setFileAllocationEnabled(false);
}
- _requestGroup->tuneDownloadCommand(command);
+ _requestGroup->getURISelector()->tuneDownloadCommand
+ (_fileEntry->getRemainingUris(), command);
return command;
}
diff --git a/src/HttpServerResponseCommand.cc b/src/HttpServerResponseCommand.cc
index 054f88be..42e04945 100644
--- a/src/HttpServerResponseCommand.cc
+++ b/src/HttpServerResponseCommand.cc
@@ -40,6 +40,7 @@
#include "HttpServerCommand.h"
#include "RequestGroupMan.h"
#include "RecoverableException.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/HttpSkipResponseCommand.cc b/src/HttpSkipResponseCommand.cc
index ff1bf174..685c785c 100644
--- a/src/HttpSkipResponseCommand.cc
+++ b/src/HttpSkipResponseCommand.cc
@@ -171,7 +171,7 @@ bool HttpSkipResponseCommand::processResponse()
}
}else if(_httpResponse->getResponseStatus() == HttpHeader::S404) {
throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND,
- DownloadResult::RESOURCE_NOT_FOUND);
+ downloadresultcode::RESOURCE_NOT_FOUND);
} else {
throw DL_ABORT_EX(StringFormat(EX_BAD_STATUS, Util::parseUInt(_httpResponse->getResponseStatus())).str());
}
diff --git a/src/InOrderURISelector.cc b/src/InOrderURISelector.cc
index 0f89e863..b08d74e7 100644
--- a/src/InOrderURISelector.cc
+++ b/src/InOrderURISelector.cc
@@ -34,6 +34,7 @@
/* copyright --> */
#include "InOrderURISelector.h"
#include "A2STR.h"
+#include "FileEntry.h"
namespace aria2 {
@@ -41,8 +42,9 @@ InOrderURISelector::InOrderURISelector() {}
InOrderURISelector::~InOrderURISelector() {}
-std::string InOrderURISelector::select(std::deque<std::string>& uris)
+std::string InOrderURISelector::select(FileEntry* fileEntry)
{
+ std::deque<std::string>& uris = fileEntry->getRemainingUris();
if(uris.empty()) {
return A2STR::NIL;
} else {
diff --git a/src/InOrderURISelector.h b/src/InOrderURISelector.h
index 43496f8f..98a29700 100644
--- a/src/InOrderURISelector.h
+++ b/src/InOrderURISelector.h
@@ -44,7 +44,7 @@ public:
virtual ~InOrderURISelector();
- virtual std::string select(std::deque<std::string>& uris);
+ virtual std::string select(FileEntry* fileEntry);
};
} // namespace aria2
diff --git a/src/Makefile.am b/src/Makefile.am
index 235befee..043b29e4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -201,7 +201,8 @@ SRCS = Socket.h\
LongestSequencePieceSelector.cc LongestSequencePieceSelector.h\
bitfield.h\
BDE.cc BDE.h\
- CreateRequestCommand.cc CreateRequestCommand.h
+ CreateRequestCommand.cc CreateRequestCommand.h\
+ DownloadResultCode.h
if ENABLE_XML_RPC
SRCS += XmlRpcRequestParserController.cc XmlRpcRequestParserController.h\
diff --git a/src/Makefile.in b/src/Makefile.in
index 09e34803..348a3088 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -424,7 +424,8 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
SequentialDispatcherCommand.h PieceSelector.h \
LongestSequencePieceSelector.cc LongestSequencePieceSelector.h \
bitfield.h BDE.cc BDE.h CreateRequestCommand.cc \
- CreateRequestCommand.h XmlRpcRequestParserController.cc \
+ CreateRequestCommand.h DownloadResultCode.h \
+ XmlRpcRequestParserController.cc \
XmlRpcRequestParserController.h \
XmlRpcRequestParserStateMachine.cc \
XmlRpcRequestParserStateMachine.h XmlRpcRequestParserState.h \
@@ -1178,15 +1179,15 @@ SRCS = Socket.h SocketCore.cc SocketCore.h BinaryStream.h Command.cc \
SequentialDispatcherCommand.h PieceSelector.h \
LongestSequencePieceSelector.cc LongestSequencePieceSelector.h \
bitfield.h BDE.cc BDE.h CreateRequestCommand.cc \
- CreateRequestCommand.h $(am__append_1) $(am__append_2) \
- $(am__append_3) $(am__append_4) $(am__append_5) \
- $(am__append_6) $(am__append_7) $(am__append_8) \
- $(am__append_9) $(am__append_10) $(am__append_11) \
- $(am__append_12) $(am__append_13) $(am__append_14) \
- $(am__append_15) $(am__append_16) $(am__append_17) \
- $(am__append_18) $(am__append_19) $(am__append_20) \
- $(am__append_21) $(am__append_22) $(am__append_23) \
- $(am__append_24) $(am__append_25)
+ CreateRequestCommand.h DownloadResultCode.h $(am__append_1) \
+ $(am__append_2) $(am__append_3) $(am__append_4) \
+ $(am__append_5) $(am__append_6) $(am__append_7) \
+ $(am__append_8) $(am__append_9) $(am__append_10) \
+ $(am__append_11) $(am__append_12) $(am__append_13) \
+ $(am__append_14) $(am__append_15) $(am__append_16) \
+ $(am__append_17) $(am__append_18) $(am__append_19) \
+ $(am__append_20) $(am__append_21) $(am__append_22) \
+ $(am__append_23) $(am__append_24) $(am__append_25)
noinst_LIBRARIES = libaria2c.a
libaria2c_a_SOURCES = $(SRCS)
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
diff --git a/src/Metalink2RequestGroup.cc b/src/Metalink2RequestGroup.cc
index 1b9a36a4..dcad7912 100644
--- a/src/Metalink2RequestGroup.cc
+++ b/src/Metalink2RequestGroup.cc
@@ -169,13 +169,14 @@ Metalink2RequestGroup::createRequestGroup
if(itr != entry->resources.end()) {
std::deque<std::string> uris;
uris.push_back((*itr)->url);
- torrentRg.reset(new RequestGroup(option, uris));
+ torrentRg.reset(new RequestGroup(option));
SharedHandle<DownloadContext> dctx
(new DownloadContext(option->getAsInt(PREF_SEGMENT_SIZE),
0,
A2STR::NIL));
// Since torrent is downloaded in memory, setting dir has no effect.
//dctx->setDir(_option->get(PREF_DIR));
+ dctx->getFirstFileEntry()->setUris(uris);
torrentRg->setDownloadContext(dctx);
torrentRg->clearPreDowloadHandler();
torrentRg->clearPostDowloadHandler();
@@ -196,7 +197,7 @@ Metalink2RequestGroup::createRequestGroup
std::deque<std::string> uris;
std::for_each(entry->resources.begin(), entry->resources.end(),
AccumulateNonP2PUrl(uris));
- SharedHandle<RequestGroup> rg(new RequestGroup(option, uris));
+ SharedHandle<RequestGroup> rg(new RequestGroup(option));
// If piece hash is specified in the metalink,
// make segment size equal to piece hash size.
size_t pieceLength;
@@ -215,6 +216,7 @@ Metalink2RequestGroup::createRequestGroup
entry->getLength(),
strconcat(option->get(PREF_DIR), "/", entry->file->getPath())));
dctx->setDir(option->get(PREF_DIR));
+ dctx->getFirstFileEntry()->setUris(uris);
#ifdef ENABLE_MESSAGE_DIGEST
if(entry->chunkChecksum.isNull()) {
if(!entry->checksum.isNull()) {
diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc
index 11351ad3..bec4265a 100644
--- a/src/MultiUrlRequestInfo.cc
+++ b/src/MultiUrlRequestInfo.cc
@@ -100,9 +100,9 @@ void MultiUrlRequestInfo::printMessageForContinue()
<< "\n";
}
-DownloadResult::RESULT MultiUrlRequestInfo::execute()
+downloadresultcode::RESULT MultiUrlRequestInfo::execute()
{
- DownloadResult::RESULT returnValue = DownloadResult::FINISHED;
+ downloadresultcode::RESULT returnValue = downloadresultcode::FINISHED;
try {
DownloadEngineHandle e =
DownloadEngineFactory().newDownloadEngine(_option.get(), _requestGroups);
@@ -190,9 +190,9 @@ DownloadResult::RESULT MultiUrlRequestInfo::execute()
RequestGroupMan::DownloadStat s = e->_requestGroupMan->getDownloadStat();
if(!s.allCompleted()) {
printMessageForContinue();
- if(s.getLastErrorResult() == DownloadResult::FINISHED &&
+ if(s.getLastErrorResult() == downloadresultcode::FINISHED &&
s.getInProgress() > 0) {
- returnValue = DownloadResult::IN_PROGRESS;
+ returnValue = downloadresultcode::IN_PROGRESS;
} else {
returnValue = s.getLastErrorResult();
}
diff --git a/src/MultiUrlRequestInfo.h b/src/MultiUrlRequestInfo.h
index aaa9b05f..91706f3d 100644
--- a/src/MultiUrlRequestInfo.h
+++ b/src/MultiUrlRequestInfo.h
@@ -77,7 +77,7 @@ public:
* Returns FINISHED if all downloads have completed, otherwise returns the
* last download result.
*/
- DownloadResult::RESULT execute();
+ downloadresultcode::RESULT execute();
};
typedef SharedHandle<MultiUrlRequestInfo> MultiUrlRequestInfoHandle;
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
index b55c8941..fcbee87c 100644
--- a/src/OptionHandlerFactory.cc
+++ b/src/OptionHandlerFactory.cc
@@ -41,6 +41,7 @@
#include "Util.h"
#include "help_tags.h"
#include "StringFormat.h"
+#include "File.h"
namespace aria2 {
diff --git a/src/PeerListenCommand.cc b/src/PeerListenCommand.cc
index ae9be4b4..70adcf93 100644
--- a/src/PeerListenCommand.cc
+++ b/src/PeerListenCommand.cc
@@ -47,6 +47,7 @@
#include "Logger.h"
#include "Socket.h"
#include "SimpleRandomizer.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/RecoverableException.h b/src/RecoverableException.h
index a91f2a54..cffe2ac4 100644
--- a/src/RecoverableException.h
+++ b/src/RecoverableException.h
@@ -35,13 +35,13 @@
#ifndef _D_RECOVERABLE_EXCEPTION_H_
#define _D_RECOVERABLE_EXCEPTION_H_
#include "Exception.h"
-#include "DownloadResult.h"
+#include "DownloadResultCode.h"
namespace aria2 {
class RecoverableException:public Exception {
private:
- DownloadResult::RESULT _code;
+ downloadresultcode::RESULT _code;
protected:
virtual SharedHandle<Exception> copy() const
@@ -52,23 +52,23 @@ protected:
public:
RecoverableException(const char* file, int line, const std::string& msg):
Exception(file, line, msg),
- _code(DownloadResult::UNKNOWN_ERROR) {}
+ _code(downloadresultcode::UNKNOWN_ERROR) {}
RecoverableException(const char* file, int line, const std::string& msg,
const Exception& cause):
Exception(file, line, msg, cause),
- _code(DownloadResult::UNKNOWN_ERROR) {}
+ _code(downloadresultcode::UNKNOWN_ERROR) {}
RecoverableException(const char* file, int line,
const RecoverableException& e):
Exception(file, line, e),
- _code(DownloadResult::UNKNOWN_ERROR) {}
+ _code(downloadresultcode::UNKNOWN_ERROR) {}
RecoverableException(const char* file, int line, const std::string& msg,
- DownloadResult::RESULT result):
+ downloadresultcode::RESULT result):
Exception(file, line, msg), _code(result) {}
- DownloadResult::RESULT getCode() const { return _code; }
+ downloadresultcode::RESULT getCode() const { return _code; }
};
} // namespace aria2
diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc
index 19432816..3dfa75f1 100644
--- a/src/RequestGroup.cc
+++ b/src/RequestGroup.cc
@@ -112,11 +112,9 @@ int32_t RequestGroup::_gidCounter = 0;
const std::string RequestGroup::ACCEPT_METALINK = "application/metalink+xml";
-RequestGroup::RequestGroup(const SharedHandle<Option>& option,
- const std::deque<std::string>& uris):
+RequestGroup::RequestGroup(const SharedHandle<Option>& option):
_gid(++_gidCounter),
_option(new Option(*option.get())),
- _uris(uris),
_numConcurrentCommand(option->getAsInt(PREF_SPLIT)),
_numStreamConnection(0),
_numCommand(0),
@@ -175,19 +173,19 @@ bool RequestGroup::allDownloadFinished() const
}
}
-DownloadResult::RESULT RequestGroup::downloadResult() const
+downloadresultcode::RESULT RequestGroup::downloadResult() const
{
if (downloadFinished())
- return DownloadResult::FINISHED;
+ return downloadresultcode::FINISHED;
else {
- if (_uriResults.empty()) {
+ if (_lastUriResult.isNull()) {
if(_haltReason == RequestGroup::USER_REQUEST) {
- return DownloadResult::IN_PROGRESS;
+ return downloadresultcode::IN_PROGRESS;
} else {
- return DownloadResult::UNKNOWN_ERROR;
+ return downloadresultcode::UNKNOWN_ERROR;
}
} else {
- return _uriResults.back().getResult();
+ return _lastUriResult->getResult();
}
}
}
@@ -403,6 +401,17 @@ 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()) {
@@ -411,9 +420,9 @@ void RequestGroup::initPieceStorage()
(new DefaultPieceStorage(_downloadContext, _option.get()));
// Use LongestSequencePieceSelector when HTTP/FTP/BitTorrent integrated
// downloads. Currently multi-file integrated download is not supported.
- if(!_uris.empty() &&
- _downloadContext->getFileEntries().size() == 1 &&
- _downloadContext->hasAttribute(bittorrent::BITTORRENT)) {
+ if(_downloadContext->hasAttribute(bittorrent::BITTORRENT) &&
+ hasAssociatedUri(_downloadContext->getFileEntries().begin(),
+ _downloadContext->getFileEntries().end())) {
_logger->debug("Using LongestSequencePieceSelector");
ps->setPieceSelector
(SharedHandle<PieceSelector>(new LongestSequencePieceSelector()));
@@ -578,14 +587,8 @@ void RequestGroup::createNextCommandWithAdj(std::deque<Command*>& commands,
if(getTotalLength() == 0) {
numCommand = 1+numAdj;
} else {
- if(_numConcurrentCommand == 0) {
- // TODO remove _uris.size() support
- numCommand = _uris.size();
- } else {
- numCommand = _numConcurrentCommand;
- }
- numCommand = std::min(static_cast<int>(_downloadContext->getNumPieces()),
- numCommand);
+ numCommand = std::min(_downloadContext->getNumPieces(),
+ _numConcurrentCommand);
numCommand += numAdj;
}
if(numCommand > 0) {
@@ -599,40 +602,40 @@ void RequestGroup::createNextCommand(std::deque<Command*>& commands,
const std::string& method)
{
// TODO1.5 The following block should be moved into FileEntry
- if(_option->getAsBool(PREF_REUSE_URI) && _uris.empty()) {
- std::deque<std::string> uris = _spentUris;
- std::sort(uris.begin(), uris.end());
- uris.erase(std::unique(uris.begin(), uris.end()), uris.end());
-
- std::deque<std::string> errorUris(_uriResults.size());
- std::transform(_uriResults.begin(), _uriResults.end(),
- errorUris.begin(), std::mem_fun_ref(&URIResult::getURI));
- std::sort(errorUris.begin(), errorUris.end());
- errorUris.erase(std::unique(errorUris.begin(), errorUris.end()),
- errorUris.end());
+// if(_option->getAsBool(PREF_REUSE_URI) && _uris.empty()) {
+// std::deque<std::string> uris = _spentUris;
+// std::sort(uris.begin(), uris.end());
+// uris.erase(std::unique(uris.begin(), uris.end()), uris.end());
+
+// std::deque<std::string> errorUris(_uriResults.size());
+// std::transform(_uriResults.begin(), _uriResults.end(),
+// errorUris.begin(), std::mem_fun_ref(&URIResult::getURI));
+// std::sort(errorUris.begin(), errorUris.end());
+// errorUris.erase(std::unique(errorUris.begin(), errorUris.end()),
+// errorUris.end());
- std::deque<std::string> reusableURIs;
- std::set_difference(uris.begin(), uris.end(),
- errorUris.begin(), errorUris.end(),
- std::back_inserter(reusableURIs));
- size_t ininum = reusableURIs.size();
- _logger->debug("Found %u reusable URIs",
- static_cast<unsigned int>(ininum));
- // Reuse at least _numConcurrentCommand URIs here to avoid to
- // run this process repeatedly.
- if(ininum > 0 && ininum < _numConcurrentCommand) {
- _logger->debug("fewer than _numConcurrentCommand=%u",
- _numConcurrentCommand);
- for(size_t i = 0; i < _numConcurrentCommand/ininum; ++i) {
- _uris.insert(_uris.end(), reusableURIs.begin(), reusableURIs.end());
- }
- _uris.insert(_uris.end(), reusableURIs.begin(),
- reusableURIs.begin()+(_numConcurrentCommand%ininum));
- _logger->debug("Duplication complete: now %u URIs for reuse",
- static_cast<unsigned int>(_uris.size()));
- }
- }
- std::deque<std::string> pendingURIs;
+// std::deque<std::string> reusableURIs;
+// std::set_difference(uris.begin(), uris.end(),
+// errorUris.begin(), errorUris.end(),
+// std::back_inserter(reusableURIs));
+// size_t ininum = reusableURIs.size();
+// _logger->debug("Found %u reusable URIs",
+// static_cast<unsigned int>(ininum));
+// // Reuse at least _numConcurrentCommand URIs here to avoid to
+// // run this process repeatedly.
+// if(ininum > 0 && ininum < _numConcurrentCommand) {
+// _logger->debug("fewer than _numConcurrentCommand=%u",
+// _numConcurrentCommand);
+// for(size_t i = 0; i < _numConcurrentCommand/ininum; ++i) {
+// _uris.insert(_uris.end(), reusableURIs.begin(), reusableURIs.end());
+// }
+// _uris.insert(_uris.end(), reusableURIs.begin(),
+// reusableURIs.begin()+(_numConcurrentCommand%ininum));
+// _logger->debug("Duplication complete: now %u URIs for reuse",
+// static_cast<unsigned int>(_uris.size()));
+// }
+// }
+// std::deque<std::string> pendingURIs;
for(; numCommand--; ) {
Command* command = new CreateRequestCommand(e->newCUID(), this, e);
@@ -917,12 +920,6 @@ void RequestGroup::initializePostDownloadHandler()
#endif // ENABLE_METALINK
}
-void RequestGroup::getURIs(std::deque<std::string>& uris) const
-{
- uris.insert(uris.end(), _spentUris.begin(), _spentUris.end());
- uris.insert(uris.end(), _uris.begin(), _uris.end());
-}
-
bool RequestGroup::isDependencyResolved()
{
if(_dependency.isNull()) {
@@ -985,9 +982,6 @@ bool RequestGroup::needsFileAllocation() const
DownloadResultHandle RequestGroup::createDownloadResult() const
{
- std::deque<std::string> uris;
- getURIs(uris);
-
uint64_t sessionDownloadLength = 0;
#ifdef ENABLE_BITTORRENT
@@ -1001,14 +995,12 @@ DownloadResultHandle RequestGroup::createDownloadResult() const
_segmentMan->calculateSessionDownloadLength();
}
+ // TODO1.5 Purge unnecessary data in FileEntry here.
return
SharedHandle<DownloadResult>
(new DownloadResult(_gid,
_downloadContext->getFileEntries(),
_inMemoryDownload,
- getTotalLength(),
- uris.empty() ? A2STR::NIL:uris.front(),
- uris.size(),
sessionDownloadLength,
_downloadContext->calculateSessionTime(),
downloadResult()));
@@ -1072,26 +1064,6 @@ void RequestGroup::removeServerHost(int32_t cuid)
_serverHosts.erase(std::remove_if(_serverHosts.begin(), _serverHosts.end(), FindServerHostByCUID(cuid)), _serverHosts.end());
}
-void RequestGroup::removeURIWhoseHostnameIs(const std::string& hostname)
-{
- std::deque<std::string> newURIs;
- Request req;
- for(std::deque<std::string>::const_iterator itr = _uris.begin(); itr != _uris.end(); ++itr) {
- if(((*itr).find(hostname) == std::string::npos) ||
- (req.setUrl(*itr) && (req.getHost() != hostname))) {
- newURIs.push_back(*itr);
- }
- }
- _logger->debug("GUID#%d - Removed %d duplicate hostname URIs",
- _gid, _uris.size()-newURIs.size());
- _uris = newURIs;
-}
-
-void RequestGroup::removeIdenticalURI(const std::string& uri)
-{
- _uris.erase(std::remove(_uris.begin(), _uris.end(), uri), _uris.end());
-}
-
void RequestGroup::reportDownloadFinished()
{
_logger->notice(MSG_FILE_DOWNLOAD_COMPLETED,
@@ -1155,7 +1127,7 @@ void RequestGroup::increaseAndValidateFileNotFoundCount()
_segmentMan->calculateSessionDownloadLength() == 0) {
throw DOWNLOAD_FAILURE_EXCEPTION2
(StringFormat("Reached max-file-not-found count=%u", maxCount).str(),
- DownloadResult::MAX_FILE_NOT_FOUND);
+ downloadresultcode::MAX_FILE_NOT_FOUND);
}
}
@@ -1164,38 +1136,6 @@ void RequestGroup::markInMemoryDownload()
_inMemoryDownload = true;
}
-void RequestGroup::tuneDownloadCommand(DownloadCommand* command)
-{
- _uriSelector->tuneDownloadCommand(_uris, command);
-}
-
-void RequestGroup::addURIResult(std::string uri, DownloadResult::RESULT result)
-{
- _uriResults.push_back(URIResult(uri, result));
-}
-
-class FindURIResultByResult {
-private:
- DownloadResult::RESULT _r;
-public:
- FindURIResultByResult(DownloadResult::RESULT r):_r(r) {}
-
- bool operator()(const URIResult& uriResult) const
- {
- return uriResult.getResult() == _r;
- }
-};
-
-void RequestGroup::extractURIResult
-(std::deque<URIResult>& res, DownloadResult::RESULT r)
-{
- std::deque<URIResult>::iterator i =
- std::stable_partition(_uriResults.begin(), _uriResults.end(),
- FindURIResultByResult(r));
- std::copy(_uriResults.begin(), i, std::back_inserter(res));
- _uriResults.erase(_uriResults.begin(), i);
-}
-
void RequestGroup::setTimeout(time_t timeout)
{
_timeout = timeout;
@@ -1213,4 +1153,10 @@ bool RequestGroup::doesUploadSpeedExceed()
_maxUploadSpeedLimit < calculateStat().getUploadSpeed();
}
+void RequestGroup::setLastUriResult
+(const std::string uri, downloadresultcode::RESULT result)
+{
+ _lastUriResult.reset(new URIResult(uri, result));
+}
+
} // namespace aria2
diff --git a/src/RequestGroup.h b/src/RequestGroup.h
index 3d579929..889cfc7c 100644
--- a/src/RequestGroup.h
+++ b/src/RequestGroup.h
@@ -44,8 +44,7 @@
#include "TransferStat.h"
#include "TimeA2.h"
#include "Request.h"
-#include "DownloadResult.h"
-#include "URIResult.h"
+#include "DownloadResultCode.h"
namespace aria2 {
@@ -68,6 +67,7 @@ class CheckIntegrityEntry;
class DownloadResult;
class ServerHost;
class URISelector;
+class URIResult;
#ifdef ENABLE_BITTORRENT
class BtRuntime;
class PeerStorage;
@@ -87,10 +87,7 @@ private:
SharedHandle<Option> _option;
- std::deque<std::string> _uris;
- std::deque<std::string> _spentUris;
-
- unsigned int _numConcurrentCommand;
+ size_t _numConcurrentCommand;
/**
* This is the number of connections used in streaming protocol(http/ftp)
@@ -124,10 +121,6 @@ private:
HaltReason _haltReason;
- // URIResult is stored in the ascending order of the time when its result is
- // available.
- std::deque<URIResult> _uriResults;
-
bool _singleHostMultiConnectionEnabled;
std::deque<SharedHandle<PreDownloadHandler> > _preDownloadHandlers;
@@ -159,6 +152,8 @@ private:
unsigned int _maxUploadSpeedLimit;
+ SharedHandle<URIResult> _lastUriResult;
+
Logger* _logger;
void validateFilename(const std::string& expectedFilename,
@@ -170,15 +165,14 @@ private:
bool tryAutoFileRenaming();
- // Returns the result code of this RequestGroup.
- // If the download finished, then returns DownloadResult::FINISHED.
- // If the download didn't finish and error result is available in _uriResults,
- // then last result code is returned.
- // Otherwise returns DownloadResult::UNKNOWN_ERROR.
- DownloadResult::RESULT downloadResult() const;
+ // Returns the result code of this RequestGroup. If the download
+ // finished, then returns downloadresultcode::FINISHED. If the
+ // download didn't finish and error result is available in
+ // _uriResults, then last result code is returned. Otherwise
+ // returns downloadresultcode::UNKNOWN_ERROR.
+ downloadresultcode::RESULT downloadResult() const;
public:
- RequestGroup(const SharedHandle<Option>& option,
- const std::deque<std::string>& uris);
+ RequestGroup(const SharedHandle<Option>& option);
~RequestGroup();
/**
@@ -210,11 +204,6 @@ public:
DownloadEngine* e, unsigned int numCommand,
const std::string& method = Request::METHOD_GET);
- void addURI(const std::string& uri)
- {
- _uris.push_back(uri);
- }
-
bool downloadFinished() const;
bool allDownloadFinished() const;
@@ -227,18 +216,6 @@ public:
uint64_t getCompletedLength() const;
- const std::deque<std::string>& getRemainingUris() const
- {
- return _uris;
- }
-
- const std::deque<std::string>& getSpentUris() const
- {
- return _spentUris;
- }
-
- void getURIs(std::deque<std::string>& uris) const;
-
/**
* Compares expected filename with specified actualFilename.
* The expected filename refers to FileEntry::getBasename() of the first
@@ -358,17 +335,6 @@ public:
return _forceHaltRequested;
}
- void addURIResult(std::string uri, DownloadResult::RESULT result);
-
- const std::deque<URIResult>& getURIResults() const
- {
- return _uriResults;
- }
-
- // Extracts URIResult whose _result is r and stores them into res.
- // The extracted URIResults are removed from _uriResults.
- void extractURIResult(std::deque<URIResult>& res, DownloadResult::RESULT r);
-
void dependsOn(const SharedHandle<Dependency>& dep);
bool isDependencyResolved();
@@ -433,10 +399,6 @@ public:
void removeServerHost(int32_t cuid);
- void removeURIWhoseHostnameIs(const std::string& hostname);
-
- void removeIdenticalURI(const std::string& uri);
-
void reportDownloadFinished();
const std::deque<std::string>& getAcceptTypes() const
@@ -472,8 +434,6 @@ public:
return _inMemoryDownload;
}
- void tuneDownloadCommand(DownloadCommand* command);
-
void setTimeout(time_t timeout);
time_t getTimeout() const
@@ -511,6 +471,8 @@ public:
_maxUploadSpeedLimit = speed;
}
+ void setLastUriResult(std::string uri, downloadresultcode::RESULT result);
+
static void resetGIDCounter() { _gidCounter = 0; }
};
diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc
index 9069a4dd..ff3aaee4 100644
--- a/src/RequestGroupMan.cc
+++ b/src/RequestGroupMan.cc
@@ -249,10 +249,10 @@ static void executeStartHook
static void executeStopHook
(const SharedHandle<DownloadResult>& result, const Option* option)
{
- if(result->result == DownloadResult::FINISHED &&
+ if(result->result == downloadresultcode::FINISHED &&
!option->blank(PREF_ON_DOWNLOAD_COMPLETE)) {
executeHook(option->get(PREF_ON_DOWNLOAD_COMPLETE), result->gid);
- } else if(result->result != DownloadResult::IN_PROGRESS &&
+ } else if(result->result != downloadresultcode::IN_PROGRESS &&
!option->blank(PREF_ON_DOWNLOAD_ERROR)) {
executeHook(option->get(PREF_ON_DOWNLOAD_ERROR), result->gid);
} else if(!option->blank(PREF_ON_DOWNLOAD_STOP)) {
@@ -531,10 +531,10 @@ RequestGroupMan::DownloadStat RequestGroupMan::getDownloadStat() const
size_t finished = 0;
size_t error = 0;
size_t inprogress = 0;
- DownloadResult::RESULT lastError = DownloadResult::FINISHED;
+ downloadresultcode::RESULT lastError = downloadresultcode::FINISHED;
for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr = _downloadResults.begin();
itr != _downloadResults.end(); ++itr) {
- if((*itr)->result == DownloadResult::FINISHED) {
+ if((*itr)->result == downloadresultcode::FINISHED) {
++finished;
} else {
++error;
@@ -544,7 +544,7 @@ RequestGroupMan::DownloadStat RequestGroupMan::getDownloadStat() const
for(RequestGroups::const_iterator itr = _requestGroups.begin();
itr != _requestGroups.end(); ++itr) {
DownloadResultHandle result = (*itr)->createDownloadResult();
- if(result->result == DownloadResult::FINISHED) {
+ if(result->result == downloadresultcode::FINISHED) {
++finished;
} else {
++inprogress;
@@ -575,10 +575,10 @@ void RequestGroupMan::showDownloadResults(std::ostream& o) const
for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr = _downloadResults.begin();
itr != _downloadResults.end(); ++itr) {
std::string status;
- if((*itr)->result == DownloadResult::FINISHED) {
+ if((*itr)->result == downloadresultcode::FINISHED) {
status = MARK_OK;
++ok;
- } else if((*itr)->result == DownloadResult::IN_PROGRESS) {
+ } else if((*itr)->result == downloadresultcode::IN_PROGRESS) {
status = MARK_INPR;
++inpr;
} else {
@@ -591,7 +591,7 @@ void RequestGroupMan::showDownloadResults(std::ostream& o) const
itr != _requestGroups.end(); ++itr) {
DownloadResultHandle result = (*itr)->createDownloadResult();
std::string status;
- if(result->result == DownloadResult::FINISHED) {
+ if(result->result == downloadresultcode::FINISHED) {
status = MARK_OK;
++ok;
} else {
@@ -639,16 +639,8 @@ std::string RequestGroupMan::formatDownloadResult(const std::string& status, con
o << "|";
const std::vector<SharedHandle<FileEntry> >& fileEntries =
downloadResult->fileEntries;
- if(downloadResult->result == DownloadResult::FINISHED ||
- downloadResult->numUri == 0) {
- writeFilePath(fileEntries.begin(), fileEntries.end(), o,
- downloadResult->inMemoryDownload);
- } else {
- o << downloadResult->uri;
- if(downloadResult->numUri > 1) {
- o << " (" << downloadResult->numUri-1 << "more)";
- }
- }
+ writeFilePath(fileEntries.begin(), fileEntries.end(), o,
+ downloadResult->inMemoryDownload);
return o.str();
}
diff --git a/src/RequestGroupMan.h b/src/RequestGroupMan.h
index 58032cd6..1652ae08 100644
--- a/src/RequestGroupMan.h
+++ b/src/RequestGroupMan.h
@@ -146,21 +146,21 @@ public:
size_t _error;
size_t _inProgress;
size_t _waiting;
- DownloadResult::RESULT _lastErrorResult;
+ downloadresultcode::RESULT _lastErrorResult;
public:
DownloadStat(size_t completed,
size_t error,
size_t inProgress,
size_t waiting,
- DownloadResult::RESULT lastErrorResult =
- DownloadResult::FINISHED):
+ downloadresultcode::RESULT lastErrorResult =
+ downloadresultcode::FINISHED):
_completed(completed),
_error(error),
_inProgress(inProgress),
_waiting(waiting),
_lastErrorResult(lastErrorResult) {}
- DownloadResult::RESULT getLastErrorResult() const
+ downloadresultcode::RESULT getLastErrorResult() const
{
return _lastErrorResult;
}
diff --git a/src/TimedHaltCommand.cc b/src/TimedHaltCommand.cc
index 48e1170f..6fc0a4e6 100644
--- a/src/TimedHaltCommand.cc
+++ b/src/TimedHaltCommand.cc
@@ -37,6 +37,7 @@
#include "RequestGroupMan.h"
#include "Logger.h"
#include "message.h"
+#include "FileEntry.h"
namespace aria2 {
diff --git a/src/TrackerWatcherCommand.cc b/src/TrackerWatcherCommand.cc
index dddf163e..3ad1110e 100644
--- a/src/TrackerWatcherCommand.cc
+++ b/src/TrackerWatcherCommand.cc
@@ -200,7 +200,7 @@ TrackerWatcherCommand::createRequestGroup(const std::string& uri)
{
std::deque<std::string> uris;
uris.push_back(uri);
- RequestGroupHandle rg(new RequestGroup(getOption(), uris));
+ RequestGroupHandle rg(new RequestGroup(getOption()));
// If backup tracker is available, only try 2 times for each tracker
// and if they all fails, then try next one.
if(backupTrackerIsAvailable(_requestGroup->getDownloadContext())) {
diff --git a/src/URIResult.cc b/src/URIResult.cc
index e848d70f..ecdcbef5 100644
--- a/src/URIResult.cc
+++ b/src/URIResult.cc
@@ -36,7 +36,7 @@
namespace aria2 {
-URIResult::URIResult(const std::string& uri, DownloadResult::RESULT result):
+URIResult::URIResult(const std::string& uri, downloadresultcode::RESULT result):
_uri(uri), _result(result) {}
} // namespace aria2
diff --git a/src/URIResult.h b/src/URIResult.h
index 45380690..f5d956ba 100644
--- a/src/URIResult.h
+++ b/src/URIResult.h
@@ -39,7 +39,7 @@
#include <string>
-#include "DownloadResult.h"
+#include "DownloadResultCode.h"
namespace aria2 {
@@ -48,16 +48,16 @@ class URIResult {
private:
std::string _uri;
- DownloadResult::RESULT _result;
+ downloadresultcode::RESULT _result;
public:
- URIResult(const std::string& uri, DownloadResult::RESULT result);
+ URIResult(const std::string& uri, downloadresultcode::RESULT result);
const std::string& getURI() const
{
return _uri;
}
- DownloadResult::RESULT getResult() const
+ downloadresultcode::RESULT getResult() const
{
return _result;
}
diff --git a/src/URISelector.h b/src/URISelector.h
index d00aeb54..76c259b2 100644
--- a/src/URISelector.h
+++ b/src/URISelector.h
@@ -41,14 +41,15 @@
namespace aria2 {
class DownloadCommand;
+class FileEntry;
class URISelector {
public:
virtual ~URISelector() {}
- virtual std::string select(std::deque<std::string>& uris) = 0;
+ virtual std::string select(FileEntry* fileEntry) = 0;
- virtual void tuneDownloadCommand(std::deque<std::string>& uris,
+ virtual void tuneDownloadCommand(const std::deque<std::string>& uris,
DownloadCommand* command) {};
virtual void resetCounters() { return; };
diff --git a/src/XmlRpcMethodImpl.cc b/src/XmlRpcMethodImpl.cc
index 954369c2..d3f0d78e 100644
--- a/src/XmlRpcMethodImpl.cc
+++ b/src/XmlRpcMethodImpl.cc
@@ -344,9 +344,9 @@ static void gatherStoppedDownload
(BDE& entryDict, const SharedHandle<DownloadResult>& ds)
{
entryDict["gid"] = Util::itos(ds->gid);
- if(ds->result == DownloadResult::IN_PROGRESS) {
+ if(ds->result == downloadresultcode::IN_PROGRESS) {
entryDict["status"] = BDE_REMOVED;
- } else if(ds->result == DownloadResult::FINISHED) {
+ } else if(ds->result == downloadresultcode::FINISHED) {
entryDict["status"] = BDE_COMPLETE;
} else {
entryDict["status"] = BDE_ERROR;
@@ -428,7 +428,9 @@ BDE GetUrisXmlRpcMethod::process
}
BDE uriList = BDE::list();
std::deque<std::string> uris;
- group->getURIs(uris);
+ // TODO1.5 getUris should return list of URIs attached to each FileEntry.
+ // Current implementation just returns first FileEntry's URIs.
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
for(std::deque<std::string>::const_iterator i = uris.begin(); i != uris.end();
++i) {
BDE entry = BDE::dict();
diff --git a/src/bittorrent_helper.cc b/src/bittorrent_helper.cc
index cb3be528..b21d9cc8 100644
--- a/src/bittorrent_helper.cc
+++ b/src/bittorrent_helper.cc
@@ -301,7 +301,8 @@ static void processRootDictionary
(const SharedHandle<DownloadContext>& ctx,
const BDE& rootDict,
const std::string& defaultName,
- const std::string& overrideName)
+ const std::string& overrideName,
+ const std::deque<std::string>& uris)
{
if(!rootDict.isDict()) {
throw DL_ABORT_EX("torrent file does not contain a root dictionary.");
@@ -359,6 +360,9 @@ static void processRootDictionary
// see http://www.getright.com/seedtorrent.html
std::vector<std::string> urlList;
extractUrlList(urlList, rootDict[C_URL_LIST]);
+ urlList.insert(urlList.end(), uris.begin(), uris.end());
+ std::sort(urlList.begin(), urlList.end());
+ urlList.erase(std::unique(urlList.begin(), urlList.end()), urlList.end());
// retrieve file entries
extractFileEntries(ctx, torrent, infoDict, defaultName, overrideName, urlList);
@@ -380,8 +384,20 @@ void load(const std::string& torrentFile,
processRootDictionary(ctx,
bencode::decodeFromFile(torrentFile),
torrentFile,
- overrideName);
+ overrideName,
+ std::deque<std::string>());
+}
+void load(const std::string& torrentFile,
+ const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
+ const std::string& overrideName)
+{
+ processRootDictionary(ctx,
+ bencode::decodeFromFile(torrentFile),
+ torrentFile,
+ overrideName,
+ uris);
}
void loadFromMemory(const unsigned char* content,
@@ -393,11 +409,40 @@ void loadFromMemory(const unsigned char* content,
processRootDictionary(ctx,
bencode::decode(content, length),
defaultName,
- overrideName);
+ overrideName,
+ std::deque<std::string>());
+}
+
+void loadFromMemory(const unsigned char* content,
+ size_t length,
+ const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
+ const std::string& defaultName,
+ const std::string& overrideName)
+{
+ processRootDictionary(ctx,
+ bencode::decode(content, length),
+ defaultName,
+ overrideName,
+ uris);
+}
+
+void loadFromMemory(const std::string& context,
+ const SharedHandle<DownloadContext>& ctx,
+ const std::string& defaultName,
+ const std::string& overrideName)
+{
+ processRootDictionary
+ (ctx,
+ bencode::decode(reinterpret_cast<const unsigned char*>(context.c_str()),
+ context.size()),
+ defaultName, overrideName,
+ std::deque<std::string>());
}
void loadFromMemory(const std::string& context,
const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
const std::string& defaultName,
const std::string& overrideName)
{
@@ -405,7 +450,8 @@ void loadFromMemory(const std::string& context,
(ctx,
bencode::decode(reinterpret_cast<const unsigned char*>(context.c_str()),
context.size()),
- defaultName, overrideName);
+ defaultName, overrideName,
+ uris);
}
const unsigned char*
diff --git a/src/bittorrent_helper.h b/src/bittorrent_helper.h
index 99db7d9a..a53a222e 100644
--- a/src/bittorrent_helper.h
+++ b/src/bittorrent_helper.h
@@ -39,6 +39,7 @@
#include <string>
#include <vector>
+#include <deque>
#include "SharedHandle.h"
#include "AnnounceTier.h"
@@ -78,13 +79,30 @@ void load(const std::string& torrentFile,
const SharedHandle<DownloadContext>& ctx,
const std::string& overrideName = "");
+void load(const std::string& torrentFile,
+ const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
+ const std::string& overrideName = "");
+
+void loadFromMemory(const unsigned char* content, size_t length,
+ const SharedHandle<DownloadContext>& ctx,
+ const std::string& defaultName,
+ const std::string& overrideName = "");
+
void loadFromMemory(const unsigned char* content, size_t length,
const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
+ const std::string& defaultName,
+ const std::string& overrideName = "");
+
+void loadFromMemory(const std::string& context,
+ const SharedHandle<DownloadContext>& ctx,
const std::string& defaultName,
const std::string& overrideName = "");
void loadFromMemory(const std::string& context,
const SharedHandle<DownloadContext>& ctx,
+ const std::deque<std::string>& uris,
const std::string& defaultName,
const std::string& overrideName = "");
diff --git a/src/download_helper.cc b/src/download_helper.cc
index baabf94e..a0adb72c 100644
--- a/src/download_helper.cc
+++ b/src/download_helper.cc
@@ -179,7 +179,7 @@ static SharedHandle<RequestGroup> createRequestGroup
(const SharedHandle<Option>& option, const std::deque<std::string>& uris,
bool useOutOption = false)
{
- SharedHandle<RequestGroup> rg(new RequestGroup(option, uris));
+ SharedHandle<RequestGroup> rg(new RequestGroup(option));
SharedHandle<DownloadContext> dctx
(new DownloadContext
(option->getAsInt(PREF_SEGMENT_SIZE),
@@ -201,15 +201,16 @@ createBtRequestGroup(const std::string& torrentFilePath,
const std::deque<std::string>& auxUris,
const std::string& torrentData = "")
{
- SharedHandle<RequestGroup> rg(new RequestGroup(option, auxUris));
+ SharedHandle<RequestGroup> rg(new RequestGroup(option));
SharedHandle<DownloadContext> dctx(new DownloadContext());
dctx->setDir(option->get(PREF_DIR));
+ // TODO1.5 Add additional argument auxUris for bittorrent::load* functions.
if(torrentData.empty()) {
- bittorrent::load(torrentFilePath, dctx);// may throw exception
+ bittorrent::load(torrentFilePath, dctx, auxUris);// may throw exception
} else {
- bittorrent::loadFromMemory(torrentData, dctx, "default"); // may
- // throw
- // exception
+ bittorrent::loadFromMemory(torrentData, dctx, auxUris, "default"); // may
+ // throw
+ // exception
}
dctx->setFileFilter(Util::parseIntRange(option->get(PREF_SELECT_FILE)));
std::istringstream indexOutIn(option->get(PREF_INDEX_OUT));
diff --git a/src/main.cc b/src/main.cc
index a3a13ffb..5b990c63 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -165,7 +165,7 @@ static void showFiles
extern void option_processing(Option& option, std::deque<std::string>& uris,
int argc, char* const argv[]);
-DownloadResult::RESULT main(int argc, char* argv[])
+downloadresultcode::RESULT main(int argc, char* argv[])
{
std::deque<std::string> args;
SharedHandle<Option> op(new Option());
@@ -192,7 +192,7 @@ DownloadResult::RESULT main(int argc, char* argv[])
if(op->get(PREF_EVENT_POLL) == V_SELECT) {
SocketCore::useSelect();
}
- DownloadResult::RESULT exitStatus = DownloadResult::FINISHED;
+ downloadresultcode::RESULT exitStatus = downloadresultcode::FINISHED;
try {
Logger* logger = LogFactory::getInstance();
logger->info("<<--- --- --- ---");
@@ -253,7 +253,7 @@ DownloadResult::RESULT main(int argc, char* argv[])
}
} catch(Exception& ex) {
std::cerr << EX_EXCEPTION_CAUGHT << "\n" << ex.stackTrace() << std::endl;
- exitStatus = DownloadResult::UNKNOWN_ERROR;
+ exitStatus = downloadresultcode::UNKNOWN_ERROR;
}
LogFactory::release();
return exitStatus;
@@ -264,7 +264,7 @@ DownloadResult::RESULT main(int argc, char* argv[])
int main(int argc, char* argv[]) {
aria2::Platform platform;
- aria2::DownloadResult::RESULT r = aria2::main(argc, argv);
+ aria2::downloadresultcode::RESULT r = aria2::main(argc, argv);
return r;
}
diff --git a/src/option_processing.cc b/src/option_processing.cc
index 240f2bac..9741e4ff 100644
--- a/src/option_processing.cc
+++ b/src/option_processing.cc
@@ -53,7 +53,7 @@
#include "File.h"
#include "StringFormat.h"
#include "OptionHandlerException.h"
-#include "DownloadResult.h"
+#include "DownloadResultCode.h"
#include "SimpleRandomizer.h"
#include "bittorrent_helper.h"
@@ -98,7 +98,7 @@ void option_processing(Option& op, std::deque<std::string>& uris,
if(op.defined("version")) {
showVersion();
- exit(DownloadResult::FINISHED);
+ exit(downloadresultcode::FINISHED);
}
if(op.defined("help")) {
std::string keyword;
@@ -115,7 +115,7 @@ void option_processing(Option& op, std::deque<std::string>& uris,
}
}
showUsage(keyword, oparser);
- exit(DownloadResult::FINISHED);
+ exit(downloadresultcode::FINISHED);
}
}
@@ -137,18 +137,18 @@ void option_processing(Option& op, std::deque<std::string>& uris,
<< "Usage:" << "\n"
<< oparser.findByName(e.getOptionName())->getDescription()
<< std::endl;
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
} catch(Exception& e) {
std::cerr << "Parse error in " << cfname << "\n"
<< e.stackTrace() << std::endl;
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
}
} else if(!ucfname.empty()) {
std::cerr << StringFormat("Configuration file %s is not found.",
cfname.c_str())
<< "\n";
showUsage(TAG_HELP, oparser);
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
}
}
// Override configuration with environment variables.
@@ -168,11 +168,11 @@ void option_processing(Option& op, std::deque<std::string>& uris,
<< "Usage:" << "\n"
<< oparser.findByName(e.getOptionName())
<< std::endl;
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
} catch(Exception& e) {
std::cerr << e.stackTrace() << std::endl;
showUsage(TAG_HELP, oparser);
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
}
if(
#ifdef ENABLE_XML_RPC
@@ -188,7 +188,7 @@ void option_processing(Option& op, std::deque<std::string>& uris,
if(uris.empty()) {
std::cerr << MSG_URI_REQUIRED << std::endl;
showUsage(TAG_HELP, oparser);
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
}
}
#ifdef HAVE_DAEMON
@@ -200,7 +200,7 @@ void option_processing(Option& op, std::deque<std::string>& uris,
}
if(daemon(0, 0) < 0) {
perror(MSG_DAEMON_FAILED);
- exit(DownloadResult::UNKNOWN_ERROR);
+ exit(downloadresultcode::UNKNOWN_ERROR);
}
}
#endif // HAVE_DAEMON
diff --git a/test/BtDependencyTest.cc b/test/BtDependencyTest.cc
index 104921b2..588f8579 100644
--- a/test/BtDependencyTest.cc
+++ b/test/BtDependencyTest.cc
@@ -27,8 +27,7 @@ class BtDependencyTest:public CppUnit::TestFixture {
SharedHandle<RequestGroup> createDependant(const SharedHandle<Option>& option)
{
- SharedHandle<RequestGroup> dependant
- (new RequestGroup(option, std::deque<std::string>()));
+ SharedHandle<RequestGroup> dependant(new RequestGroup(option));
SharedHandle<DownloadContext> dctx
(new DownloadContext(0, 0, "/tmp/outfile.path"));
dctx->setDir("/tmp");
@@ -42,8 +41,7 @@ class BtDependencyTest:public CppUnit::TestFixture {
const std::string& torrentFile,
int64_t length)
{
- SharedHandle<RequestGroup> dependee
- (new RequestGroup(option, std::deque<std::string>()));
+ SharedHandle<RequestGroup> dependee(new RequestGroup(option));
SharedHandle<DownloadContext> dctx
(new DownloadContext(1024*1024, length, torrentFile));
dctx->setDir(".");
diff --git a/test/BtPostDownloadHandlerTest.cc b/test/BtPostDownloadHandlerTest.cc
index 17d83c59..4c786dc8 100644
--- a/test/BtPostDownloadHandlerTest.cc
+++ b/test/BtPostDownloadHandlerTest.cc
@@ -36,7 +36,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( BtPostDownloadHandlerTest );
void BtPostDownloadHandlerTest::testCanHandle_extension()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test.torrent"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
BtPostDownloadHandler handler;
@@ -51,7 +51,7 @@ void BtPostDownloadHandlerTest::testCanHandle_contentType()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test"));
dctx->getFirstFileEntry()->setContentType("application/x-bittorrent");
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
BtPostDownloadHandler handler;
@@ -66,7 +66,7 @@ void BtPostDownloadHandlerTest::testGetNextRequestGroups()
{
SharedHandle<DownloadContext> dctx
(new DownloadContext(1024, 0, "test.torrent"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
rg.initPieceStorage();
diff --git a/test/CookieStorageTest.cc b/test/CookieStorageTest.cc
index 2a3c4437..2f4cd8ac 100644
--- a/test/CookieStorageTest.cc
+++ b/test/CookieStorageTest.cc
@@ -10,6 +10,7 @@
#include "TimeA2.h"
#include "CookieParser.h"
#include "RecoverableException.h"
+#include "File.h"
namespace aria2 {
diff --git a/test/DefaultBtMessageDispatcherTest.cc b/test/DefaultBtMessageDispatcherTest.cc
index a8de2984..4c620406 100644
--- a/test/DefaultBtMessageDispatcherTest.cc
+++ b/test/DefaultBtMessageDispatcherTest.cc
@@ -137,7 +137,7 @@ public:
void setUp() {
_option.reset(new Option());
- _rg.reset(new RequestGroup(_option, std::deque<std::string>()));
+ _rg.reset(new RequestGroup(_option));
_dctx.reset(new DownloadContext());
bittorrent::load("test.torrent", _dctx);
diff --git a/test/DownloadHandlerFactoryTest.cc b/test/DownloadHandlerFactoryTest.cc
index 4bf4eea3..0e384661 100644
--- a/test/DownloadHandlerFactoryTest.cc
+++ b/test/DownloadHandlerFactoryTest.cc
@@ -51,7 +51,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( DownloadHandlerFactoryTest );
void DownloadHandlerFactoryTest::testGetMetalinkPreDownloadHandler_extension()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test.metalink"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
SharedHandle<PreDownloadHandler> handler = DownloadHandlerFactory::getMetalinkPreDownloadHandler();
@@ -66,7 +66,7 @@ void DownloadHandlerFactoryTest::testGetMetalinkPreDownloadHandler_contentType()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test"));
dctx->getFirstFileEntry()->setContentType("application/metalink+xml");
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
SharedHandle<PreDownloadHandler> handler = DownloadHandlerFactory::getMetalinkPreDownloadHandler();
@@ -84,7 +84,7 @@ void DownloadHandlerFactoryTest::testGetMetalinkPreDownloadHandler_contentType()
void DownloadHandlerFactoryTest::testGetBtPreDownloadHandler_extension()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test.torrent"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
SharedHandle<PreDownloadHandler> handler = DownloadHandlerFactory::getBtPreDownloadHandler();
@@ -99,7 +99,7 @@ void DownloadHandlerFactoryTest::testGetBtPreDownloadHandler_contentType()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test"));
dctx->getFirstFileEntry()->setContentType("application/x-bittorrent");
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
SharedHandle<PreDownloadHandler> handler = DownloadHandlerFactory::getBtPreDownloadHandler();
diff --git a/test/DownloadHelperTest.cc b/test/DownloadHelperTest.cc
index b0d0999c..7255d63b 100644
--- a/test/DownloadHelperTest.cc
+++ b/test/DownloadHelperTest.cc
@@ -82,7 +82,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
for(size_t i = 0; i < arrayLength(array); ++i) {
CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
@@ -101,7 +101,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)5, uris.size());
for(size_t i = 0; i < arrayLength(array); ++i) {
CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
@@ -120,7 +120,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
for(size_t i = 0; i < arrayLength(array); ++i) {
CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
@@ -138,7 +138,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
// for alpha server
SharedHandle<RequestGroup> alphaGroup = result[0];
std::deque<std::string> alphaURIs;
- alphaGroup->getURIs(alphaURIs);
+ alphaGroup->getDownloadContext()->getFirstFileEntry()->getUris(alphaURIs);
CPPUNIT_ASSERT_EQUAL((size_t)2, alphaURIs.size());
for(size_t i = 0; i < 2; ++i) {
CPPUNIT_ASSERT_EQUAL(array[0], uris[0]);
@@ -171,7 +171,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_parameterized()
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), uris[0]);
@@ -206,7 +206,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_BitTorrent()
CPPUNIT_ASSERT_EQUAL((size_t)2, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
CPPUNIT_ASSERT_EQUAL(array[0], uris[0]);
@@ -221,7 +221,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_BitTorrent()
SharedHandle<RequestGroup> torrentGroup = result[1];
std::deque<std::string> auxURIs;
- torrentGroup->getURIs(auxURIs);
+ torrentGroup->getDownloadContext()->getFirstFileEntry()->getUris(auxURIs);
CPPUNIT_ASSERT(auxURIs.empty());
CPPUNIT_ASSERT_EQUAL((unsigned int)3,
torrentGroup->getNumConcurrentCommand());
@@ -262,7 +262,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_Metalink()
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
for(size_t i = 0; i < 3; ++i) {
CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
@@ -304,7 +304,7 @@ void DownloadHelperTest::testCreateRequestGroupForUriList()
SharedHandle<RequestGroup> fileGroup = result[0];
std::deque<std::string> fileURIs;
- fileGroup->getURIs(fileURIs);
+ fileGroup->getDownloadContext()->getFirstFileEntry()->getUris(fileURIs);
CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), fileURIs[0]);
CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), fileURIs[1]);
CPPUNIT_ASSERT_EQUAL(std::string("http://charlie/file"), fileURIs[2]);
@@ -344,13 +344,11 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
- CPPUNIT_ASSERT_EQUAL((size_t)5, uris.size());
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
+ // See -s option is ignored
+ CPPUNIT_ASSERT_EQUAL((size_t)3, uris.size());
for(size_t i = 0; i < arrayLength(array); ++i) {
- CPPUNIT_ASSERT_EQUAL(array[i], uris[i]);
- }
- for(size_t i = 0; i < 5-arrayLength(array); ++i) {
- CPPUNIT_ASSERT_EQUAL(array[i], uris[i+arrayLength(array)]);
+ CPPUNIT_ASSERT_EQUAL(array[i]+"/aria2-test/aria2/src/aria2c", uris[i]);
}
CPPUNIT_ASSERT_EQUAL((unsigned int)5, group->getNumConcurrentCommand());
}
@@ -363,7 +361,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)0, uris.size());
}
_option->put(PREF_FORCE_SEQUENTIAL, V_TRUE);
@@ -398,7 +396,7 @@ void DownloadHelperTest::testCreateRequestGroupForMetalink()
#endif // !ENABLE_BITTORRENT
SharedHandle<RequestGroup> group = result[0];
std::deque<std::string> uris;
- group->getURIs(uris);
+ group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
std::sort(uris.begin(), uris.end());
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
CPPUNIT_ASSERT_EQUAL(std::string("ftp://ftphost/aria2-0.5.2.tar.bz2"),
diff --git a/test/FeedbackURISelectorTest.cc b/test/FeedbackURISelectorTest.cc
index 5dcf2c76..783f5680 100644
--- a/test/FeedbackURISelectorTest.cc
+++ b/test/FeedbackURISelectorTest.cc
@@ -1,7 +1,5 @@
#include "FeedbackURISelector.h"
-#include <iostream>
-
#include <cppunit/extensions/HelperMacros.h>
#include "Exception.h"
@@ -9,6 +7,7 @@
#include "array_fun.h"
#include "ServerStatMan.h"
#include "ServerStat.h"
+#include "FileEntry.h"
namespace aria2 {
@@ -20,8 +19,7 @@ class FeedbackURISelectorTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testSelect_skipErrorHost);
CPPUNIT_TEST_SUITE_END();
private:
-
- std::deque<std::string> uris;
+ FileEntry _fileEntry;
SharedHandle<ServerStatMan> ssm;
@@ -35,8 +33,11 @@ public:
"ftp://alpha/file",
"http://bravo/file"
};
+ std::deque<std::string> uris;
uris.assign(&urisSrc[0], &urisSrc[arrayLength(urisSrc)]);
+ _fileEntry.setUris(uris);
+
ssm.reset(new ServerStatMan());
sel.reset(new FeedbackURISelector(ssm));
}
@@ -56,9 +57,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION(FeedbackURISelectorTest);
void FeedbackURISelectorTest::testSelect_withoutServerStat()
{
// Without ServerStat, selector returns first URI
- std::string uri = sel->select(uris);
+ std::string uri = sel->select(&_fileEntry);
CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), uri);
- CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
+ CPPUNIT_ASSERT_EQUAL((size_t)2, _fileEntry.getRemainingUris().size());
}
void FeedbackURISelectorTest::testSelect()
@@ -75,11 +76,13 @@ void FeedbackURISelectorTest::testSelect()
ssm->add(alphaFTP);
ssm->add(alphaHTTP);
- CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL((size_t)2, _fileEntry.getRemainingUris().size());
- CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL((size_t)1, uris.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL((size_t)1, _fileEntry.getRemainingUris().size());
}
void FeedbackURISelectorTest::testSelect_skipErrorHost()
@@ -93,8 +96,9 @@ void FeedbackURISelectorTest::testSelect_skipErrorHost()
ssm->add(alphaFTP);
// See error URIs are removed from URI List.
- CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL((size_t)0, uris.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL((size_t)0, _fileEntry.getRemainingUris().size());
}
} // namespace aria2
diff --git a/test/FileEntryTest.cc b/test/FileEntryTest.cc
index 5c3f70f6..475680fd 100644
--- a/test/FileEntryTest.cc
+++ b/test/FileEntryTest.cc
@@ -7,11 +7,15 @@ class FileEntryTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(FileEntryTest);
CPPUNIT_TEST(testSetupDir);
+ CPPUNIT_TEST(testRemoveURIWhoseHostnameIs);
+ CPPUNIT_TEST(testExtractURIResult);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {}
void testSetupDir();
+ void testRemoveURIWhoseHostnameIs();
+ void testExtractURIResult();
};
@@ -34,4 +38,45 @@ void FileEntryTest::testSetupDir()
CPPUNIT_ASSERT(!f.exists());
}
+void FileEntryTest::testRemoveURIWhoseHostnameIs()
+{
+ const char* uris[] = { "http://localhost/aria2.zip",
+ "ftp://localhost/aria2.zip",
+ "http://mirror/aria2.zip" };
+ FileEntry fileEntry;
+ fileEntry.setUris(std::deque<std::string>(&uris[0], &uris[3]));
+ fileEntry.removeURIWhoseHostnameIs("localhost");
+ CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry.getRemainingUris().size());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.zip"),
+ fileEntry.getRemainingUris()[0]);
+}
+
+
+void FileEntryTest::testExtractURIResult()
+{
+ FileEntry fileEntry;
+ fileEntry.addURIResult("http://timeout/file", downloadresultcode::TIME_OUT);
+ fileEntry.addURIResult("http://finished/file", downloadresultcode::FINISHED);
+ fileEntry.addURIResult("http://timeout/file2", downloadresultcode::TIME_OUT);
+ fileEntry.addURIResult("http://unknownerror/file", downloadresultcode::UNKNOWN_ERROR);
+
+ std::deque<URIResult> res;
+ fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
+ CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file"), res[0].getURI());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file2"), res[1].getURI());
+
+ CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://finished/file"),
+ fileEntry.getURIResults()[0].getURI());
+ CPPUNIT_ASSERT_EQUAL(std::string("http://unknownerror/file"),
+ fileEntry.getURIResults()[1].getURI());
+
+ res.clear();
+
+ fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
+ CPPUNIT_ASSERT(res.empty());
+ CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
+}
+
} // namespace aria2
diff --git a/test/InOrderURISelectorTest.cc b/test/InOrderURISelectorTest.cc
index c77b114c..3663a9f9 100644
--- a/test/InOrderURISelectorTest.cc
+++ b/test/InOrderURISelectorTest.cc
@@ -1,9 +1,11 @@
#include "InOrderURISelector.h"
+
+#include <cppunit/extensions/HelperMacros.h>
+
#include "Exception.h"
#include "Util.h"
#include "array_fun.h"
-#include <iostream>
-#include <cppunit/extensions/HelperMacros.h>
+#include "FileEntry.h"
namespace aria2 {
@@ -13,8 +15,7 @@ class InOrderURISelectorTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testSelect);
CPPUNIT_TEST_SUITE_END();
private:
-
- std::deque<std::string> uris;
+ FileEntry _fileEntry;
SharedHandle<InOrderURISelector> sel;
@@ -26,8 +27,11 @@ public:
"ftp://alpha/file",
"http://bravo/file"
};
+ std::deque<std::string> uris;
uris.assign(&urisSrc[0], &urisSrc[arrayLength(urisSrc)]);
+ _fileEntry.setUris(uris);
+
sel.reset(new InOrderURISelector());
}
@@ -41,10 +45,13 @@ CPPUNIT_TEST_SUITE_REGISTRATION(InOrderURISelectorTest);
void InOrderURISelectorTest::testSelect()
{
- CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), sel->select(uris));
- CPPUNIT_ASSERT_EQUAL(std::string(""), sel->select(uris));
+ CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
+ sel->select(&_fileEntry));
+ CPPUNIT_ASSERT_EQUAL(std::string(""), sel->select(&_fileEntry));
}
} // namespace aria2
diff --git a/test/Metalink2RequestGroupTest.cc b/test/Metalink2RequestGroupTest.cc
index 49ad2932..5df90552 100644
--- a/test/Metalink2RequestGroupTest.cc
+++ b/test/Metalink2RequestGroupTest.cc
@@ -42,7 +42,7 @@ void Metalink2RequestGroupTest::testGenerate()
{
SharedHandle<RequestGroup> rg = groups[0];
std::deque<std::string> uris;
- rg->getURIs(uris);
+ rg->getDownloadContext()->getFirstFileEntry()->getUris(uris);
std::sort(uris.begin(), uris.end());
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
CPPUNIT_ASSERT_EQUAL
@@ -68,7 +68,7 @@ void Metalink2RequestGroupTest::testGenerate()
{
SharedHandle<RequestGroup> rg = groups[1];
std::deque<std::string> uris;
- rg->getURIs(uris);
+ rg->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
const SharedHandle<DownloadContext>& dctx = rg->getDownloadContext();
@@ -90,7 +90,7 @@ void Metalink2RequestGroupTest::testGenerate()
{
SharedHandle<RequestGroup> rg = groups[4];
std::deque<std::string> uris;
- rg->getURIs(uris);
+ rg->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, uris.size());
CPPUNIT_ASSERT_EQUAL
(std::string("http://host/torrent-http.integrated.torrent"), uris[0]);
@@ -110,7 +110,7 @@ void Metalink2RequestGroupTest::testGenerate()
SharedHandle<RequestGroup> rg = groups[4];
#endif // ENABLE_BITTORRENT
std::deque<std::string> uris;
- rg->getURIs(uris);
+ rg->getDownloadContext()->getFirstFileEntry()->getUris(uris);
CPPUNIT_ASSERT_EQUAL((size_t)1, uris.size());
CPPUNIT_ASSERT_EQUAL
(std::string("http://host/torrent-http.integrated"), uris[0]);
diff --git a/test/MetalinkPostDownloadHandlerTest.cc b/test/MetalinkPostDownloadHandlerTest.cc
index 8e9abbdc..4f8dbe0f 100644
--- a/test/MetalinkPostDownloadHandlerTest.cc
+++ b/test/MetalinkPostDownloadHandlerTest.cc
@@ -36,7 +36,7 @@ void MetalinkPostDownloadHandlerTest::testCanHandle_extension()
{
SharedHandle<DownloadContext> dctx
(new DownloadContext(0, 0, "test.metalink"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
MetalinkPostDownloadHandler handler;
@@ -51,7 +51,7 @@ void MetalinkPostDownloadHandlerTest::testCanHandle_contentType()
{
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0, "test"));
dctx->getFirstFileEntry()->setContentType("application/metalink+xml");
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
MetalinkPostDownloadHandler handler;
@@ -66,7 +66,7 @@ void MetalinkPostDownloadHandlerTest::testGetNextRequestGroups()
{
SharedHandle<DownloadContext> dctx
(new DownloadContext(1024, 0, "test.xml"));
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
rg.setDownloadContext(dctx);
rg.initPieceStorage();
diff --git a/test/RequestGroupManTest.cc b/test/RequestGroupManTest.cc
index ba83984d..88dd37f1 100644
--- a/test/RequestGroupManTest.cc
+++ b/test/RequestGroupManTest.cc
@@ -43,10 +43,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION( RequestGroupManTest );
void RequestGroupManTest::testIsSameFileBeingDownloaded()
{
- std::deque<std::string> uris;
- uris.push_back("http://localhost/aria2.tar.bz2");
- SharedHandle<RequestGroup> rg1(new RequestGroup(_option, uris));
- SharedHandle<RequestGroup> rg2(new RequestGroup(_option, uris));
+ SharedHandle<RequestGroup> rg1(new RequestGroup(_option));
+ SharedHandle<RequestGroup> rg2(new RequestGroup(_option));
SharedHandle<DownloadContext> dctx1
(new DownloadContext(0, 0, "aria2.tar.bz2"));
diff --git a/test/RequestGroupTest.cc b/test/RequestGroupTest.cc
index 17ab9c02..429dcd40 100644
--- a/test/RequestGroupTest.cc
+++ b/test/RequestGroupTest.cc
@@ -7,6 +7,7 @@
#include "DownloadContext.h"
#include "FileEntry.h"
#include "PieceStorage.h"
+#include "DownloadResult.h"
namespace aria2 {
@@ -14,10 +15,8 @@ class RequestGroupTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(RequestGroupTest);
CPPUNIT_TEST(testRegisterSearchRemove);
- CPPUNIT_TEST(testRemoveURIWhoseHostnameIs);
CPPUNIT_TEST(testGetFirstFilePath);
CPPUNIT_TEST(testCreateDownloadResult);
- CPPUNIT_TEST(testExtractURIResult);
CPPUNIT_TEST_SUITE_END();
private:
SharedHandle<Option> _option;
@@ -28,10 +27,8 @@ public:
}
void testRegisterSearchRemove();
- void testRemoveURIWhoseHostnameIs();
void testGetFirstFilePath();
void testCreateDownloadResult();
- void testExtractURIResult();
};
@@ -39,7 +36,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( RequestGroupTest );
void RequestGroupTest::testRegisterSearchRemove()
{
- RequestGroup rg(_option, std::deque<std::string>());
+ RequestGroup rg(_option);
SharedHandle<ServerHost> sv1(new ServerHost(1, "localhost1"));
SharedHandle<ServerHost> sv2(new ServerHost(2, "localhost2"));
SharedHandle<ServerHost> sv3(new ServerHost(3, "localhost3"));
@@ -69,25 +66,12 @@ void RequestGroupTest::testRegisterSearchRemove()
}
}
-void RequestGroupTest::testRemoveURIWhoseHostnameIs()
-{
- const char* uris[] = { "http://localhost/aria2.zip",
- "ftp://localhost/aria2.zip",
- "http://mirror/aria2.zip" };
- RequestGroup rg(_option, std::deque<std::string>(&uris[0], &uris[3]));
- rg.removeURIWhoseHostnameIs("localhost");
- CPPUNIT_ASSERT_EQUAL((size_t)1, rg.getRemainingUris().size());
- CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.zip"),
- rg.getRemainingUris()[0]);
-}
-
void RequestGroupTest::testGetFirstFilePath()
{
SharedHandle<DownloadContext> ctx
(new DownloadContext(1024, 1024, "/tmp/myfile"));
- std::deque<std::string> uris;
- RequestGroup group(_option, uris);
+ RequestGroup group(_option);
group.setDownloadContext(ctx);
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/myfile"), group.getFirstFilePath());
@@ -101,12 +85,7 @@ void RequestGroupTest::testCreateDownloadResult()
{
SharedHandle<DownloadContext> ctx
(new DownloadContext(1024, 1024*1024, "/tmp/myfile"));
- //ctx->setDir("/tmp");
- std::deque<std::string> uris;
- uris.push_back("http://first/file");
- uris.push_back("http://second/file");
-
- RequestGroup group(_option, uris);
+ RequestGroup group(_option);
group.setDownloadContext(ctx);
group.initPieceStorage();
{
@@ -114,64 +93,35 @@ void RequestGroupTest::testCreateDownloadResult()
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/myfile"),
result->fileEntries[0]->getPath());
- CPPUNIT_ASSERT_EQUAL((uint64_t)1024*1024, result->totalLength);
- CPPUNIT_ASSERT_EQUAL(std::string("http://first/file"), result->uri);
- CPPUNIT_ASSERT_EQUAL((size_t)2, result->numUri);
+ CPPUNIT_ASSERT_EQUAL((off_t)1024*1024,
+ result->fileEntries.back()->getLastOffset());
CPPUNIT_ASSERT_EQUAL((uint64_t)0, result->sessionDownloadLength);
CPPUNIT_ASSERT_EQUAL((int64_t)0, result->sessionTime);
// result is UNKNOWN_ERROR if download has not completed and no specific
// error has been reported
- CPPUNIT_ASSERT_EQUAL(DownloadResult::UNKNOWN_ERROR, result->result);
+ CPPUNIT_ASSERT_EQUAL(downloadresultcode::UNKNOWN_ERROR, result->result);
// if haltReason is set to RequestGroup::USER_REQUEST, download
// result becomes IN_PROGRESS
group.setHaltRequested(true, RequestGroup::USER_REQUEST);
result = group.createDownloadResult();
- CPPUNIT_ASSERT_EQUAL(DownloadResult::IN_PROGRESS, result->result);
+ CPPUNIT_ASSERT_EQUAL(downloadresultcode::IN_PROGRESS, result->result);
}
{
- group.addURIResult("http://first/file", DownloadResult::TIME_OUT);
- group.addURIResult("http://second/file",DownloadResult::RESOURCE_NOT_FOUND);
+ group.setLastUriResult
+ ("http://second/file",downloadresultcode::RESOURCE_NOT_FOUND);
SharedHandle<DownloadResult> result = group.createDownloadResult();
- CPPUNIT_ASSERT_EQUAL(DownloadResult::RESOURCE_NOT_FOUND, result->result);
+ CPPUNIT_ASSERT_EQUAL(downloadresultcode::RESOURCE_NOT_FOUND, result->result);
}
{
group.getPieceStorage()->markAllPiecesDone();
SharedHandle<DownloadResult> result = group.createDownloadResult();
- CPPUNIT_ASSERT_EQUAL(DownloadResult::FINISHED, result->result);
+ CPPUNIT_ASSERT_EQUAL(downloadresultcode::FINISHED, result->result);
}
}
-void RequestGroupTest::testExtractURIResult()
-{
- RequestGroup group(_option, std::deque<std::string>());
- group.addURIResult("http://timeout/file", DownloadResult::TIME_OUT);
- group.addURIResult("http://finished/file", DownloadResult::FINISHED);
- group.addURIResult("http://timeout/file2", DownloadResult::TIME_OUT);
- group.addURIResult("http://unknownerror/file", DownloadResult::UNKNOWN_ERROR);
-
- std::deque<URIResult> res;
- group.extractURIResult(res, DownloadResult::TIME_OUT);
- CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
- CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file"), res[0].getURI());
- CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file2"), res[1].getURI());
-
- CPPUNIT_ASSERT_EQUAL((size_t)2, group.getURIResults().size());
- CPPUNIT_ASSERT_EQUAL(std::string("http://finished/file"),
- group.getURIResults()[0].getURI());
- CPPUNIT_ASSERT_EQUAL(std::string("http://unknownerror/file"),
- group.getURIResults()[1].getURI());
-
- res.clear();
-
- group.extractURIResult(res, DownloadResult::TIME_OUT);
- CPPUNIT_ASSERT(res.empty());
- CPPUNIT_ASSERT_EQUAL((size_t)2, group.getURIResults().size());
-}
-
-
} // namespace aria2
diff --git a/test/XmlRpcMethodTest.cc b/test/XmlRpcMethodTest.cc
index e8589d92..5aa86cfa 100644
--- a/test/XmlRpcMethodTest.cc
+++ b/test/XmlRpcMethodTest.cc
@@ -117,7 +117,7 @@ void XmlRpcMethodTest::testAddUri()
_e->_requestGroupMan->getReservedGroups();
CPPUNIT_ASSERT_EQUAL((size_t)1, rgs.size());
CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/"),
- rgs.front()->getRemainingUris().front());
+ rgs.front()->getDownloadContext()->getFirstFileEntry()->getRemainingUris().front());
}
// with options
BDE opt = BDE::dict();
@@ -180,7 +180,7 @@ void XmlRpcMethodTest::testAddUri_withPosition()
m.execute(req2, _e.get());
std::string uri =
- _e->_requestGroupMan->getReservedGroups()[0]->getRemainingUris()[0];
+ _e->_requestGroupMan->getReservedGroups()[0]->getDownloadContext()->getFirstFileEntry()->getRemainingUris()[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://uri2"), uri);
}
@@ -215,9 +215,9 @@ void XmlRpcMethodTest::testAddTorrent()
CPPUNIT_ASSERT(!group.isNull());
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-0.8.2.tar.bz2"),
group->getFirstFilePath());
- CPPUNIT_ASSERT_EQUAL((size_t)1, group->getRemainingUris().size());
+ CPPUNIT_ASSERT_EQUAL((size_t)1, group->getDownloadContext()->getFirstFileEntry()->getRemainingUris().size());
CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/aria2-0.8.2.tar.bz2"),
- group->getRemainingUris()[0]);
+ group->getDownloadContext()->getFirstFileEntry()->getRemainingUris()[0]);
}
// with options
BDE opt = BDE::dict();
@@ -349,8 +349,7 @@ void XmlRpcMethodTest::testAddMetalink_withPosition()
void XmlRpcMethodTest::testChangeOption()
{
- SharedHandle<RequestGroup> group
- (new RequestGroup(_option, std::deque<std::string>()));
+ SharedHandle<RequestGroup> group(new RequestGroup(_option));
_e->_requestGroupMan->addReservedGroup(group);
ChangeOptionXmlRpcMethod m;
@@ -374,8 +373,7 @@ void XmlRpcMethodTest::testChangeOption()
void XmlRpcMethodTest::testChangeOption_withBadOption()
{
- SharedHandle<RequestGroup> group
- (new RequestGroup(_option, std::deque<std::string>()));
+ SharedHandle<RequestGroup> group(new RequestGroup(_option));
_e->_requestGroupMan->addReservedGroup(group);
ChangeOptionXmlRpcMethod m;