report tracker errors in the tracker list

This commit is contained in:
Arvid Norberg 2010-04-13 04:37:39 +00:00
parent 384bfdec48
commit eeda665d06
4 changed files with 24 additions and 2 deletions

View File

@ -1804,6 +1804,10 @@ ones with lower tier will always be tried before the one with higher tier number
int next_announce_in() const; int next_announce_in() const;
int min_announce_in() const; int min_announce_in() const;
error_code last_error;
std::string message;
boost::uint8_t tier; boost::uint8_t tier;
boost::uint8_t fail_limit; boost::uint8_t fail_limit;
boost::uint8_t fails; boost::uint8_t fails;
@ -1827,6 +1831,12 @@ ones with lower tier will always be tried before the one with higher tier number
this tracker. ``min_announce_in()`` returns the number of seconds until we are this tracker. ``min_announce_in()`` returns the number of seconds until we are
allowed to force another tracker update with this tracker. allowed to force another tracker update with this tracker.
If the last time this tracker was contacted failed, ``last_error`` is the error
code describing what error occurred.
If the last time this tracker was contacted, the tracker returned a warning
or error message, ``message`` contains that message.
``fail_limit`` is the max number of failures to announce to this tracker in ``fail_limit`` is the max number of failures to announce to this tracker in
a row, before this tracker is not used anymore. a row, before this tracker is not used anymore.

View File

@ -1428,11 +1428,13 @@ int main(int argc, char* argv[])
for (std::vector<announce_entry>::iterator i = tr.begin() for (std::vector<announce_entry>::iterator i = tr.begin()
, end(tr.end()); i != end; ++i) , end(tr.end()); i != end; ++i)
{ {
snprintf(str, sizeof(str), "%2d %-55s fails: %-3d %s %s\n" snprintf(str, sizeof(str), "%2d %-55s fails: %-3d %s %s \"%s\" %s\n"
, i->tier, i->url.c_str(), i->fails, i->verified?"OK ":"- " , i->tier, i->url.c_str(), i->fails, i->verified?"OK ":"- "
, i->updating?"updating" , i->updating?"updating"
:!i->verified?"" :!i->verified?""
:to_string(total_seconds(i->next_announce - now), 8).c_str()); :to_string(total_seconds(i->next_announce - now), 8).c_str()
, i->last_error ? i->last_error.message().c_str() : ""
, i->message.c_str());
out += str; out += str;
} }
} }

View File

@ -97,6 +97,14 @@ namespace libtorrent
// no announces before this time // no announces before this time
ptime min_announce; ptime min_announce;
// if this tracker failed the last time it was contacted
// this error code specifies what error occurred
error_code last_error;
// if this tracker has returned an error or warning message
// that message is stored here
std::string message;
boost::uint8_t tier; boost::uint8_t tier;
// the number of times this tracker can fail // the number of times this tracker can fail
// in a row before it's removed. 0 means unlimited // in a row before it's removed. 0 means unlimited

View File

@ -6459,6 +6459,8 @@ namespace libtorrent
if (ae) if (ae)
{ {
ae->failed(retry_interval); ae->failed(retry_interval);
ae->last_error = ec;
ae->message = msg;
int tracker_index = ae - &m_trackers[0]; int tracker_index = ae - &m_trackers[0];
deprioritize_tracker(tracker_index); deprioritize_tracker(tracker_index);
} }