summaryrefslogtreecommitdiff
path: root/src/Metalink2RequestGroup.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-18 15:14:50 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-18 15:14:50 +0000
commit21887ddb7cc8071fd6ad8f8cb5d5443beec0356b (patch)
tree0d183bea1e0c4d26e94a55d4f626fcdc48c43822 /src/Metalink2RequestGroup.cc
parent05d8f8ffdb5ad0dbcde527cdd1ca910886e24178 (diff)
2010-07-19 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Metadata download may take very long time. If URIs are available, give up metadata download in at most 30 seconds. * src/Metalink2RequestGroup.cc
Diffstat (limited to 'src/Metalink2RequestGroup.cc')
-rw-r--r--src/Metalink2RequestGroup.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Metalink2RequestGroup.cc b/src/Metalink2RequestGroup.cc
index f041dee0..27894429 100644
--- a/src/Metalink2RequestGroup.cc
+++ b/src/Metalink2RequestGroup.cc
@@ -315,6 +315,25 @@ Metalink2RequestGroup::createRequestGroup
SharedHandle<Dependency> dep(new BtDependency(rg, torrentRg));
rg->dependsOn(dep);
torrentRg->belongsTo(rg->getGID());
+ // metadata download may take very long time. If URIs are
+ // available, give up metadata download in at most 30 seconds.
+ const time_t btStopTimeout = 30;
+ time_t currentBtStopTimeout =
+ torrentRg->getOption()->getAsInt(PREF_BT_STOP_TIMEOUT);
+ if(currentBtStopTimeout == 0 || currentBtStopTimeout > btStopTimeout) {
+ std::vector<SharedHandle<FileEntry> >::const_iterator i;
+ std::vector<SharedHandle<FileEntry> >::const_iterator eoi
+ = dctx->getFileEntries().end();
+ for(i = dctx->getFileEntries().begin(); i != eoi; ++i) {
+ if((*i)->getRemainingUris().empty()) {
+ break;
+ }
+ }
+ if(i == dctx->getFileEntries().end()) {
+ torrentRg->getOption()->put
+ (PREF_BT_STOP_TIMEOUT, util::itos(btStopTimeout));
+ }
+ }
}
#endif // ENABLE_BITTORRENT
groups.push_back(rg);