From af6f63f82cff6756e6948c2804c80fdd6c778ab1 Mon Sep 17 00:00:00 2001 From: FranciscoPombal Date: Fri, 21 Feb 2020 00:48:19 +0000 Subject: [PATCH] Don't use IPv4-mapped IPv6 Always register peers with either IPv4 or IPv6. Fixes potential connection issues. Also clarify related BEP-24 support. --- src/base/bittorrent/tracker.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/base/bittorrent/tracker.cpp b/src/base/bittorrent/tracker.cpp index 3ee533983..8e741de03 100644 --- a/src/base/bittorrent/tracker.cpp +++ b/src/base/bittorrent/tracker.cpp @@ -272,6 +272,12 @@ void Tracker::processAnnounceRequest() announceReq.socketAddress = m_env.clientAddress; 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 const auto infoHashIter = queryParams.find(ANNOUNCE_REQUEST_INFO_HASH); if (infoHashIter == queryParams.end()) @@ -387,7 +393,7 @@ void Tracker::prepareAnnounceResponse(const TrackerAnnounceRequest &announceReq) {ANNOUNCE_RESPONSE_COMPLETE, 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()} };