From 8d5becd90a3da35ad0e896e5710e3fa64cd0535f Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 28 Sep 2026 15:16:59 -0400 Subject: [PATCH] set DHT datagram receiver after datagram destionation initializtion. Save nodes from ping and get_peers queires --- libi2pd_client/TorrentsDHT.cpp | 11 +++++------ libi2pd_client/TorrentsTunnel.cpp | 5 ++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/libi2pd_client/TorrentsDHT.cpp b/libi2pd_client/TorrentsDHT.cpp index 8f7a3fb7..cd150bd3 100644 --- a/libi2pd_client/TorrentsDHT.cpp +++ b/libi2pd_client/TorrentsDHT.cpp @@ -631,19 +631,18 @@ namespace torrents void TorrentsDHT::HandlePingQuery (const i2p::data::IdentHash& fromIdent, uint16_t fromPort, std::string_view transactionID, const NodeID& nodeID) { - LogPrint (eLogDebug, "TorrentsDHT: Ping query msg received"); - if (m_Nodes.emplace (nodeID, std::make_shared (nodeID, fromIdent, fromPort)).second) - m_RoutingTable->AddNode (nodeID); + LogPrint (eLogDebug, "TorrentsDHT: Ping query msg received from ", fromIdent.ToBase64 ()); + m_Nodes.emplace (nodeID, std::make_shared (nodeID, fromIdent, fromPort)); + m_RoutingTable->AddNode (nodeID); SendPingResponse (transactionID, fromIdent, fromPort + 1); // to rport } void TorrentsDHT::HandleGetPeersQuery (const i2p::data::IdentHash& fromIdent, uint16_t fromPort, std::string_view transactionID, const NodeID& nodeID, const Torrent::InfoHash& infoHash) { - LogPrint (eLogDebug, "TorrentsDHT: Get peers query msg received"); + LogPrint (eLogDebug, "TorrentsDHT: Get peers query msg received from ", fromIdent.ToBase64 ()); auto [nodesIt, inserted] = m_Nodes.emplace (nodeID, std::make_shared (nodeID, fromIdent, fromPort)); - if (inserted) - m_RoutingTable->AddNode (nodeID); + m_RoutingTable->AddNode (nodeID); std::shared_ptr torrent; auto it = m_Torrents.find (infoHash); diff --git a/libi2pd_client/TorrentsTunnel.cpp b/libi2pd_client/TorrentsTunnel.cpp index 58a74627..a3ac67f8 100644 --- a/libi2pd_client/TorrentsTunnel.cpp +++ b/libi2pd_client/TorrentsTunnel.cpp @@ -66,13 +66,12 @@ namespace torrents { i2p::client::I2PService::Start (); m_DiskIOService.Start (); - if (m_DHT) m_DHT->Start (); - auto dgramDest = GetLocalDestination ()->CreateDatagramDestination (true, i2p::datagram::eDatagramV1); // V1 for DHT if (dgramDest) dgramDest->SetRawReceiver (std::bind (&TorrentsTunnel::HandleRecvFromI2PRaw, std::static_pointer_cast(shared_from_this ()), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); + if (m_DHT) m_DHT->Start (); Accept (); @@ -92,6 +91,7 @@ namespace torrents void TorrentsTunnel::Stop () { + if (m_DHT) m_DHT->Stop (); auto localDestination = GetLocalDestination (); if (localDestination) { @@ -107,7 +107,6 @@ namespace torrents for (auto it: m_Torrents) StopTorrent (it.second); m_Torrents.clear (); - if (m_DHT) m_DHT->Stop (); m_DiskIOService.Stop (); i2p::client::I2PService::ClearHandlers (); // close connections i2p::client::I2PService::Stop ();