mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-03 09:56:38 -05:00
[net_processing] Keep addrman reference in PeerManager
This commit is contained in:
parent
1c25adf6d2
commit
392a95d393
5 changed files with 28 additions and 25 deletions
|
@ -1424,7 +1424,7 @@ bool AppInitMain(const util::Ref& context, NodeContext& node, interfaces::BlockA
|
||||||
ChainstateManager& chainman = *Assert(node.chainman);
|
ChainstateManager& chainman = *Assert(node.chainman);
|
||||||
|
|
||||||
assert(!node.peerman);
|
assert(!node.peerman);
|
||||||
node.peerman = PeerManager::make(chainparams, *node.connman, node.banman.get(),
|
node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(),
|
||||||
*node.scheduler, chainman, *node.mempool, ignores_incoming_txs);
|
*node.scheduler, chainman, *node.mempool, ignores_incoming_txs);
|
||||||
RegisterValidationInterface(node.peerman.get());
|
RegisterValidationInterface(node.peerman.get());
|
||||||
|
|
||||||
|
|
|
@ -225,9 +225,9 @@ using PeerRef = std::shared_ptr<Peer>;
|
||||||
class PeerManagerImpl final : public PeerManager
|
class PeerManagerImpl final : public PeerManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PeerManagerImpl(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
PeerManagerImpl(const CChainParams& chainparams, CConnman& connman, CAddrMan& addrman,
|
||||||
CScheduler& scheduler, ChainstateManager& chainman, CTxMemPool& pool,
|
BanMan* banman, CScheduler& scheduler, ChainstateManager& chainman,
|
||||||
bool ignore_incoming_txs);
|
CTxMemPool& pool, bool ignore_incoming_txs);
|
||||||
|
|
||||||
/** Overridden from CValidationInterface. */
|
/** Overridden from CValidationInterface. */
|
||||||
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected) override;
|
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected) override;
|
||||||
|
@ -322,6 +322,7 @@ private:
|
||||||
|
|
||||||
const CChainParams& m_chainparams;
|
const CChainParams& m_chainparams;
|
||||||
CConnman& m_connman;
|
CConnman& m_connman;
|
||||||
|
CAddrMan& m_addrman;
|
||||||
/** Pointer to this node's banman. May be nullptr - check existence before dereferencing. */
|
/** Pointer to this node's banman. May be nullptr - check existence before dereferencing. */
|
||||||
BanMan* const m_banman;
|
BanMan* const m_banman;
|
||||||
ChainstateManager& m_chainman;
|
ChainstateManager& m_chainman;
|
||||||
|
@ -1201,18 +1202,19 @@ bool PeerManagerImpl::BlockRequestAllowed(const CBlockIndex* pindex)
|
||||||
(GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, m_chainparams.GetConsensus()) < STALE_RELAY_AGE_LIMIT);
|
(GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, m_chainparams.GetConsensus()) < STALE_RELAY_AGE_LIMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<PeerManager> PeerManager::make(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
std::unique_ptr<PeerManager> PeerManager::make(const CChainParams& chainparams, CConnman& connman, CAddrMan& addrman,
|
||||||
CScheduler& scheduler, ChainstateManager& chainman, CTxMemPool& pool,
|
BanMan* banman, CScheduler& scheduler, ChainstateManager& chainman,
|
||||||
bool ignore_incoming_txs)
|
CTxMemPool& pool, bool ignore_incoming_txs)
|
||||||
{
|
{
|
||||||
return std::make_unique<PeerManagerImpl>(chainparams, connman, banman, scheduler, chainman, pool, ignore_incoming_txs);
|
return std::make_unique<PeerManagerImpl>(chainparams, connman, addrman, banman, scheduler, chainman, pool, ignore_incoming_txs);
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerManagerImpl::PeerManagerImpl(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
PeerManagerImpl::PeerManagerImpl(const CChainParams& chainparams, CConnman& connman, CAddrMan& addrman,
|
||||||
CScheduler& scheduler, ChainstateManager& chainman, CTxMemPool& pool,
|
BanMan* banman, CScheduler& scheduler, ChainstateManager& chainman,
|
||||||
bool ignore_incoming_txs)
|
CTxMemPool& pool, bool ignore_incoming_txs)
|
||||||
: m_chainparams(chainparams),
|
: m_chainparams(chainparams),
|
||||||
m_connman(connman),
|
m_connman(connman),
|
||||||
|
m_addrman(addrman),
|
||||||
m_banman(banman),
|
m_banman(banman),
|
||||||
m_chainman(chainman),
|
m_chainman(chainman),
|
||||||
m_mempool(pool),
|
m_mempool(pool),
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <sync.h>
|
#include <sync.h>
|
||||||
#include <validationinterface.h>
|
#include <validationinterface.h>
|
||||||
|
|
||||||
|
class CAddrMan;
|
||||||
class CChainParams;
|
class CChainParams;
|
||||||
class CTxMemPool;
|
class CTxMemPool;
|
||||||
class ChainstateManager;
|
class ChainstateManager;
|
||||||
|
@ -36,9 +37,9 @@ struct CNodeStateStats {
|
||||||
class PeerManager : public CValidationInterface, public NetEventsInterface
|
class PeerManager : public CValidationInterface, public NetEventsInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::unique_ptr<PeerManager> make(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
static std::unique_ptr<PeerManager> make(const CChainParams& chainparams, CConnman& connman, CAddrMan& addrman,
|
||||||
CScheduler& scheduler, ChainstateManager& chainman, CTxMemPool& pool,
|
BanMan* banman, CScheduler& scheduler, ChainstateManager& chainman,
|
||||||
bool ignore_incoming_txs);
|
CTxMemPool& pool, bool ignore_incoming_txs);
|
||||||
virtual ~PeerManager() { }
|
virtual ~PeerManager() { }
|
||||||
|
|
||||||
/** Get statistics from node state */
|
/** Get statistics from node state */
|
||||||
|
|
|
@ -68,8 +68,8 @@ BOOST_AUTO_TEST_CASE(outbound_slow_chain_eviction)
|
||||||
{
|
{
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
||||||
auto peerLogic = PeerManager::make(chainparams, *connman, nullptr, *m_node.scheduler,
|
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, nullptr,
|
||||||
*m_node.chainman, *m_node.mempool, false);
|
*m_node.scheduler, *m_node.chainman, *m_node.mempool, false);
|
||||||
|
|
||||||
// Mock an outbound peer
|
// Mock an outbound peer
|
||||||
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
||||||
|
@ -138,8 +138,8 @@ BOOST_AUTO_TEST_CASE(stale_tip_peer_management)
|
||||||
{
|
{
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
auto connman = std::make_unique<CConnmanTest>(0x1337, 0x1337, *m_node.addrman);
|
auto connman = std::make_unique<CConnmanTest>(0x1337, 0x1337, *m_node.addrman);
|
||||||
auto peerLogic = PeerManager::make(chainparams, *connman, nullptr, *m_node.scheduler,
|
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, nullptr,
|
||||||
*m_node.chainman, *m_node.mempool, false);
|
*m_node.scheduler, *m_node.chainman, *m_node.mempool, false);
|
||||||
|
|
||||||
constexpr int max_outbound_full_relay = MAX_OUTBOUND_FULL_RELAY_CONNECTIONS;
|
constexpr int max_outbound_full_relay = MAX_OUTBOUND_FULL_RELAY_CONNECTIONS;
|
||||||
CConnman::Options options;
|
CConnman::Options options;
|
||||||
|
@ -212,8 +212,8 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
auto banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
auto banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
||||||
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
||||||
auto peerLogic = PeerManager::make(chainparams, *connman, banman.get(), *m_node.scheduler,
|
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, banman.get(),
|
||||||
*m_node.chainman, *m_node.mempool, false);
|
*m_node.scheduler, *m_node.chainman, *m_node.mempool, false);
|
||||||
|
|
||||||
banman->ClearBanned();
|
banman->ClearBanned();
|
||||||
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
||||||
|
@ -259,8 +259,8 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
auto banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
auto banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
||||||
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman);
|
||||||
auto peerLogic = PeerManager::make(chainparams, *connman, banman.get(), *m_node.scheduler,
|
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, banman.get(),
|
||||||
*m_node.chainman, *m_node.mempool, false);
|
*m_node.scheduler, *m_node.chainman, *m_node.mempool, false);
|
||||||
|
|
||||||
banman->ClearBanned();
|
banman->ClearBanned();
|
||||||
int64_t nStartTime = GetTime();
|
int64_t nStartTime = GetTime();
|
||||||
|
|
|
@ -192,9 +192,9 @@ TestingSetup::TestingSetup(const std::string& chainName, const std::vector<const
|
||||||
m_node.addrman = std::make_unique<CAddrMan>();
|
m_node.addrman = std::make_unique<CAddrMan>();
|
||||||
m_node.banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
m_node.banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", nullptr, DEFAULT_MISBEHAVING_BANTIME);
|
||||||
m_node.connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman); // Deterministic randomness for tests.
|
m_node.connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman); // Deterministic randomness for tests.
|
||||||
m_node.peerman = PeerManager::make(chainparams, *m_node.connman, m_node.banman.get(),
|
m_node.peerman = PeerManager::make(chainparams, *m_node.connman, *m_node.addrman,
|
||||||
*m_node.scheduler, *m_node.chainman, *m_node.mempool,
|
m_node.banman.get(), *m_node.scheduler, *m_node.chainman,
|
||||||
false);
|
*m_node.mempool, false);
|
||||||
{
|
{
|
||||||
CConnman::Options options;
|
CConnman::Options options;
|
||||||
options.m_msgproc = m_node.peerman.get();
|
options.m_msgproc = m_node.peerman.get();
|
||||||
|
|
Loading…
Add table
Reference in a new issue