full support for bep-21 (event=paused)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
* full support for BEP 21 (event=paused)
|
||||
* added share-mode feature for improving share ratios
|
||||
* merged all proxy settings into a single one
|
||||
* improved SOCKS5 support by proxying hostname lookups
|
||||
|
@@ -45,6 +45,7 @@ extensions
|
||||
* supports the ``compact=1`` tracker parameter.
|
||||
* super seeding/initial seeding (`BEP 16`_).
|
||||
* private torrents (`BEP 27`_).
|
||||
* upload-only extension (`BEP 21`_).
|
||||
* support for IPv6, including `BEP 7`_ and `BEP 24`_.
|
||||
* support for merkle hash tree torrents. This makes the size of torrent files
|
||||
scale well with the size of the content.
|
||||
@@ -112,6 +113,7 @@ network
|
||||
.. _`BEP 16`: http://bittorrent.org/beps/bep_0016.html
|
||||
.. _`BEP 17`: http://bittorrent.org/beps/bep_0017.html
|
||||
.. _`BEP 19`: http://bittorrent.org/beps/bep_0019.html
|
||||
.. _`BEP 21`: http://bittorrent.org/beps/bep_0021.html
|
||||
.. _`BEP 24`: http://bittorrent.org/beps/bep_0024.html
|
||||
.. _`BEP 27`: http://bittorrent.org/beps/bep_0027.html
|
||||
.. _`extension protocol`: extension_protocol.html
|
||||
|
@@ -467,7 +467,7 @@ namespace libtorrent
|
||||
virtual void tracker_warning(tracker_request const& req
|
||||
, std::string const& msg);
|
||||
virtual void tracker_scrape_response(tracker_request const& req
|
||||
, int complete, int incomplete, int downloaded);
|
||||
, int complete, int incomplete, int downloaded, int downloaders);
|
||||
|
||||
// if no password and username is set
|
||||
// this will return an empty string, otherwise
|
||||
@@ -1234,6 +1234,10 @@ namespace libtorrent
|
||||
// from this torrent
|
||||
boost::uint16_t m_last_upload;
|
||||
|
||||
// the scrape data from the tracker response, this
|
||||
// is optional and may be 0xffffff
|
||||
unsigned int m_downloaders:24;
|
||||
|
||||
// round-robin index into m_interfaces
|
||||
mutable boost::uint8_t m_interface_index;
|
||||
};
|
||||
|
@@ -96,7 +96,8 @@ namespace libtorrent
|
||||
none,
|
||||
completed,
|
||||
started,
|
||||
stopped
|
||||
stopped,
|
||||
paused
|
||||
};
|
||||
|
||||
sha1_hash info_hash;
|
||||
@@ -124,7 +125,8 @@ namespace libtorrent
|
||||
virtual void tracker_warning(tracker_request const& req
|
||||
, std::string const& msg) = 0;
|
||||
virtual void tracker_scrape_response(tracker_request const& /*req*/
|
||||
, int /*complete*/, int /*incomplete*/, int /*downloads*/) {}
|
||||
, int /*complete*/, int /*incomplete*/, int /*downloads*/
|
||||
, int /*downloaders*/) {}
|
||||
virtual void tracker_response(
|
||||
tracker_request const& req
|
||||
, address const& tracker_ip
|
||||
|
@@ -158,7 +158,7 @@ namespace libtorrent
|
||||
|
||||
if (tracker_req().event != tracker_request::none)
|
||||
{
|
||||
const char* event_string[] = {"completed", "started", "stopped"};
|
||||
const char* event_string[] = {"completed", "started", "stopped", "paused"};
|
||||
url += "&event=";
|
||||
url += event_string[tracker_req().event - 1];
|
||||
}
|
||||
@@ -398,8 +398,9 @@ namespace libtorrent
|
||||
int complete = scrape_data->dict_find_int_value("complete", -1);
|
||||
int incomplete = scrape_data->dict_find_int_value("incomplete", -1);
|
||||
int downloaded = scrape_data->dict_find_int_value("downloaded", -1);
|
||||
int downloaders = scrape_data->dict_find_int_value("downloaders", -1);
|
||||
cb->tracker_scrape_response(tracker_req(), complete
|
||||
, incomplete, downloaded);
|
||||
, incomplete, downloaded, downloaders);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -383,6 +383,7 @@ namespace libtorrent
|
||||
, m_last_scrape(0)
|
||||
, m_last_download(0)
|
||||
, m_last_upload(0)
|
||||
, m_downloaders(0xffffff)
|
||||
, m_interface_index(0)
|
||||
{
|
||||
m_net_interfaces.push_back(tcp::endpoint(net_interface.address(), 0));
|
||||
@@ -1436,6 +1437,9 @@ namespace libtorrent
|
||||
|
||||
TORRENT_ASSERT(m_allow_peers || e == tracker_request::stopped);
|
||||
|
||||
if (e == tracker_request::none && is_finished())
|
||||
e = tracker_request::paused;
|
||||
|
||||
tracker_request req;
|
||||
req.info_hash = m_torrent_file->info_hash();
|
||||
req.pid = m_ses.get_peer_id();
|
||||
@@ -1611,7 +1615,7 @@ namespace libtorrent
|
||||
}
|
||||
|
||||
void torrent::tracker_scrape_response(tracker_request const& req
|
||||
, int complete, int incomplete, int downloaded)
|
||||
, int complete, int incomplete, int downloaded, int downloaders)
|
||||
{
|
||||
TORRENT_ASSERT(m_ses.is_network_thread());
|
||||
|
||||
@@ -1620,6 +1624,7 @@ namespace libtorrent
|
||||
|
||||
if (complete >= 0) m_complete = complete;
|
||||
if (incomplete >= 0) m_incomplete = incomplete;
|
||||
if (downloaders >= 0) m_downloaders = downloaders;
|
||||
|
||||
if (m_ses.m_alerts.should_post<scrape_reply_alert>())
|
||||
{
|
||||
@@ -3758,7 +3763,8 @@ namespace libtorrent
|
||||
m_seeding_time = rd.dict_find_int_value("seeding_time");
|
||||
m_last_seen_complete = rd.dict_find_int_value("last_seen_complete");
|
||||
m_complete = rd.dict_find_int_value("num_seeds", 0xffffff);
|
||||
m_incomplete = rd.dict_find_int_value("num_downloaders", 0xffffff);
|
||||
m_incomplete = rd.dict_find_int_value("num_incomplete", 0xffffff);
|
||||
m_downloaders = rd.dict_find_int_value("num_downloaders", 0xffffff);
|
||||
set_upload_limit(rd.dict_find_int_value("upload_rate_limit", -1));
|
||||
set_download_limit(rd.dict_find_int_value("download_rate_limit", -1));
|
||||
set_max_connections(rd.dict_find_int_value("max_connections", -1));
|
||||
@@ -3925,15 +3931,9 @@ namespace libtorrent
|
||||
ret["seeding_time"] = m_seeding_time;
|
||||
ret["last_seen_complete"] = m_last_seen_complete;
|
||||
|
||||
int seeds = 0;
|
||||
int downloaders = 0;
|
||||
if (m_complete >= 0) seeds = m_complete;
|
||||
else seeds = m_policy.num_seeds();
|
||||
if (m_incomplete >= 0) downloaders = m_incomplete;
|
||||
else downloaders = m_policy.num_peers() - m_policy.num_seeds();
|
||||
|
||||
ret["num_seeds"] = seeds;
|
||||
ret["num_downloaders"] = downloaders;
|
||||
ret["num_seeds"] = m_complete;
|
||||
ret["num_incomplete"] = m_incomplete;
|
||||
ret["num_downloaders"] = m_downloaders;
|
||||
|
||||
ret["sequential_download"] = m_sequential_download;
|
||||
|
||||
@@ -5392,10 +5392,11 @@ namespace libtorrent
|
||||
int seeds = 0;
|
||||
int downloaders = 0;
|
||||
|
||||
if (m_complete >= 0) seeds = m_complete;
|
||||
if (m_complete != 0xffffff) seeds = m_complete;
|
||||
else seeds = m_policy.num_seeds();
|
||||
|
||||
if (m_incomplete >= 0) downloaders = m_incomplete;
|
||||
if (m_downloaders != 0xffffff) downloaders = m_downloaders;
|
||||
else if (m_incomplete != 0xffffff) downloaders = m_incomplete;
|
||||
else downloaders = m_policy.num_peers() - m_policy.num_seeds();
|
||||
|
||||
if (seeds == 0)
|
||||
|
@@ -568,7 +568,7 @@ namespace libtorrent
|
||||
}
|
||||
|
||||
cb->tracker_scrape_response(tracker_req()
|
||||
, complete, incomplete, downloaded);
|
||||
, complete, incomplete, downloaded, -1);
|
||||
|
||||
m_man.remove_request(this);
|
||||
close();
|
||||
|
Reference in New Issue
Block a user