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