From 2d57d3f6783efbfebde6c5b03f29e6c231a84d6b Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 2 Oct 2026 11:26:25 -0400 Subject: [PATCH] don't connect to peers for complete torrent --- libi2pd_client/Torrents.cpp | 1 + libi2pd_client/TorrentsDHT.cpp | 17 ++++++++++------- libi2pd_client/TorrentsTunnel.cpp | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libi2pd_client/Torrents.cpp b/libi2pd_client/Torrents.cpp index 5b2916a4..5236924a 100644 --- a/libi2pd_client/Torrents.cpp +++ b/libi2pd_client/Torrents.cpp @@ -2311,6 +2311,7 @@ namespace torrents void PeerConnection::HandleI2PPEXExtension (const uint8_t * buf, size_t len) { + if (m_Torrent->IsComplete ()) return; std::unordered_set newPeers; ParseDictionary (std::string_view ((const char *)buf, len), [&newPeers](std::string_view key, std::string_view buf)->size_t diff --git a/libi2pd_client/TorrentsDHT.cpp b/libi2pd_client/TorrentsDHT.cpp index 11f6c6d6..d8c82f00 100644 --- a/libi2pd_client/TorrentsDHT.cpp +++ b/libi2pd_client/TorrentsDHT.cpp @@ -857,14 +857,17 @@ namespace torrents auto torrent = info ? info->torrent.lock () : nullptr; if (torrent) { - std::unordered_set newPeers; - for (auto it: peers) - if (it.size () == i2p::data::IdentHash::len) - newPeers.emplace ((const uint8_t *)it.data ()); - if (!newPeers.empty ()) + if (!torrent->IsComplete ()) { - LogPrint (eLogDebug, "TorrentsDHT: ", newPeers.size (), " new peers received"); - m_Tunnel.ConnectToNewPeers (torrent, newPeers, ePeerConnectionOriginDHT); + std::unordered_set newPeers; + for (auto it: peers) + if (it.size () == i2p::data::IdentHash::len) + newPeers.emplace ((const uint8_t *)it.data ()); + if (!newPeers.empty ()) + { + LogPrint (eLogDebug, "TorrentsDHT: ", newPeers.size (), " new peers received"); + m_Tunnel.ConnectToNewPeers (torrent, newPeers, ePeerConnectionOriginDHT); + } } LogPrint (eLogDebug, "TorrentsDHT: Send announce to ", toIdent.ToBase64 ()); SendAnnouncePeerQuery (torrent->GetInfoHash (), token, toIdent, toPort); diff --git a/libi2pd_client/TorrentsTunnel.cpp b/libi2pd_client/TorrentsTunnel.cpp index 4c34a44b..f5cfa59e 100644 --- a/libi2pd_client/TorrentsTunnel.cpp +++ b/libi2pd_client/TorrentsTunnel.cpp @@ -706,7 +706,7 @@ namespace torrents size_t TorrentsTunnel::ConnectToPeers (std::shared_ptr torrent) { - if (!torrent) return 0; + if (!torrent || torrent->IsComplete ()) return 0; auto peersToConnect = torrent->GetNonConnectedPeers (); // from trackers if (!peersToConnect.empty ()) { @@ -718,7 +718,7 @@ namespace torrents size_t TorrentsTunnel::ConnectToPeers (std::shared_ptr torrent, size_t trackerID) { - if (!torrent) return 0; + if (!torrent || torrent->IsComplete ()) return 0; auto peersToConnect = torrent->GetNonConnectedPeers (trackerID); if (!peersToConnect.empty ()) { @@ -731,7 +731,7 @@ namespace torrents void TorrentsTunnel::ConnectToNewPeers (std::shared_ptr torrent, std::unordered_set& newPeers, PeerConnectionOrigin origin) { - if (!torrent) return; + if (!torrent || torrent->IsComplete ()) return; if (!newPeers.empty ()) { for (const auto& it: newPeers)