MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / MaybeDiscourageAndDisconnect

Method MaybeDiscourageAndDisconnect

src/net_processing.cpp:5126–5163  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5124}
5125
5126bool PeerManagerImpl::MaybeDiscourageAndDisconnect(CNode& pnode, Peer& peer)
5127{
5128 {
5129 LOCK(peer.m_misbehavior_mutex);
5130
5131 // There's nothing to do if the m_should_discourage flag isn't set
5132 if (!peer.m_should_discourage) return false;
5133
5134 peer.m_should_discourage = false;
5135 } // peer.m_misbehavior_mutex
5136
5137 if (pnode.HasPermission(NetPermissionFlags::NoBan)) {
5138 // We never disconnect or discourage peers for bad behavior if they have NetPermissionFlags::NoBan permission
5139 LogWarning("Not punishing noban peer %d!", peer.m_id);
5140 return false;
5141 }
5142
5143 if (pnode.IsManualConn()) {
5144 // We never disconnect or discourage manual peers for bad behavior
5145 LogWarning("Not punishing manually connected peer %d!", peer.m_id);
5146 return false;
5147 }
5148
5149 if (pnode.addr.IsLocal()) {
5150 // We disconnect local peers for bad behavior but don't discourage (since that would discourage
5151 // all peers on the same local address)
5152 LogDebug(BCLog::NET, "Warning: disconnecting but not discouraging %s peer %d!\n",
5153 pnode.m_inbound_onion ? "inbound onion" : "local", peer.m_id);
5154 pnode.fDisconnect = true;
5155 return true;
5156 }
5157
5158 // Normal case: Disconnect the peer and discourage all nodes sharing the address
5159 LogDebug(BCLog::NET, "Disconnecting and discouraging peer %d!\n", peer.m_id);
5160 if (m_banman) m_banman->Discourage(pnode.addr);
5161 m_connman.DisconnectNode(pnode.addr);
5162 return true;
5163}
5164
5165bool PeerManagerImpl::ProcessMessages(CNode& node, std::atomic<bool>& interruptMsgProc)
5166{

Callers

nothing calls this directly

Calls 5

HasPermissionMethod · 0.80
IsManualConnMethod · 0.80
IsLocalMethod · 0.80
DiscourageMethod · 0.80
DisconnectNodeMethod · 0.80

Tested by

no test coverage detected