@@ -930,21 +930,15 @@ void PeerLogicValidation::ReattemptInitialBroadcast(CScheduler& scheduler) const
930930 scheduler.scheduleFromNow ([&] { ReattemptInitialBroadcast (scheduler); }, delta.count ());
931931}
932932
933- void PeerLogicValidation::FinalizeNode (const CNode& node, bool & fUpdateConnectionTime ) {
933+ void PeerLogicValidation::FinalizeNode (const CNode& node) {
934934 NodeId nodeid = node.GetId ();
935- fUpdateConnectionTime = false ;
936935 LOCK (cs_main);
937936 CNodeState *state = State (nodeid);
938937 assert (state != nullptr );
939938
940939 if (state->fSyncStarted )
941940 nSyncStarted--;
942941
943- if (state->nMisbehavior == 0 && state->fCurrentlyConnected /* && !node.IsBlockOnlyConn() */ ) {
944- // Note: we avoid changing visible addrman state for block-relay-only peers
945- fUpdateConnectionTime = true ;
946- }
947-
948942 for (const QueuedBlock& entry : state->vBlocksInFlight ) {
949943 mapBlocksInFlight.erase (entry.hash );
950944 }
@@ -964,6 +958,12 @@ void PeerLogicValidation::FinalizeNode(const CNode& node, bool& fUpdateConnectio
964958 assert (nPeersWithValidatedDownloads == 0 );
965959 assert (g_outbound_peers_with_protect_from_disconnect == 0 );
966960 }
961+ if (state->nMisbehavior == 0 && state->fCurrentlyConnected /* && !node.IsBlockOnlyConn() */ ) {
962+ // Only change visible addrman state for full outbound peers. We don't
963+ // call Connected() for feeler connections since they don't have
964+ // fSuccessfullyConnected set.
965+ m_addrman.Connected (node.addr );
966+ }
967967 LogPrint (BCLog::NET, " Cleared nodestate for peer=%d\n " , nodeid);
968968}
969969
@@ -1255,9 +1255,9 @@ static bool BlockRequestAllowed(const CBlockIndex* pindex, const Consensus::Para
12551255 (GetBlockProofEquivalentTime (*pindexBestHeader, *pindex, *pindexBestHeader, consensusParams) < STALE_RELAY_AGE_LIMIT);
12561256}
12571257
1258- PeerLogicValidation::PeerLogicValidation (CConnman* connmanIn, BanMan* banman, CScheduler &scheduler, ChainstateManager& chainman, CTxMemPool& pool ,
1259- std::unique_ptr<LLMQContext>& llmq_ctx) :
1260- connman(connmanIn), m_banman(banman), m_chainman(chainman), m_mempool(pool), m_llmq_ctx(llmq_ctx), m_stale_tip_check_time(0 )
1258+ PeerLogicValidation::PeerLogicValidation (CConnman* connmanIn, CAddrMan& addrman, BanMan* banman, CScheduler &scheduler, ChainstateManager& chainman,
1259+ CTxMemPool& pool, std::unique_ptr<LLMQContext>& llmq_ctx) :
1260+ connman(connmanIn), m_addrman(addrman), m_banman(banman), m_chainman(chainman), m_mempool(pool), m_llmq_ctx(llmq_ctx), m_stale_tip_check_time(0 )
12611261{
12621262 // Initialize global variables that cannot be constructed at startup.
12631263 recentRejects.reset (new CRollingBloomFilter (120000 , 0.000001 ));
@@ -2580,7 +2580,7 @@ std::pair<bool /*ret*/, bool /*do_return*/> static ValidateDSTX(CTxMemPool& memp
25802580}
25812581
25822582bool ProcessMessage (CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, int64_t nTimeReceived,
2583- const CChainParams& chainparams, ChainstateManager& chainman, CTxMemPool& mempool,
2583+ const CChainParams& chainparams, ChainstateManager& chainman, CAddrMan& addrman, CTxMemPool& mempool,
25842584 LLMQContext& llmq_ctx, CConnman* connman, BanMan* banman, const std::atomic<bool >& interruptMsgProc)
25852585{
25862586 LogPrint (BCLog::NET, " received: %s (%u bytes) peer=%d\n " , SanitizeString (msg_type), vRecv.size (), pfrom->GetId ());
@@ -2627,7 +2627,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
26272627 nServices = ServiceFlags (nServiceInt);
26282628 if (!pfrom->fInbound )
26292629 {
2630- connman-> SetServices (pfrom->addr , nServices);
2630+ addrman. SetServices (pfrom->addr , nServices);
26312631 }
26322632 if (!pfrom->fInbound && !pfrom->fFeeler && !pfrom->m_manual_connection && !HasAllDesirableServiceFlags (nServices))
26332633 {
@@ -2766,7 +2766,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
27662766 // Get recent addresses
27672767 connman->PushMessage (pfrom, CNetMsgMaker (nSendVersion).Make (NetMsgType::GETADDR));
27682768 pfrom->fGetAddr = true ;
2769- connman-> MarkAddressGood (pfrom->addr );
2769+ addrman. Good (pfrom->addr );
27702770 }
27712771
27722772 std::string remoteAddr;
@@ -2944,7 +2944,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
29442944 if (fReachable )
29452945 vAddrOk.push_back (addr);
29462946 }
2947- connman-> AddNewAddresses (vAddrOk, pfrom->addr , 2 * 60 * 60 );
2947+ addrman. Add (vAddrOk, pfrom->addr , 2 * 60 * 60 );
29482948 if (vAddr.size () < 1000 )
29492949 pfrom->fGetAddr = false ;
29502950 if (pfrom->fOneShot )
@@ -3634,7 +3634,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
36343634 } // cs_main
36353635
36363636 if (fProcessBLOCKTXN )
3637- return ProcessMessage (pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, chainman, mempool, llmq_ctx, connman, banman, interruptMsgProc);
3637+ return ProcessMessage (pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, chainman, addrman, mempool, llmq_ctx, connman, banman, interruptMsgProc);
36383638
36393639 if (fRevertToHeaderProcessing ) {
36403640 // Headers received from HB compact block peers are permitted to be
@@ -4229,7 +4229,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
42294229 bool fRet = false ;
42304230 try
42314231 {
4232- fRet = ProcessMessage (pfrom, msg_type, msg.m_recv , msg.m_time , chainparams, m_chainman, m_mempool, *m_llmq_ctx, connman, m_banman, interruptMsgProc);
4232+ fRet = ProcessMessage (pfrom, msg_type, msg.m_recv , msg.m_time , chainparams, m_chainman, m_addrman, m_mempool, *m_llmq_ctx, connman, m_banman, interruptMsgProc);
42334233 if (interruptMsgProc)
42344234 return false ;
42354235 if (!pfrom->vRecvGetData .empty ())
0 commit comments