1
0
mirror of https://github.com/d47081/qBittorrent.git synced 2025-01-30 16:34:16 +00:00

Don't use IPv4-mapped IPv6

Always register peers with either IPv4 or IPv6.
Fixes potential connection issues.

Also clarify related BEP-24 support.
This commit is contained in:
FranciscoPombal 2020-02-21 00:48:19 +00:00
parent abc69dfd20
commit af6f63f82c

View File

@ -272,6 +272,12 @@ void Tracker::processAnnounceRequest()
announceReq.socketAddress = m_env.clientAddress; announceReq.socketAddress = m_env.clientAddress;
announceReq.claimedAddress = queryParams.value(ANNOUNCE_REQUEST_IP); announceReq.claimedAddress = queryParams.value(ANNOUNCE_REQUEST_IP);
// Enforce using IPv4 if address is indeed IPv4 or if it is an IPv4-mapped IPv6 address
bool ok = false;
const qint32 decimalIPv4 = announceReq.socketAddress.toIPv4Address(&ok);
if (ok)
announceReq.socketAddress = QHostAddress(decimalIPv4);
// 1. info_hash // 1. info_hash
const auto infoHashIter = queryParams.find(ANNOUNCE_REQUEST_INFO_HASH); const auto infoHashIter = queryParams.find(ANNOUNCE_REQUEST_INFO_HASH);
if (infoHashIter == queryParams.end()) if (infoHashIter == queryParams.end())
@ -387,7 +393,7 @@ void Tracker::prepareAnnounceResponse(const TrackerAnnounceRequest &announceReq)
{ANNOUNCE_RESPONSE_COMPLETE, torrentStats.seeders}, {ANNOUNCE_RESPONSE_COMPLETE, torrentStats.seeders},
{ANNOUNCE_RESPONSE_INCOMPLETE, (torrentStats.peers.size() - torrentStats.seeders)}, {ANNOUNCE_RESPONSE_INCOMPLETE, (torrentStats.peers.size() - torrentStats.seeders)},
// [BEP-24] Tracker Returns External IP // [BEP-24] Tracker Returns External IP (partial support - might not work properly for all IPv6 cases)
{ANNOUNCE_RESPONSE_EXTERNAL_IP, toBigEndianByteArray(announceReq.socketAddress).toStdString()} {ANNOUNCE_RESPONSE_EXTERNAL_IP, toBigEndianByteArray(announceReq.socketAddress).toStdString()}
}; };