summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AnnounceList.cc16
-rw-r--r--src/AnnounceList.h4
-rw-r--r--src/DefaultBtAnnounce.cc12
-rw-r--r--src/DefaultBtAnnounce.h1
-rw-r--r--src/TrackerWatcherCommand.cc10
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();