better error reports from tracker failures (with http status codes)
This commit is contained in:
@@ -1758,16 +1758,20 @@ struct file_error_alert: alert
|
|||||||
<p>This alert is generated on tracker time outs, premature disconnects, invalid response or
|
<p>This alert is generated on tracker time outs, premature disconnects, invalid response or
|
||||||
a HTTP response other than "200 OK". From the alert you can get the handle to the torrent
|
a HTTP response other than "200 OK". From the alert you can get the handle to the torrent
|
||||||
the tracker belongs to. This alert is generated as severity level <tt class="docutils literal"><span class="pre">warning</span></tt>.</p>
|
the tracker belongs to. This alert is generated as severity level <tt class="docutils literal"><span class="pre">warning</span></tt>.</p>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">times_in_row</span></tt> member says how many times in a row this tracker has failed.</p>
|
<p>The <tt class="docutils literal"><span class="pre">times_in_row</span></tt> member says how many times in a row this tracker has failed.
|
||||||
|
<tt class="docutils literal"><span class="pre">status_code</span></tt> is the code returned from the HTTP server. 401 means the tracker needs
|
||||||
|
authentication, 404 means not found etc. If the tracker timed out, the code will be set
|
||||||
|
to 0.</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
struct tracker_alert: alert
|
struct tracker_alert: alert
|
||||||
{
|
{
|
||||||
tracker_alert(const torrent_handle& h, int times
|
tracker_alert(const torrent_handle& h, int times, int status
|
||||||
, const std::string& msg);
|
, const std::string& msg);
|
||||||
virtual std::auto_ptr<alert> clone() const;
|
virtual std::auto_ptr<alert> clone() const;
|
||||||
|
|
||||||
torrent_handle handle;
|
torrent_handle handle;
|
||||||
int times_in_row;
|
int times_in_row;
|
||||||
|
int status_code;
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1768,17 +1768,21 @@ a HTTP response other than "200 OK". From the alert you can get the handle to th
|
|||||||
the tracker belongs to. This alert is generated as severity level ``warning``.
|
the tracker belongs to. This alert is generated as severity level ``warning``.
|
||||||
|
|
||||||
The ``times_in_row`` member says how many times in a row this tracker has failed.
|
The ``times_in_row`` member says how many times in a row this tracker has failed.
|
||||||
|
``status_code`` is the code returned from the HTTP server. 401 means the tracker needs
|
||||||
|
authentication, 404 means not found etc. If the tracker timed out, the code will be set
|
||||||
|
to 0.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
struct tracker_alert: alert
|
struct tracker_alert: alert
|
||||||
{
|
{
|
||||||
tracker_alert(const torrent_handle& h, int times
|
tracker_alert(const torrent_handle& h, int times, int status
|
||||||
, const std::string& msg);
|
, const std::string& msg);
|
||||||
virtual std::auto_ptr<alert> clone() const;
|
virtual std::auto_ptr<alert> clone() const;
|
||||||
|
|
||||||
torrent_handle handle;
|
torrent_handle handle;
|
||||||
int times_in_row;
|
int times_in_row;
|
||||||
|
int status_code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -44,10 +44,12 @@ namespace libtorrent
|
|||||||
{
|
{
|
||||||
tracker_alert(const torrent_handle& h
|
tracker_alert(const torrent_handle& h
|
||||||
, int times
|
, int times
|
||||||
|
, int status
|
||||||
, const std::string& msg)
|
, const std::string& msg)
|
||||||
: alert(alert::warning, msg)
|
: alert(alert::warning, msg)
|
||||||
, handle(h)
|
, handle(h)
|
||||||
, times_in_row(times)
|
, times_in_row(times)
|
||||||
|
, status_code(status)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual std::auto_ptr<alert> clone() const
|
virtual std::auto_ptr<alert> clone() const
|
||||||
@@ -55,6 +57,7 @@ namespace libtorrent
|
|||||||
|
|
||||||
torrent_handle handle;
|
torrent_handle handle;
|
||||||
int times_in_row;
|
int times_in_row;
|
||||||
|
int status_code;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tracker_reply_alert: alert
|
struct tracker_reply_alert: alert
|
||||||
|
@@ -503,8 +503,17 @@ namespace libtorrent
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle tracker response
|
// handle tracker response
|
||||||
entry e = bdecode(m_buffer.begin(), m_buffer.end());
|
try
|
||||||
parse(e);
|
{
|
||||||
|
entry e = bdecode(m_buffer.begin(), m_buffer.end());
|
||||||
|
parse(e);
|
||||||
|
}
|
||||||
|
catch (std::exception&)
|
||||||
|
{
|
||||||
|
std::string error_str(m_buffer.begin(), m_buffer.end());
|
||||||
|
if (has_requester()) requester().tracker_request_error(m_req, m_code, error_str);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -641,11 +650,11 @@ namespace libtorrent
|
|||||||
}
|
}
|
||||||
catch(type_error& e)
|
catch(type_error& e)
|
||||||
{
|
{
|
||||||
requester().tracker_request_error(m_req, -1, e.what());
|
requester().tracker_request_error(m_req, m_code, e.what());
|
||||||
}
|
}
|
||||||
catch(std::runtime_error& e)
|
catch(std::runtime_error& e)
|
||||||
{
|
{
|
||||||
requester().tracker_request_error(m_req, -1, e.what());
|
requester().tracker_request_error(m_req, m_code, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1278,7 +1278,7 @@ namespace libtorrent
|
|||||||
<< m_trackers[m_currently_trying_tracker].url
|
<< m_trackers[m_currently_trying_tracker].url
|
||||||
<< "\" timed out";
|
<< "\" timed out";
|
||||||
m_ses.m_alerts.post_alert(tracker_alert(get_handle()
|
m_ses.m_alerts.post_alert(tracker_alert(get_handle()
|
||||||
, m_failed_trackers + 1, s.str()));
|
, m_failed_trackers + 1, 0, s.str()));
|
||||||
}
|
}
|
||||||
try_next_tracker();
|
try_next_tracker();
|
||||||
}
|
}
|
||||||
@@ -1299,7 +1299,7 @@ namespace libtorrent
|
|||||||
<< m_trackers[m_currently_trying_tracker].url
|
<< m_trackers[m_currently_trying_tracker].url
|
||||||
<< "\" " << str;
|
<< "\" " << str;
|
||||||
m_ses.m_alerts.post_alert(tracker_alert(get_handle()
|
m_ses.m_alerts.post_alert(tracker_alert(get_handle()
|
||||||
, m_failed_trackers + 1, s.str()));
|
, m_failed_trackers + 1, response_code, s.str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user