diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/AnnounceList.cc | 16 | ||||
| -rw-r--r-- | src/AnnounceList.h | 4 | ||||
| -rw-r--r-- | src/DefaultBtAnnounce.cc | 12 | ||||
| -rw-r--r-- | src/DefaultBtAnnounce.h | 1 | ||||
| -rw-r--r-- | src/TrackerWatcherCommand.cc | 10 |
5 files changed, 24 insertions, 19 deletions
diff --git a/src/AnnounceList.cc b/src/AnnounceList.cc index eced1559..c50f7b13 100644 --- a/src/AnnounceList.cc +++ b/src/AnnounceList.cc @@ -103,16 +103,16 @@ void AnnounceList::announceSuccess() { } } -// TODO if currentTier reaches tiers.end(), then getAllTierTried() returns true void AnnounceList::announceFailure() { if(currentTrackerInitialized) { currentTracker++; if(currentTracker == (*currentTier)->urls.end()) { currentTier++; if(currentTier == tiers.end()) { - currentTier = tiers.begin(); + currentTrackerInitialized = false; + } else { + currentTracker = (*currentTier)->urls.begin(); } - currentTracker = (*currentTier)->urls.begin(); } } } @@ -225,3 +225,13 @@ void AnnounceList::shuffle() { random_shuffle(urls.begin(), urls.end()); } } + +bool AnnounceList::allTiersFailed() const +{ + return currentTier == tiers.end(); +} + +void AnnounceList::resetTier() +{ + resetIterator(); +} diff --git a/src/AnnounceList.h b/src/AnnounceList.h index c0123d67..998953f5 100644 --- a/src/AnnounceList.h +++ b/src/AnnounceList.h @@ -115,6 +115,10 @@ public: */ void moveToStoppedAllowedTier(); void moveToCompletedAllowedTier(); + + bool allTiersFailed() const; + + void resetTier(); }; #endif // _D_ANNOUNCE_LIST_H_ diff --git a/src/DefaultBtAnnounce.cc b/src/DefaultBtAnnounce.cc index b9b53256..52e5e895 100644 --- a/src/DefaultBtAnnounce.cc +++ b/src/DefaultBtAnnounce.cc @@ -55,7 +55,6 @@ DefaultBtAnnounce::DefaultBtAnnounce(BtContextHandle btContext, complete(0), incomplete(0), announceList(btContext->getAnnounceTiers()), - trackerNumTry(0), option(option), logger(LogFactory::getInstance()), _randomizer(SimpleRandomizer::getInstance()), @@ -76,7 +75,8 @@ void DefaultBtAnnounce::generateKey() } bool DefaultBtAnnounce::isDefaultAnnounceReady() { - return (trackers == 0 && prevAnnounceTime.elapsed(minInterval)); + return (trackers == 0 && prevAnnounceTime.elapsed(minInterval) && + !announceList.allTiersFailed()); } bool DefaultBtAnnounce::isStoppedAnnounceReady() { @@ -113,6 +113,8 @@ string DefaultBtAnnounce::getAnnounceUrl() { announceList.getEvent() == AnnounceTier::STARTED) { announceList.setEvent(AnnounceTier::STARTED_AFTER_COMPLETION); } + } else { + return ""; } int32_t numWant = 50; if(!btRuntime->lessThanEqMinPeer() || @@ -160,18 +162,16 @@ void DefaultBtAnnounce::announceSuccess() { void DefaultBtAnnounce::announceFailure() { trackers = 0; - trackerNumTry++; announceList.announceFailure(); } bool DefaultBtAnnounce::isAllAnnounceFailed() { - return - trackerNumTry >= option->getAsInt(PREF_TRACKER_MAX_TRIES); + return announceList.allTiersFailed(); } void DefaultBtAnnounce::resetAnnounce() { prevAnnounceTime.reset(); - trackerNumTry = 0; + announceList.resetTier(); } void diff --git a/src/DefaultBtAnnounce.h b/src/DefaultBtAnnounce.h index 774f0699..60deeebb 100644 --- a/src/DefaultBtAnnounce.h +++ b/src/DefaultBtAnnounce.h @@ -62,7 +62,6 @@ private: AnnounceList announceList; string trackerId; string key; - int32_t trackerNumTry; const Option* option; Logger* logger; RandomizerHandle _randomizer; diff --git a/src/TrackerWatcherCommand.cc b/src/TrackerWatcherCommand.cc index 043df899..66f6d06f 100644 --- a/src/TrackerWatcherCommand.cc +++ b/src/TrackerWatcherCommand.cc @@ -71,8 +71,6 @@ bool TrackerWatcherCommand::execute() { if(_trackerRequestGroup.isNull()) { _trackerRequestGroup = createAnnounce(); if(!_trackerRequestGroup.isNull()) { - //e->_requestGroupMan->addReservedGroup(_trackerRequestGroup); - //e->_requestGroupMan->fillRequestGroupFromReserver(e); e->addCommand(_trackerRequestGroup->createInitialCommand(e)); logger->debug("added tracker request command"); } @@ -83,13 +81,7 @@ bool TrackerWatcherCommand::execute() { processTrackerResponse(trackerResponse); btAnnounce->announceSuccess(); btAnnounce->resetAnnounce(); - } catch(DlAbortEx* ex) { - logger->error(EX_EXCEPTION_CAUGHT, ex); - delete ex; - btAnnounce->announceFailure(); - btAnnounce->resetAnnounce(); - } catch(DlRetryEx* ex) { - // TODO Can I remove this catch clause? + } catch(RecoverableException* ex) { logger->error(EX_EXCEPTION_CAUGHT, ex); delete ex; btAnnounce->announceFailure(); |
