Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/peermanager.cpp
Show All 26 Lines | bool PeerManager::addNode(NodeId nodeid, const Delegation &delegation) { | ||||
} | } | ||||
DelegationState state; | DelegationState state; | ||||
CPubKey pubkey; | CPubKey pubkey; | ||||
if (!delegation.verify(state, pubkey)) { | if (!delegation.verify(state, pubkey)) { | ||||
return false; | return false; | ||||
} | } | ||||
return addOrUpdateNode(peers.project<0>(it), nodeid, std::move(pubkey)); | return addOrUpdateNode(peers.project<0>(it), nodeid); | ||||
} | } | ||||
bool PeerManager::addOrUpdateNode(const PeerSet::iterator &it, NodeId nodeid, | bool PeerManager::addOrUpdateNode(const PeerSet::iterator &it, NodeId nodeid) { | ||||
CPubKey pubkey) { | |||||
assert(it != peers.end()); | assert(it != peers.end()); | ||||
const PeerId peerid = it->peerid; | const PeerId peerid = it->peerid; | ||||
auto nit = nodes.find(nodeid); | auto nit = nodes.find(nodeid); | ||||
if (nit == nodes.end()) { | if (nit == nodes.end()) { | ||||
if (!nodes.emplace(nodeid, peerid, std::move(pubkey)).second) { | if (!nodes.emplace(nodeid, peerid).second) { | ||||
return false; | return false; | ||||
} | } | ||||
} else { | } else { | ||||
const PeerId oldpeerid = nit->peerid; | const PeerId oldpeerid = nit->peerid; | ||||
if (!nodes.modify(nit, [&](Node &n) { | if (!nodes.modify(nit, [&](Node &n) { n.peerid = peerid; })) { | ||||
n.peerid = peerid; | |||||
n.pubkey = std::move(pubkey); | |||||
})) { | |||||
return false; | return false; | ||||
} | } | ||||
// We actually have this node already, we need to update it. | // We actually have this node already, we need to update it. | ||||
bool success = removeNodeFromPeer(peers.find(oldpeerid)); | bool success = removeNodeFromPeer(peers.find(oldpeerid)); | ||||
assert(success); | assert(success); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 472 Lines • Show Last 20 Lines |