@@ -4083,6 +4083,12 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
40834083 // Dump network addresses
40844084 scheduler.scheduleEvery ([this ] { DumpAddresses (); }, DUMP_PEERS_INTERVAL);
40854085
4086+ // Run the ASMap Health check once and then schedule it to run every 24h.
4087+ if (m_netgroupman.UsingASMap ()) {
4088+ ASMapHealthCheck ();
4089+ scheduler.scheduleEvery ([this ] { ASMapHealthCheck (); }, ASMAP_HEALTH_CHECK_INTERVAL);
4090+ }
4091+
40864092 return true ;
40874093}
40884094
@@ -4218,9 +4224,9 @@ CConnman::~CConnman()
42184224 Stop ();
42194225}
42204226
4221- std::vector<CAddress> CConnman::GetAddresses (size_t max_addresses, size_t max_pct, std::optional<Network> network) const
4227+ std::vector<CAddress> CConnman::GetAddresses (size_t max_addresses, size_t max_pct, std::optional<Network> network, const bool filtered ) const
42224228{
4223- std::vector<CAddress> addresses = addrman.GetAddr (max_addresses, max_pct, network);
4229+ std::vector<CAddress> addresses = addrman.GetAddr (max_addresses, max_pct, network, filtered );
42244230 if (m_banman) {
42254231 addresses.erase (std::remove_if (addresses.begin (), addresses.end (),
42264232 [this ](const CAddress& addr){return m_banman->IsDiscouraged (addr) || m_banman->IsBanned (addr);}),
@@ -4945,6 +4951,19 @@ void CConnman::PerformReconnections()
49454951 }
49464952}
49474953
4954+ void CConnman::ASMapHealthCheck ()
4955+ {
4956+ const std::vector<CAddress> v4_addrs{GetAddresses (/* max_addresses=*/ 0 , /* max_pct=*/ 0 , Network::NET_IPV4, /* filtered=*/ false )};
4957+ const std::vector<CAddress> v6_addrs{GetAddresses (/* max_addresses=*/ 0 , /* max_pct=*/ 0 , Network::NET_IPV6, /* filtered=*/ false )};
4958+ std::vector<CNetAddr> clearnet_addrs;
4959+ clearnet_addrs.reserve (v4_addrs.size () + v6_addrs.size ());
4960+ std::transform (v4_addrs.begin (), v4_addrs.end (), std::back_inserter (clearnet_addrs),
4961+ [](const CAddress& addr) { return static_cast <CNetAddr>(addr); });
4962+ std::transform (v6_addrs.begin (), v6_addrs.end (), std::back_inserter (clearnet_addrs),
4963+ [](const CAddress& addr) { return static_cast <CNetAddr>(addr); });
4964+ m_netgroupman.ASMapHealthCheck (clearnet_addrs);
4965+ }
4966+
49484967// Dump binary message to file, with timestamp.
49494968static void CaptureMessageToFile (const CAddress& addr,
49504969 const std::string& msg_type,
0 commit comments