summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-07-08 14:18:51 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-07-08 14:18:51 +0000
commitd8d8a4cff1486ef82f808388926e49a4ab4e6bb0 (patch)
treea94786f3d79bfc57bf262a987686ed780b3e4cdb /src
parent1059b8b9518ac3739c2f387dc291d54bece23f7e (diff)
2008-07-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added --bt-seed option. If --bt-seed=true is given at the command-line, aria2 seeds previously downloaded files without validating piece hashs. * src/HelpItemFactory.cc * src/OptionHandlerFactory.cc * src/RequestGroup.cc * src/option_processing.cc * src/prefs.cc * src/prefs.h * src/usage_text.h
Diffstat (limited to 'src')
-rw-r--r--src/HelpItemFactory.cc7
-rw-r--r--src/OptionHandlerFactory.cc1
-rw-r--r--src/RequestGroup.cc22
-rw-r--r--src/option_processing.cc7
-rw-r--r--src/prefs.cc2
-rw-r--r--src/prefs.h2
-rw-r--r--src/usage_text.h3
7 files changed, 37 insertions, 7 deletions
diff --git a/src/HelpItemFactory.cc b/src/HelpItemFactory.cc
index e230b19a..29c8cf32 100644
--- a/src/HelpItemFactory.cc
+++ b/src/HelpItemFactory.cc
@@ -390,6 +390,13 @@ TagContainerHandle HelpItemFactory::createHelpItems(const Option* op)
item->addTag(TAG_BITTORRENT);
tc->addItem(item);
}
+ {
+ HelpItemHandle item(new HelpItem(PREF_BT_SEED,
+ TEXT_BT_SEED,
+ op->get(PREF_BT_SEED)));
+ item->addTag(TAG_BITTORRENT);
+ tc->addItem(item);
+ }
#endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK
{
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
index 78a9acc0..afeb53a0 100644
--- a/src/OptionHandlerFactory.cc
+++ b/src/OptionHandlerFactory.cc
@@ -142,6 +142,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
std::deque<std::string>(&params[0],
&params[arrayLength(params)]))));
}
+ handlers.push_back(SH(new BooleanOptionHandler(PREF_BT_SEED)));
return handlers;
}
diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc
index 84222272..b8fad1d6 100644
--- a/src/RequestGroup.cc
+++ b/src/RequestGroup.cc
@@ -239,15 +239,19 @@ void RequestGroup::createInitialCommand(std::deque<Command*>& commands,
} else {
if(_pieceStorage->getDiskAdaptor()->fileExists()) {
if(!_option->getAsBool(PREF_CHECK_INTEGRITY) &&
- !_option->getAsBool(PREF_ALLOW_OVERWRITE)) {
+ !_option->getAsBool(PREF_ALLOW_OVERWRITE) &&
+ !_option->getAsBool(PREF_BT_SEED)) {
// TODO we need this->haltRequested = true?
throw DownloadFailureException
- (StringFormat(MSG_FILE_ALREADY_EXISTS,
- _pieceStorage->getDiskAdaptor()->getFilePath().c_str()
- ).str());
+ (StringFormat
+ (MSG_FILE_ALREADY_EXISTS,
+ _pieceStorage->getDiskAdaptor()->getFilePath().c_str()).str());
} else {
_pieceStorage->getDiskAdaptor()->openFile();
}
+ if(_option->getAsBool(PREF_BT_SEED)) {
+ _pieceStorage->markAllPiecesDone();
+ }
} else {
_pieceStorage->getDiskAdaptor()->openFile();
}
@@ -269,8 +273,14 @@ void RequestGroup::createInitialCommand(std::deque<Command*>& commands,
}
}
CheckIntegrityEntryHandle entry(new BtCheckIntegrityEntry(this));
-
- processCheckIntegrityEntry(commands, entry, e);
+ // --bt-seed=true is given and download has completed, skip validation for
+ // piece hashes.
+ if(_option->getAsBool(PREF_BT_SEED) &&
+ _pieceStorage->downloadFinished()) {
+ entry->onDownloadFinished(commands, e);
+ } else {
+ processCheckIntegrityEntry(commands, entry, e);
+ }
return;
}
}
diff --git a/src/option_processing.cc b/src/option_processing.cc
index 3dcd034e..8d8eda35 100644
--- a/src/option_processing.cc
+++ b/src/option_processing.cc
@@ -145,6 +145,7 @@ Option* createDefaultOption()
op->put(PREF_BT_REQUIRE_CRYPTO, V_FALSE);
op->put(PREF_BT_REQUEST_PEER_SPEED_LIMIT, "51200");
op->put(PREF_BT_MAX_OPEN_FILES, "100");
+ op->put(PREF_BT_SEED, V_FALSE);
op->put(PREF_QUIET, V_FALSE);
op->put(PREF_STOP, "0");
#ifdef ENABLE_ASYNC_DNS
@@ -255,7 +256,8 @@ Option* option_processing(int argc, char* const argv[])
{ PREF_BT_MIN_CRYPTO_LEVEL.c_str(), required_argument, &lopt, 30 },
{ PREF_BT_REQUIRE_CRYPTO.c_str(), required_argument, &lopt, 31 },
{ PREF_BT_REQUEST_PEER_SPEED_LIMIT.c_str(), required_argument, &lopt, 32 },
- { PREF_BT_MAX_OPEN_FILES.c_str(), required_argument, &lopt, 33},
+ { PREF_BT_MAX_OPEN_FILES.c_str(), required_argument, &lopt, 33 },
+ { PREF_BT_SEED.c_str(), optional_argument, &lopt, 34 },
#endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK
{ PREF_METALINK_FILE.c_str(), required_argument, NULL, 'M' },
@@ -372,6 +374,9 @@ Option* option_processing(int argc, char* const argv[])
case 33:
cmdstream << PREF_BT_MAX_OPEN_FILES << "=" << optarg << "\n";
break;
+ case 34:
+ cmdstream << PREF_BT_SEED << "=" << toBoolArg(optarg) << "\n";
+ break;
case 100:
cmdstream << PREF_METALINK_VERSION << "=" << optarg << "\n";
break;
diff --git a/src/prefs.cc b/src/prefs.cc
index 86548f46..f7cbf79a 100644
--- a/src/prefs.cc
+++ b/src/prefs.cc
@@ -251,6 +251,8 @@ const std::string PREF_BT_REQUIRE_CRYPTO("bt-require-crypto");
const std::string PREF_BT_REQUEST_PEER_SPEED_LIMIT("bt-request-peer-speed-limit");
// values: 1*digit
const std::string PREF_BT_MAX_OPEN_FILES("bt-max-open-files");
+// values: true | false
+const std::string PREF_BT_SEED("bt-seed");
/**
* Metalink related preferences
diff --git a/src/prefs.h b/src/prefs.h
index 6e87813a..43e9e057 100644
--- a/src/prefs.h
+++ b/src/prefs.h
@@ -255,6 +255,8 @@ extern const std::string PREF_BT_REQUIRE_CRYPTO;
extern const std::string PREF_BT_REQUEST_PEER_SPEED_LIMIT;
// values: 1*digit
extern const std::string PREF_BT_MAX_OPEN_FILES;
+// values: true | false
+extern const std::string PREF_BT_SEED;
/**
* Metalink related preferences
diff --git a/src/usage_text.h b/src/usage_text.h
index 8377e0df..19fa3e02 100644
--- a/src/usage_text.h
+++ b/src/usage_text.h
@@ -284,6 +284,9 @@ _(" --bt-request-peer-speed-limit=SPEED In BitTorrent downloads, if the download
#define TEXT_BT_MAX_OPEN_FILES \
_(" --bt-max-open-files=NUM Specify maximum number of files to open in each\n"\
" BitTorrent download.")
+#define TEXT_BT_SEED \
+_(" --bt-seed[=true|false] Seed previously downloaded files without\n"\
+ " validating piece hashes.")
#define TEXT_METALINK_FILE \
_(" -M, --metalink-file=METALINK_FILE The file path to the .metalink file.")
#define TEXT_METALINK_SERVERS \