diff --git a/libi2pd/NTCP2.cpp b/libi2pd/NTCP2.cpp index c8aac2d5..fb22731b 100644 --- a/libi2pd/NTCP2.cpp +++ b/libi2pd/NTCP2.cpp @@ -1291,6 +1291,7 @@ namespace transport if (remoteIdentity && remoteIdentity->GetIdentHash () == newRi->GetIdentHash ()) // peer's RouterInfo update SetRemoteIdentity (newRi->GetIdentity ()); + i2p::transport::transports.UpdatePeerParams (newRi); } } else diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index d2a11f3d..0ee0a9ec 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -1772,6 +1772,7 @@ namespace transport m_RelayTag = 0; // not longer introducer } } + i2p::transport::transports.UpdatePeerParams (newRi); } } diff --git a/libi2pd/Transports.cpp b/libi2pd/Transports.cpp index f8534a45..73fc3b9c 100644 --- a/libi2pd/Transports.cpp +++ b/libi2pd/Transports.cpp @@ -1021,6 +1021,20 @@ namespace transport #endif } + void Transports::UpdatePeerParams (std::shared_ptr r) + { + if (!r) return; + std::shared_ptr peer; + { + std::lock_guard l(m_PeersMutex); + auto it = m_Peers.find (r->GetIdentHash ()); + if (it != m_Peers.end ()) + peer = it->second; + } + if (peer) + peer->UpdateParams (r); + } + void Transports::HandlePeerCleanupTimer (const boost::system::error_code& ecode) { if (ecode != boost::asio::error::operation_aborted) diff --git a/libi2pd/Transports.h b/libi2pd/Transports.h index 6288d2ef..de09a32c 100644 --- a/libi2pd/Transports.h +++ b/libi2pd/Transports.h @@ -159,6 +159,7 @@ namespace transport void PeerConnected (std::shared_ptr session); void PeerDisconnected (std::shared_ptr session); bool IsConnected (const i2p::data::IdentHash& ident) const; + void UpdatePeerParams (std::shared_ptr r); void UpdateSentBytes (uint64_t numBytes) { m_TotalSentBytes += numBytes; }; void UpdateReceivedBytes (uint64_t numBytes) { m_TotalReceivedBytes += numBytes; };