mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 02:18:42 +00:00
fix: respect min interval and interval if they exist (#7493)
* fix: parse `min interval` and `interval` if they exist * fix: account for `interval` and `min interval` during tracker failure --------- Co-authored-by: Charles Kerr <charles@charleskerr.com>
This commit is contained in:
@@ -871,7 +871,7 @@ bool isUnregistered(char const* errmsg)
|
||||
return std::any_of(std::begin(Keys), std::end(Keys), [&lower](auto const& key) { return tr_strv_contains(lower, key); });
|
||||
}
|
||||
|
||||
void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e)
|
||||
void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e, time_t interval = {})
|
||||
{
|
||||
using namespace announce_helpers;
|
||||
|
||||
@@ -902,7 +902,7 @@ void on_announce_error(tr_tier* tier, char const* err, tr_announce_event e)
|
||||
else
|
||||
{
|
||||
/* schedule a reannounce */
|
||||
auto const interval = current_tracker->getRetryInterval();
|
||||
interval = std::max(interval, current_tracker->getRetryInterval());
|
||||
tr_logAddWarnTier(
|
||||
tier,
|
||||
fmt::format(
|
||||
@@ -1019,6 +1019,17 @@ void tr_announcer_impl::onAnnounceDone(
|
||||
(!std::empty(response.errmsg) ? response.errmsg.c_str() : "none"),
|
||||
(!std::empty(response.warning) ? response.warning.c_str() : "none")));
|
||||
|
||||
// https://github.com/arvidn/libtorrent/issues/5084#issuecomment-688516452
|
||||
if (response.min_interval != 0)
|
||||
{
|
||||
tier->announceMinIntervalSec = response.min_interval;
|
||||
}
|
||||
|
||||
if (response.interval != 0)
|
||||
{
|
||||
tier->announceIntervalSec = response.interval;
|
||||
}
|
||||
|
||||
tier->lastAnnounceTime = now;
|
||||
tier->lastAnnounceTimedOut = response.did_timeout;
|
||||
tier->lastAnnounceSucceeded = false;
|
||||
@@ -1049,7 +1060,11 @@ void tr_announcer_impl::onAnnounceDone(
|
||||
publishError(tier, response.errmsg);
|
||||
}
|
||||
|
||||
on_announce_error(tier, response.errmsg.c_str(), event);
|
||||
on_announce_error(
|
||||
tier,
|
||||
response.errmsg.c_str(),
|
||||
event,
|
||||
response.interval > time_t{} ? response.interval : response.min_interval);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1095,16 +1110,6 @@ void tr_announcer_impl::onAnnounceDone(
|
||||
tier->last_announce_str = _("Success");
|
||||
}
|
||||
|
||||
if (response.min_interval != 0)
|
||||
{
|
||||
tier->announceMinIntervalSec = response.min_interval;
|
||||
}
|
||||
|
||||
if (response.interval != 0)
|
||||
{
|
||||
tier->announceIntervalSec = response.interval;
|
||||
}
|
||||
|
||||
if (!std::empty(response.pex))
|
||||
{
|
||||
publishPeersPex(tier, response.pex);
|
||||
|
||||
Reference in New Issue
Block a user