mirror of https://github.com/aria2/aria2
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Don't add PeerChokeCommand and SeedCheckCommand if metadata is missing. If metadata is missing, always use DHT when it is ready. * src/BtSetup.ccpull/1/head
parent
66e6191d10
commit
5013e96b3b
|
@ -1,3 +1,9 @@
|
||||||
|
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Don't add PeerChokeCommand and SeedCheckCommand if metadata is
|
||||||
|
missing. If metadata is missing, always use DHT when it is ready.
|
||||||
|
* src/BtSetup.cc
|
||||||
|
|
||||||
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Added parseMagnetLink(). Hex encoded info hash is supported.
|
Added parseMagnetLink(). Hex encoded info hash is supported.
|
||||||
|
|
|
@ -70,11 +70,12 @@ void BtSetup::setup(std::deque<Command*>& commands,
|
||||||
DownloadEngine* e,
|
DownloadEngine* e,
|
||||||
const Option* option)
|
const Option* option)
|
||||||
{
|
{
|
||||||
if(!requestGroup->getDownloadContext()->hasAttribute(bittorrent::BITTORRENT)) {
|
if(!requestGroup->getDownloadContext()->hasAttribute(bittorrent::BITTORRENT)){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const BDE& torrentAttrs =
|
const BDE& torrentAttrs =
|
||||||
requestGroup->getDownloadContext()->getAttribute(bittorrent::BITTORRENT);
|
requestGroup->getDownloadContext()->getAttribute(bittorrent::BITTORRENT);
|
||||||
|
bool metadataGetMode = !torrentAttrs.containsKey(bittorrent::METADATA);
|
||||||
BtObject btObject =
|
BtObject btObject =
|
||||||
e->getBtRegistry()->get(torrentAttrs[bittorrent::INFO_HASH].s());
|
e->getBtRegistry()->get(torrentAttrs[bittorrent::INFO_HASH].s());
|
||||||
SharedHandle<PieceStorage> pieceStorage = btObject._pieceStorage;
|
SharedHandle<PieceStorage> pieceStorage = btObject._pieceStorage;
|
||||||
|
@ -92,12 +93,12 @@ void BtSetup::setup(std::deque<Command*>& commands,
|
||||||
|
|
||||||
commands.push_back(c);
|
commands.push_back(c);
|
||||||
}
|
}
|
||||||
{
|
if(!metadataGetMode) {
|
||||||
PeerChokeCommand* c =
|
PeerChokeCommand* c =
|
||||||
new PeerChokeCommand(e->newCUID(), e);
|
new PeerChokeCommand(e->newCUID(), e);
|
||||||
c->setPeerStorage(peerStorage);
|
c->setPeerStorage(peerStorage);
|
||||||
c->setBtRuntime(btRuntime);
|
c->setBtRuntime(btRuntime);
|
||||||
|
|
||||||
commands.push_back(c);
|
commands.push_back(c);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -111,7 +112,8 @@ void BtSetup::setup(std::deque<Command*>& commands,
|
||||||
commands.push_back(c);
|
commands.push_back(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(torrentAttrs[bittorrent::PRIVATE].i() == 0 && DHTSetup::initialized()) {
|
if((metadataGetMode || torrentAttrs[bittorrent::PRIVATE].i() == 0) &&
|
||||||
|
DHTSetup::initialized()) {
|
||||||
DHTGetPeersCommand* command =
|
DHTGetPeersCommand* command =
|
||||||
new DHTGetPeersCommand(e->newCUID(), requestGroup, e);
|
new DHTGetPeersCommand(e->newCUID(), requestGroup, e);
|
||||||
command->setTaskQueue(DHTRegistry::_taskQueue);
|
command->setTaskQueue(DHTRegistry::_taskQueue);
|
||||||
|
@ -120,31 +122,33 @@ void BtSetup::setup(std::deque<Command*>& commands,
|
||||||
command->setPeerStorage(peerStorage);
|
command->setPeerStorage(peerStorage);
|
||||||
commands.push_back(command);
|
commands.push_back(command);
|
||||||
}
|
}
|
||||||
SharedHandle<UnionSeedCriteria> unionCri(new UnionSeedCriteria());
|
if(!metadataGetMode) {
|
||||||
if(option->defined(PREF_SEED_TIME)) {
|
SharedHandle<UnionSeedCriteria> unionCri(new UnionSeedCriteria());
|
||||||
SharedHandle<SeedCriteria> cri(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60));
|
if(option->defined(PREF_SEED_TIME)) {
|
||||||
unionCri->addSeedCriteria(cri);
|
SharedHandle<SeedCriteria> cri
|
||||||
}
|
(new TimeSeedCriteria(option->getAsInt(PREF_SEED_TIME)*60));
|
||||||
{
|
|
||||||
double ratio = option->getAsDouble(PREF_SEED_RATIO);
|
|
||||||
if(ratio > 0.0) {
|
|
||||||
SharedHandle<ShareRatioSeedCriteria> cri
|
|
||||||
(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO),
|
|
||||||
requestGroup->getDownloadContext()));
|
|
||||||
cri->setPieceStorage(pieceStorage);
|
|
||||||
cri->setPeerStorage(peerStorage);
|
|
||||||
|
|
||||||
unionCri->addSeedCriteria(cri);
|
unionCri->addSeedCriteria(cri);
|
||||||
}
|
}
|
||||||
}
|
{
|
||||||
if(unionCri->getSeedCriterion().size() > 0) {
|
double ratio = option->getAsDouble(PREF_SEED_RATIO);
|
||||||
SeedCheckCommand* c =
|
if(ratio > 0.0) {
|
||||||
new SeedCheckCommand(e->newCUID(), requestGroup, e, unionCri);
|
SharedHandle<ShareRatioSeedCriteria> cri
|
||||||
c->setPieceStorage(pieceStorage);
|
(new ShareRatioSeedCriteria(option->getAsDouble(PREF_SEED_RATIO),
|
||||||
c->setBtRuntime(btRuntime);
|
requestGroup->getDownloadContext()));
|
||||||
commands.push_back(c);
|
cri->setPieceStorage(pieceStorage);
|
||||||
}
|
cri->setPeerStorage(peerStorage);
|
||||||
|
|
||||||
|
unionCri->addSeedCriteria(cri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(unionCri->getSeedCriterion().size() > 0) {
|
||||||
|
SeedCheckCommand* c =
|
||||||
|
new SeedCheckCommand(e->newCUID(), requestGroup, e, unionCri);
|
||||||
|
c->setPieceStorage(pieceStorage);
|
||||||
|
c->setBtRuntime(btRuntime);
|
||||||
|
commands.push_back(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(PeerListenCommand::getNumInstance() == 0) {
|
if(PeerListenCommand::getNumInstance() == 0) {
|
||||||
PeerListenCommand* listenCommand = PeerListenCommand::getInstance(e);
|
PeerListenCommand* listenCommand = PeerListenCommand::getInstance(e);
|
||||||
IntSequence seq = util::parseIntRange(option->get(PREF_LISTEN_PORT));
|
IntSequence seq = util::parseIntRange(option->get(PREF_LISTEN_PORT));
|
||||||
|
|
Loading…
Reference in New Issue