Skip to content
This repository was archived by the owner on Oct 28, 2021. It is now read-only.

Commit 7510fcc

Browse files
committed
Get rid of assigning endpoint to Peer in Host::onNodeTableEvent and Host::requirePeer.
Instead recreate Peer in case the endpoint changed for the same NodeID.
1 parent 1b1160b commit 7510fcc

File tree

1 file changed

+36
-34
lines changed

1 file changed

+36
-34
lines changed

libp2p/Host.cpp

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -343,38 +343,38 @@ void Host::startPeerSession(Public const& _id, RLP const& _rlp, unique_ptr<RLPXF
343343
LOG(m_logger) << "p2p.host.peer.register " << _id;
344344
}
345345

346-
void Host::onNodeTableEvent(NodeID const& _n, NodeTableEventType const& _e)
346+
void Host::onNodeTableEvent(NodeID const& _nodeID, NodeTableEventType const& _e)
347347
{
348348
if (_e == NodeEntryAdded)
349349
{
350-
LOG(m_logger) << "p2p.host.nodeTable.events.nodeEntryAdded " << _n;
351-
if (Node n = nodeFromNodeTable(_n))
350+
LOG(m_logger) << "p2p.host.nodeTable.events.nodeEntryAdded " << _nodeID;
351+
if (Node node = nodeFromNodeTable(_nodeID))
352352
{
353-
shared_ptr<Peer> p;
353+
shared_ptr<Peer> peer;
354354
DEV_RECURSIVE_GUARDED(x_sessions)
355355
{
356-
if (m_peers.count(_n))
357-
{
358-
p = m_peers[_n];
359-
p->endpoint = n.endpoint;
360-
}
356+
auto const itPeer = m_peers.find(_nodeID);
357+
if (itPeer != m_peers.end() &&
358+
itPeer->second->endpoint.address() == node.endpoint.address())
359+
peer = itPeer->second;
361360
else
362361
{
363-
p = make_shared<Peer>(n);
364-
m_peers[_n] = p;
365-
LOG(m_logger) << "p2p.host.peers.events.peerAdded " << _n << " " << p->endpoint;
362+
peer = make_shared<Peer>(node);
363+
m_peers[_nodeID] = peer;
364+
LOG(m_logger) << "p2p.host.peers.events.peerAdded " << _nodeID << " "
365+
<< peer->endpoint;
366366
}
367367
}
368368
if (peerSlotsAvailable(Egress))
369-
connect(p);
369+
connect(peer);
370370
}
371371
}
372372
else if (_e == NodeEntryDropped)
373373
{
374-
LOG(m_logger) << "p2p.host.nodeTable.events.NodeEntryDropped " << _n;
374+
LOG(m_logger) << "p2p.host.nodeTable.events.NodeEntryDropped " << _nodeID;
375375
RecursiveGuard l(x_sessions);
376-
if (m_peers.count(_n) && m_peers[_n]->peerType == PeerType::Optional)
377-
m_peers.erase(_n);
376+
if (m_peers.count(_nodeID) && m_peers[_nodeID]->peerType == PeerType::Optional)
377+
m_peers.erase(_nodeID);
378378
}
379379
}
380380

@@ -535,52 +535,54 @@ void Host::addNode(NodeID const& _node, NodeIPEndpoint const& _endpoint)
535535
addNodeToNodeTable(Node(_node, _endpoint));
536536
}
537537

538-
void Host::requirePeer(NodeID const& _n, NodeIPEndpoint const& _endpoint)
538+
void Host::requirePeer(NodeID const& _nodeID, NodeIPEndpoint const& _endpoint)
539539
{
540540
{
541541
Guard l(x_requiredPeers);
542-
m_requiredPeers.insert(_n);
542+
m_requiredPeers.insert(_nodeID);
543543
}
544544

545545
if (!m_run)
546546
return;
547-
548-
if (_n == id())
547+
548+
if (_nodeID == id())
549549
{
550-
cnetdetails << "Ingoring the request to connect to self " << _n;
550+
cnetdetails << "Ingoring the request to connect to self " << _nodeID;
551551
return;
552552
}
553553

554-
Node node(_n, _endpoint, PeerType::Required);
555-
if (_n)
554+
Node node(_nodeID, _endpoint, PeerType::Required);
555+
if (_nodeID)
556556
{
557557
// create or update m_peers entry
558-
shared_ptr<Peer> p;
558+
shared_ptr<Peer> peer;
559559
DEV_RECURSIVE_GUARDED(x_sessions)
560-
if (m_peers.count(_n))
560+
{
561+
auto const itPeer = m_peers.find(_nodeID);
562+
if (itPeer != m_peers.end() &&
563+
itPeer->second->endpoint.address() == node.endpoint.address())
561564
{
562-
p = m_peers[_n];
563-
p->endpoint = node.endpoint;
564-
p->peerType = PeerType::Required;
565+
peer = itPeer->second;
566+
peer->peerType = PeerType::Required;
565567
}
566568
else
567569
{
568-
p = make_shared<Peer>(node);
569-
m_peers[_n] = p;
570+
peer = make_shared<Peer>(node);
571+
m_peers[_nodeID] = peer;
570572
}
573+
}
571574
// required for discovery
572-
addNodeToNodeTable(*p, NodeTable::NodeRelation::Unknown);
575+
addNodeToNodeTable(*peer, NodeTable::NodeRelation::Unknown);
573576
}
574577
else
575578
{
576579
if (!addNodeToNodeTable(node))
577580
return;
578581
auto t = make_shared<boost::asio::deadline_timer>(m_ioService);
579582
t->expires_from_now(boost::posix_time::milliseconds(600));
580-
t->async_wait([this, _n](boost::system::error_code const& _ec)
581-
{
583+
t->async_wait([this, _nodeID](boost::system::error_code const& _ec) {
582584
if (!_ec)
583-
if (auto n = nodeFromNodeTable(_n))
585+
if (auto n = nodeFromNodeTable(_nodeID))
584586
requirePeer(n.id, n.endpoint);
585587
});
586588
DEV_GUARDED(x_timers)

0 commit comments

Comments
 (0)