don't send stats to trackers received through tracker exchange
This commit is contained in:
parent
6eefa02c56
commit
9b15c11740
|
@ -87,6 +87,7 @@ namespace libtorrent
|
||||||
, updating(false)
|
, updating(false)
|
||||||
, start_sent(false)
|
, start_sent(false)
|
||||||
, complete_sent(false)
|
, complete_sent(false)
|
||||||
|
, send_stats(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::string url;
|
std::string url;
|
||||||
|
@ -126,6 +127,9 @@ namespace libtorrent
|
||||||
// this is true if event completed has been sent to the tracker
|
// this is true if event completed has been sent to the tracker
|
||||||
bool complete_sent:1;
|
bool complete_sent:1;
|
||||||
|
|
||||||
|
// this is false the stats sent to this tracker will be 0
|
||||||
|
bool send_stats:1;
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
start_sent = false;
|
start_sent = false;
|
||||||
|
|
|
@ -82,6 +82,7 @@ namespace libtorrent
|
||||||
, event(none)
|
, event(none)
|
||||||
, key(0)
|
, key(0)
|
||||||
, num_want(0)
|
, num_want(0)
|
||||||
|
, send_stats(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -111,6 +112,7 @@ namespace libtorrent
|
||||||
std::string ipv6;
|
std::string ipv6;
|
||||||
std::string ipv4;
|
std::string ipv4;
|
||||||
address bind_ip;
|
address bind_ip;
|
||||||
|
bool send_stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TORRENT_EXPORT request_callback
|
struct TORRENT_EXPORT request_callback
|
||||||
|
|
|
@ -137,15 +137,16 @@ namespace libtorrent
|
||||||
if (tracker_req().kind == tracker_request::announce_request)
|
if (tracker_req().kind == tracker_request::announce_request)
|
||||||
{
|
{
|
||||||
char str[1024];
|
char str[1024];
|
||||||
|
const bool stats = tracker_req().send_stats;
|
||||||
snprintf(str, sizeof(str), "&peer_id=%s&port=%d&uploaded=%"PRId64
|
snprintf(str, sizeof(str), "&peer_id=%s&port=%d&uploaded=%"PRId64
|
||||||
"&downloaded=%"PRId64"&left=%"PRId64"&compact=1&numwant=%d&key=%x&no_peer_id=1"
|
"&downloaded=%"PRId64"&left=%"PRId64"&compact=1&numwant=%d&key=%x&no_peer_id=1"
|
||||||
, escape_string((const char*)&tracker_req().pid[0], 20).c_str()
|
, escape_string((const char*)&tracker_req().pid[0], 20).c_str()
|
||||||
// the i2p tracker seems to verify that the port is not 0,
|
// the i2p tracker seems to verify that the port is not 0,
|
||||||
// even though it ignores it otherwise
|
// even though it ignores it otherwise
|
||||||
, i2p ? 1 : tracker_req().listen_port
|
, i2p ? 1 : tracker_req().listen_port
|
||||||
, tracker_req().uploaded
|
, stats ? tracker_req().uploaded : 0
|
||||||
, tracker_req().downloaded
|
, stats ? tracker_req().downloaded : 0
|
||||||
, tracker_req().left
|
, stats ? tracker_req().left : 0
|
||||||
, tracker_req().num_want
|
, tracker_req().num_want
|
||||||
, tracker_req().key);
|
, tracker_req().key);
|
||||||
url += str;
|
url += str;
|
||||||
|
|
|
@ -220,6 +220,7 @@ namespace libtorrent { namespace
|
||||||
announce_entry e(added->list_string_value_at(i));
|
announce_entry e(added->list_string_value_at(i));
|
||||||
if (e.url.empty()) continue;
|
if (e.url.empty()) continue;
|
||||||
e.fail_limit = 3;
|
e.fail_limit = 3;
|
||||||
|
e.send_stats = false;
|
||||||
e.source = announce_entry::source_tex;
|
e.source = announce_entry::source_tex;
|
||||||
m_torrent.add_tracker(e);
|
m_torrent.add_tracker(e);
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
|
|
|
@ -3606,6 +3606,9 @@ namespace libtorrent
|
||||||
for (std::vector<announce_entry>::const_iterator i = m_trackers.begin()
|
for (std::vector<announce_entry>::const_iterator i = m_trackers.begin()
|
||||||
, end(m_trackers.end()); i != end; ++i)
|
, end(m_trackers.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
|
// don't save trackers we can't trust
|
||||||
|
// TODO: save the send_stats state instead
|
||||||
|
if (i->send_stats == false) continue;
|
||||||
if (i->tier == tier)
|
if (i->tier == tier)
|
||||||
{
|
{
|
||||||
tr_list.back().list().push_back(i->url);
|
tr_list.back().list().push_back(i->url);
|
||||||
|
|
|
@ -513,6 +513,7 @@ namespace libtorrent
|
||||||
char* out = buf;
|
char* out = buf;
|
||||||
|
|
||||||
tracker_request const& req = tracker_req();
|
tracker_request const& req = tracker_req();
|
||||||
|
const bool stats = req.send_stats;
|
||||||
session_settings const& settings = m_ses.settings();
|
session_settings const& settings = m_ses.settings();
|
||||||
|
|
||||||
detail::write_int64(m_connection_id, out); // connection_id
|
detail::write_int64(m_connection_id, out); // connection_id
|
||||||
|
@ -522,9 +523,9 @@ namespace libtorrent
|
||||||
out += 20;
|
out += 20;
|
||||||
std::copy(req.pid.begin(), req.pid.end(), out); // peer_id
|
std::copy(req.pid.begin(), req.pid.end(), out); // peer_id
|
||||||
out += 20;
|
out += 20;
|
||||||
detail::write_int64(req.downloaded, out); // downloaded
|
detail::write_int64(stats ? req.downloaded : 0, out); // downloaded
|
||||||
detail::write_int64(req.left, out); // left
|
detail::write_int64(stats ? req.left : 0, out); // left
|
||||||
detail::write_int64(req.uploaded, out); // uploaded
|
detail::write_int64(stats ? req.uploaded : 0, out); // uploaded
|
||||||
detail::write_int32(req.event, out); // event
|
detail::write_int32(req.event, out); // event
|
||||||
// ip address
|
// ip address
|
||||||
if (settings.announce_ip != address() && settings.announce_ip.is_v4())
|
if (settings.announce_ip != address() && settings.announce_ip.is_v4())
|
||||||
|
|
Loading…
Reference in New Issue