forked from premiere/premiere-libtorrent
add support for &ipv4= tracker argument
This commit is contained in:
parent
c1bfd696d4
commit
0d8a5a8a44
|
@ -1,5 +1,6 @@
|
||||||
1.2 release
|
1.2 release
|
||||||
|
|
||||||
|
* support &ipv4= tracker argument for private torrents
|
||||||
* renamed debug_notification to connect_notification
|
* renamed debug_notification to connect_notification
|
||||||
* when updating listen sockets, only post alerts for new ones
|
* when updating listen sockets, only post alerts for new ones
|
||||||
* deprecate anonymous_mode_alert
|
* deprecate anonymous_mode_alert
|
||||||
|
|
|
@ -144,6 +144,7 @@ namespace libtorrent {
|
||||||
std::uint32_t key;
|
std::uint32_t key;
|
||||||
int num_want;
|
int num_want;
|
||||||
std::vector<address_v6> ipv6;
|
std::vector<address_v6> ipv6;
|
||||||
|
std::vector<address_v4> ipv4;
|
||||||
sha1_hash info_hash;
|
sha1_hash info_hash;
|
||||||
peer_id pid;
|
peer_id pid;
|
||||||
|
|
||||||
|
|
|
@ -970,11 +970,13 @@ TORRENT_TEST(tracker_ipv6_argument)
|
||||||
{
|
{
|
||||||
bool got_announce = false;
|
bool got_announce = false;
|
||||||
bool got_ipv6 = false;
|
bool got_ipv6 = false;
|
||||||
|
bool got_ipv4 = false;
|
||||||
tracker_test(
|
tracker_test(
|
||||||
[](lt::add_torrent_params& p, lt::session& ses)
|
[](lt::add_torrent_params& p, lt::session& ses)
|
||||||
{
|
{
|
||||||
settings_pack pack;
|
settings_pack pack;
|
||||||
pack.set_bool(settings_pack::anonymous_mode, false);
|
pack.set_bool(settings_pack::anonymous_mode, false);
|
||||||
|
pack.set_str(settings_pack::listen_interfaces, "10.0.0.3:0,[ffff::1337]:0");
|
||||||
ses.apply_settings(pack);
|
ses.apply_settings(pack);
|
||||||
p.ti = make_torrent(true);
|
p.ti = make_torrent(true);
|
||||||
return 60;
|
return 60;
|
||||||
|
@ -984,13 +986,22 @@ TORRENT_TEST(tracker_ipv6_argument)
|
||||||
{
|
{
|
||||||
got_announce = true;
|
got_announce = true;
|
||||||
bool const stop_event = req.find("&event=stopped") != std::string::npos;
|
bool const stop_event = req.find("&event=stopped") != std::string::npos;
|
||||||
// stop events don't need to advertise the IPv6 address
|
// stop events don't need to advertise the IPv6/IPv4 address
|
||||||
std::string::size_type pos = req.find("&ipv6=");
|
{
|
||||||
|
std::string::size_type const pos = req.find("&ipv6=");
|
||||||
TEST_CHECK(pos != std::string::npos || stop_event);
|
TEST_CHECK(pos != std::string::npos || stop_event);
|
||||||
got_ipv6 |= pos != std::string::npos;
|
got_ipv6 |= pos != std::string::npos;
|
||||||
// make sure the IPv6 argument is url encoded
|
// make sure the IPv6 argument is url encoded
|
||||||
TEST_CHECK(req.substr(pos + 6, req.substr(pos + 6).find_first_of('&'))
|
TEST_EQUAL(req.substr(pos + 6, req.substr(pos + 6).find_first_of('&'))
|
||||||
== "ffff%3a%3a1337");
|
, "ffff%3a%3a1337");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string::size_type const pos = req.find("&ipv4=");
|
||||||
|
TEST_CHECK(pos != std::string::npos || stop_event);
|
||||||
|
got_ipv4 |= pos != std::string::npos;
|
||||||
|
TEST_EQUAL(req.substr(pos + 6, req.substr(pos + 6).find_first_of('&')), "10.0.0.3");
|
||||||
|
}
|
||||||
return sim::send_response(200, "OK", 11) + "d5:peers0:e";
|
return sim::send_response(200, "OK", 11) + "d5:peers0:e";
|
||||||
}
|
}
|
||||||
, [](torrent_handle) {}
|
, [](torrent_handle) {}
|
||||||
|
|
|
@ -172,6 +172,17 @@ namespace libtorrent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tracker_req().ipv4.empty() && !i2p)
|
||||||
|
{
|
||||||
|
for (auto const& v4 : tracker_req().ipv4)
|
||||||
|
{
|
||||||
|
error_code err;
|
||||||
|
std::string const ip = v4.to_string(err);
|
||||||
|
if (err) continue;
|
||||||
|
url += "&ipv4=";
|
||||||
|
url += escape_string(ip);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!tracker_req().ipv6.empty() && !i2p)
|
if (!tracker_req().ipv6.empty() && !i2p)
|
||||||
{
|
{
|
||||||
for (auto const& v6 : tracker_req().ipv6)
|
for (auto const& v6 : tracker_req().ipv6)
|
||||||
|
|
|
@ -2782,11 +2782,13 @@ bool is_downloading_state(int const st)
|
||||||
{
|
{
|
||||||
m_ses.for_each_listen_socket([&](aux::listen_socket_handle const& s)
|
m_ses.for_each_listen_socket([&](aux::listen_socket_handle const& s)
|
||||||
{
|
{
|
||||||
if (s.is_ssl() != is_ssl_torrent())
|
if (s.is_ssl() != is_ssl_torrent()) return;
|
||||||
return;
|
tcp::endpoint const ep = s.get_local_endpoint();
|
||||||
if (!is_v6(s.get_local_endpoint()))
|
if (is_any(ep.address())) return;
|
||||||
return;
|
if (is_v6(ep))
|
||||||
req.ipv6.push_back(s.get_local_endpoint().address().to_v6());
|
req.ipv6.push_back(ep.address().to_v6());
|
||||||
|
else
|
||||||
|
req.ipv4.push_back(ep.address().to_v4());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue