diff --git a/src/addrman.h b/src/addrman.h --- a/src/addrman.h +++ b/src/addrman.h @@ -176,7 +176,7 @@ #define ADDRMAN_GETADDR_MAX_PCT 23 //! the maximum number of nodes to return in a getaddr call -#define ADDRMAN_GETADDR_MAX 2500 +#define ADDRMAN_GETADDR_MAX 1000 //! Convenience #define ADDRMAN_TRIED_BUCKET_COUNT (1 << ADDRMAN_TRIED_BUCKET_COUNT_LOG2) diff --git a/src/net.h b/src/net.h --- a/src/net.h +++ b/src/net.h @@ -60,6 +60,11 @@ static const int FEELER_INTERVAL = 120; /** The maximum number of new addresses to accumulate before announcing. */ static const unsigned int MAX_ADDR_TO_SEND = 1000; +// TODO: remove ADDRMAN_GETADDR_MAX and let the caller specify this limit with +// MAX_ADDR_TO_SEND. +static_assert(MAX_ADDR_TO_SEND == ADDRMAN_GETADDR_MAX, + "Max allowed ADDR message size should be equal to the max number " + "of records returned from AddrMan."); /** Maximum length of the user agent string in `version` message */ static const unsigned int MAX_SUBVERSION_LENGTH = 256; /** diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -3133,7 +3133,7 @@ if (!pfrom.RelayAddrsWithConn()) { return; } - if (vAddr.size() > 1000) { + if (vAddr.size() > MAX_ADDR_TO_SEND) { Misbehaving( pfrom, 20, strprintf("%s message size = %u", msg_type, vAddr.size())); @@ -5193,8 +5193,9 @@ if (!pto->m_addr_known->contains(addr.GetKey())) { pto->m_addr_known->insert(addr.GetKey()); vAddr.push_back(addr); - // receiver rejects addr messages larger than 1000 - if (vAddr.size() >= 1000) { + // receiver rejects addr messages larger than + // MAX_ADDR_TO_SEND + if (vAddr.size() >= MAX_ADDR_TO_SEND) { m_connman.PushMessage( pto, msgMaker.Make(make_flags, msg_type, vAddr)); vAddr.clear();