Changeset View
Changeset View
Standalone View
Standalone View
src/net_processing.cpp
Show First 20 Lines • Show All 573 Lines • ▼ Show 20 Lines | |||||
* May return nullptr if the Peer object can't be found. | * May return nullptr if the Peer object can't be found. | ||||
*/ | */ | ||||
static PeerRef GetPeerRef(NodeId id) { | static PeerRef GetPeerRef(NodeId id) { | ||||
LOCK(g_peer_mutex); | LOCK(g_peer_mutex); | ||||
auto it = g_peer_map.find(id); | auto it = g_peer_map.find(id); | ||||
return it != g_peer_map.end() ? it->second : nullptr; | return it != g_peer_map.end() ? it->second : nullptr; | ||||
} | } | ||||
static bool isPreferredDownloadPeer(const CNode &pfrom) { | |||||
LOCK(cs_main); | |||||
const CNodeState *state = State(pfrom.GetId()); | |||||
return state && state->fPreferredDownload; | |||||
} | |||||
static void UpdatePreferredDownload(const CNode &node, CNodeState *state) | static void UpdatePreferredDownload(const CNode &node, CNodeState *state) | ||||
EXCLUSIVE_LOCKS_REQUIRED(cs_main) { | EXCLUSIVE_LOCKS_REQUIRED(cs_main) { | ||||
nPreferredDownload -= state->fPreferredDownload; | nPreferredDownload -= state->fPreferredDownload; | ||||
// Whether this node should be marked as a preferred download node. | // Whether this node should be marked as a preferred download node. | ||||
state->fPreferredDownload = | state->fPreferredDownload = | ||||
(!node.IsInboundConn() || node.HasPermission(PF_NOBAN)) && | (!node.IsInboundConn() || node.HasPermission(PF_NOBAN)) && | ||||
!node.IsAddrFetchConn() && !node.fClient; | !node.IsAddrFetchConn() && !node.fClient; | ||||
▲ Show 20 Lines • Show All 405 Lines • ▼ Show 20 Lines | void PeerManager::AddTxAnnouncement(const CNode &node, const TxId &txid, | ||||
std::chrono::microseconds current_time) { | std::chrono::microseconds current_time) { | ||||
// For m_txrequest and state | // For m_txrequest and state | ||||
AssertLockHeld(::cs_main); | AssertLockHeld(::cs_main); | ||||
if (TooManyAnnouncements(node, m_txrequest, TX_REQUEST_PARAMS)) { | if (TooManyAnnouncements(node, m_txrequest, TX_REQUEST_PARAMS)) { | ||||
return; | return; | ||||
} | } | ||||
const NodeId &nodeid = node.GetId(); | const bool preferred = isPreferredDownloadPeer(node); | ||||
const CNodeState *state = State(nodeid); | |||||
const bool preferred = state->fPreferredDownload; | |||||
auto reqtime = ComputeRequestTime(node, m_txrequest, TX_REQUEST_PARAMS, | auto reqtime = ComputeRequestTime(node, m_txrequest, TX_REQUEST_PARAMS, | ||||
current_time, preferred); | current_time, preferred); | ||||
m_txrequest.ReceivedInv(nodeid, txid, preferred, reqtime); | m_txrequest.ReceivedInv(node.GetId(), txid, preferred, reqtime); | ||||
} | } | ||||
void PeerManager::AddProofAnnouncement(const CNode &node, | void PeerManager::AddProofAnnouncement(const CNode &node, | ||||
const avalanche::ProofId &proofid, | const avalanche::ProofId &proofid, | ||||
std::chrono::microseconds current_time, | std::chrono::microseconds current_time, | ||||
bool preferred) { | bool preferred) { | ||||
// For m_proofrequest | // For m_proofrequest | ||||
AssertLockHeld(cs_proofrequest); | AssertLockHeld(cs_proofrequest); | ||||
▲ Show 20 Lines • Show All 2,096 Lines • ▼ Show 20 Lines | if (msg_type == NetMsgType::INV) { | ||||
if (inv.IsMsgProof()) { | if (inv.IsMsgProof()) { | ||||
const avalanche::ProofId proofid(inv.hash); | const avalanche::ProofId proofid(inv.hash); | ||||
const bool fAlreadyHave = AlreadyHaveProof(proofid); | const bool fAlreadyHave = AlreadyHaveProof(proofid); | ||||
logInv(inv, fAlreadyHave); | logInv(inv, fAlreadyHave); | ||||
if (!fAlreadyHave && g_avalanche && | if (!fAlreadyHave && g_avalanche && | ||||
gArgs.GetBoolArg("-enableavalanche", | gArgs.GetBoolArg("-enableavalanche", | ||||
AVALANCHE_DEFAULT_ENABLED)) { | AVALANCHE_DEFAULT_ENABLED)) { | ||||
bool preferred; | const bool preferred = isPreferredDownloadPeer(pfrom); | ||||
{ | |||||
LOCK(cs_main); | |||||
const CNodeState *state = State(pfrom.GetId()); | |||||
preferred = state && state->fPreferredDownload; | |||||
} | |||||
LOCK(cs_proofrequest); | LOCK(cs_proofrequest); | ||||
AddProofAnnouncement(pfrom, proofid, current_time, | AddProofAnnouncement(pfrom, proofid, current_time, | ||||
preferred); | preferred); | ||||
} | } | ||||
continue; | continue; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,521 Lines • Show Last 20 Lines |