support requesting UPnP and NAT-PMP routers for our external IP address

This commit is contained in:
Arvid Norberg
2010-12-05 20:40:28 +00:00
parent 2f115bc1aa
commit 779014ddac
10 changed files with 276 additions and 35 deletions

View File

@@ -59,6 +59,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/io.hpp"
#include "libtorrent/socket.hpp"
#include "libtorrent/aux_/session_impl.hpp"
#include "libtorrent/broadcast_socket.hpp" // for is_local
using namespace libtorrent;
@@ -180,23 +181,34 @@ namespace libtorrent
}
else
#endif
if (!settings.announce_ip.empty())
if (!m_ses.settings().anonymous_mode)
{
error_code ec;
if (!ec) url += "&ip=" + escape_string(
settings.announce_ip.c_str(), settings.announce_ip.size());
}
if (!tracker_req().ipv6.empty() && !i2p)
{
url += "&ipv6=";
url += tracker_req().ipv6;
}
if (!tracker_req().ipv4.empty() && !i2p)
{
url += "&ipv4=";
url += tracker_req().ipv4;
if (!settings.announce_ip.empty())
{
url += "&ip=" + escape_string(
settings.announce_ip.c_str(), settings.announce_ip.size());
}
else if (m_ses.settings().announce_double_nat
&& is_local(m_ses.listen_address()))
{
// only use the global external listen address here
// if it turned out to be on a local network
// since otherwise the tracker should use our
// source IP to determine our origin
url += "&ip=" + print_address(m_ses.listen_address());
}
if (!tracker_req().ipv6.empty() && !i2p)
{
url += "&ipv6=";
url += tracker_req().ipv6;
}
if (!tracker_req().ipv4.empty() && !i2p)
{
url += "&ipv4=";
url += tracker_req().ipv4;
}
}
}