mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
Merge bitcoin/bitcoin#21719: refactor: Add and use EnsureConnman in rpc code
fafb68add5e16e8bd5b9428bcffcaee2639747cf refactor: Add and use EnsureConnman in rpc code (MarcoFalke) faabeb854a6e46b46e4f26b22dc2c81e68e2d863 refactor: Mark member functions const (MarcoFalke) Pull request description: This removes the 10 occurrences of `throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");` and replaces them with `EnsureConnman`. ACKs for top commit: jarolrod: re-ACK fafb68add5e16e8bd5b9428bcffcaee2639747cf theStack: ACK fafb68add5e16e8bd5b9428bcffcaee2639747cf ryanofsky: Code review ACK fafb68add5e16e8bd5b9428bcffcaee2639747cf Tree-SHA512: 84c63cfe31e548645d906f7191a3526c7bea99ed0d54c2a75c2041452a44fe149ede343d8e1943b0e7770816c828bb047dfec8bc541a1f2b89920a126ee54d68
This commit is contained in:
parent
74b20eb309
commit
751c9e66c4
@ -286,6 +286,7 @@ BITCOIN_CORE_H = \
|
||||
rpc/blockchain.h \
|
||||
rpc/client.h \
|
||||
rpc/mining.h \
|
||||
rpc/net.h \
|
||||
rpc/protocol.h \
|
||||
rpc/rawtransaction_util.h \
|
||||
rpc/register.h \
|
||||
|
28
src/net.cpp
28
src/net.cpp
@ -2256,7 +2256,7 @@ void CConnman::ProcessAddrFetch()
|
||||
}
|
||||
}
|
||||
|
||||
bool CConnman::GetTryNewOutboundPeer()
|
||||
bool CConnman::GetTryNewOutboundPeer() const
|
||||
{
|
||||
return m_try_another_outbound_peer;
|
||||
}
|
||||
@ -2273,7 +2273,7 @@ void CConnman::SetTryNewOutboundPeer(bool flag)
|
||||
// Also exclude peers that haven't finished initial connection handshake yet
|
||||
// (so that we don't decide we're over our desired connection limit, and then
|
||||
// evict some peer that has finished the handshake)
|
||||
int CConnman::GetExtraFullOutboundCount()
|
||||
int CConnman::GetExtraFullOutboundCount() const
|
||||
{
|
||||
int full_outbound_peers = 0;
|
||||
{
|
||||
@ -2291,7 +2291,7 @@ int CConnman::GetExtraFullOutboundCount()
|
||||
return std::max(full_outbound_peers - m_max_outbound_full_relay, 0);
|
||||
}
|
||||
|
||||
int CConnman::GetExtraBlockRelayCount()
|
||||
int CConnman::GetExtraBlockRelayCount() const
|
||||
{
|
||||
int block_relay_peers = 0;
|
||||
{
|
||||
@ -2619,7 +2619,7 @@ std::vector<CAddress> CConnman::GetCurrentBlockRelayOnlyConns() const
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::vector<AddedNodeInfo> CConnman::GetAddedNodeInfo()
|
||||
std::vector<AddedNodeInfo> CConnman::GetAddedNodeInfo() const
|
||||
{
|
||||
std::vector<AddedNodeInfo> ret;
|
||||
|
||||
@ -3621,7 +3621,7 @@ CConnman::~CConnman()
|
||||
Stop();
|
||||
}
|
||||
|
||||
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network)
|
||||
std::vector<CAddress> CConnman::GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const
|
||||
{
|
||||
std::vector<CAddress> addresses = addrman.GetAddr(max_addresses, max_pct, network);
|
||||
if (m_banman) {
|
||||
@ -3842,7 +3842,7 @@ void CConnman::AddPendingProbeConnections(const std::set<uint256> &proTxHashes)
|
||||
masternodePendingProbes.insert(proTxHashes.begin(), proTxHashes.end());
|
||||
}
|
||||
|
||||
size_t CConnman::GetNodeCount(ConnectionDirection flags)
|
||||
size_t CConnman::GetNodeCount(ConnectionDirection flags) const
|
||||
{
|
||||
LOCK(cs_vNodes);
|
||||
|
||||
@ -3869,7 +3869,7 @@ size_t CConnman::GetMaxOutboundNodeCount()
|
||||
return m_max_outbound;
|
||||
}
|
||||
|
||||
void CConnman::GetNodeStats(std::vector<CNodeStats>& vstats)
|
||||
void CConnman::GetNodeStats(std::vector<CNodeStats>& vstats) const
|
||||
{
|
||||
vstats.clear();
|
||||
LOCK(cs_vNodes);
|
||||
@ -4008,18 +4008,18 @@ void CConnman::RecordBytesSent(uint64_t bytes)
|
||||
nMaxOutboundTotalBytesSentInCycle += bytes;
|
||||
}
|
||||
|
||||
uint64_t CConnman::GetMaxOutboundTarget()
|
||||
uint64_t CConnman::GetMaxOutboundTarget() const
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
return nMaxOutboundLimit;
|
||||
}
|
||||
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeframe()
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeframe() const
|
||||
{
|
||||
return MAX_UPLOAD_TIMEFRAME;
|
||||
}
|
||||
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle()
|
||||
std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle() const
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@ -4033,7 +4033,7 @@ std::chrono::seconds CConnman::GetMaxOutboundTimeLeftInCycle()
|
||||
return (cycleEndTime < now) ? 0s : cycleEndTime - now;
|
||||
}
|
||||
|
||||
bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit)
|
||||
bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit) const
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@ -4053,7 +4053,7 @@ bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit)
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t CConnman::GetOutboundTargetBytesLeft()
|
||||
uint64_t CConnman::GetOutboundTargetBytesLeft() const
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@ -4062,13 +4062,13 @@ uint64_t CConnman::GetOutboundTargetBytesLeft()
|
||||
return (nMaxOutboundTotalBytesSentInCycle >= nMaxOutboundLimit) ? 0 : nMaxOutboundLimit - nMaxOutboundTotalBytesSentInCycle;
|
||||
}
|
||||
|
||||
uint64_t CConnman::GetTotalBytesRecv()
|
||||
uint64_t CConnman::GetTotalBytesRecv() const
|
||||
{
|
||||
LOCK(cs_totalBytesRecv);
|
||||
return nTotalBytesRecv;
|
||||
}
|
||||
|
||||
uint64_t CConnman::GetTotalBytesSent()
|
||||
uint64_t CConnman::GetTotalBytesSent() const
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
return nTotalBytesSent;
|
||||
|
34
src/net.h
34
src/net.h
@ -1128,7 +1128,7 @@ public:
|
||||
* @param[in] max_pct Maximum percentage of addresses to return (0 = all).
|
||||
* @param[in] network Select only addresses of this network (nullopt = all).
|
||||
*/
|
||||
std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network);
|
||||
std::vector<CAddress> GetAddresses(size_t max_addresses, size_t max_pct, std::optional<Network> network) const;
|
||||
|
||||
/**
|
||||
* Cache is used to minimize topology leaks, so it should
|
||||
@ -1141,7 +1141,7 @@ public:
|
||||
// This allows temporarily exceeding m_max_outbound_full_relay, with the goal of finding
|
||||
// a peer that is better than all our current peers.
|
||||
void SetTryNewOutboundPeer(bool flag);
|
||||
bool GetTryNewOutboundPeer();
|
||||
bool GetTryNewOutboundPeer() const;
|
||||
|
||||
void StartExtraBlockRelayPeers() {
|
||||
LogPrint(BCLog::NET, "net: enabling extra block-relay-only peers\n");
|
||||
@ -1154,13 +1154,13 @@ public:
|
||||
// return a value less than (num_outbound_connections - num_outbound_slots)
|
||||
// in cases where some outbound connections are not yet fully connected, or
|
||||
// not yet fully disconnected.
|
||||
int GetExtraFullOutboundCount();
|
||||
int GetExtraFullOutboundCount() const;
|
||||
// Count the number of block-relay-only peers we have over our limit.
|
||||
int GetExtraBlockRelayCount();
|
||||
int GetExtraBlockRelayCount() const;
|
||||
|
||||
bool AddNode(const std::string& node);
|
||||
bool RemoveAddedNode(const std::string& node);
|
||||
std::vector<AddedNodeInfo> GetAddedNodeInfo();
|
||||
std::vector<AddedNodeInfo> GetAddedNodeInfo() const;
|
||||
|
||||
/**
|
||||
* Attempts to open a connection. Currently only used from tests.
|
||||
@ -1187,9 +1187,9 @@ public:
|
||||
bool IsMasternodeQuorumRelayMember(const uint256& protxHash);
|
||||
void AddPendingProbeConnections(const std::set<uint256>& proTxHashes);
|
||||
|
||||
size_t GetNodeCount(ConnectionDirection);
|
||||
size_t GetNodeCount(ConnectionDirection) const;
|
||||
size_t GetMaxOutboundNodeCount();
|
||||
void GetNodeStats(std::vector<CNodeStats>& vstats);
|
||||
void GetNodeStats(std::vector<CNodeStats>& vstats) const;
|
||||
bool DisconnectNode(const std::string& node);
|
||||
bool DisconnectNode(const CSubNet& subnet);
|
||||
bool DisconnectNode(const CNetAddr& addr);
|
||||
@ -1203,24 +1203,24 @@ public:
|
||||
//! that peer during `net_processing.cpp:PushNodeVersion()`.
|
||||
ServiceFlags GetLocalServices() const;
|
||||
|
||||
uint64_t GetMaxOutboundTarget();
|
||||
std::chrono::seconds GetMaxOutboundTimeframe();
|
||||
uint64_t GetMaxOutboundTarget() const;
|
||||
std::chrono::seconds GetMaxOutboundTimeframe() const;
|
||||
|
||||
//! check if the outbound target is reached
|
||||
//! if param historicalBlockServingLimit is set true, the function will
|
||||
//! response true if the limit for serving historical blocks has been reached
|
||||
bool OutboundTargetReached(bool historicalBlockServingLimit);
|
||||
bool OutboundTargetReached(bool historicalBlockServingLimit) const;
|
||||
|
||||
//! response the bytes left in the current max outbound cycle
|
||||
//! in case of no limit, it will always response 0
|
||||
uint64_t GetOutboundTargetBytesLeft();
|
||||
uint64_t GetOutboundTargetBytesLeft() const;
|
||||
|
||||
//! returns the time left in the current max outbound cycle
|
||||
//! in case of no limit, it will always return 0
|
||||
std::chrono::seconds GetMaxOutboundTimeLeftInCycle();
|
||||
std::chrono::seconds GetMaxOutboundTimeLeftInCycle() const;
|
||||
|
||||
uint64_t GetTotalBytesRecv();
|
||||
uint64_t GetTotalBytesSent();
|
||||
uint64_t GetTotalBytesRecv() const;
|
||||
uint64_t GetTotalBytesSent() const;
|
||||
|
||||
/** Get a unique deterministic randomizer. */
|
||||
CSipHasher GetDeterministicRandomizer(uint64_t id) const;
|
||||
@ -1344,8 +1344,8 @@ private:
|
||||
void UnregisterEvents(CNode* pnode);
|
||||
|
||||
// Network usage totals
|
||||
RecursiveMutex cs_totalBytesRecv;
|
||||
RecursiveMutex cs_totalBytesSent;
|
||||
mutable RecursiveMutex cs_totalBytesRecv;
|
||||
mutable RecursiveMutex cs_totalBytesSent;
|
||||
uint64_t nTotalBytesRecv GUARDED_BY(cs_totalBytesRecv) {0};
|
||||
uint64_t nTotalBytesSent GUARDED_BY(cs_totalBytesSent) {0};
|
||||
|
||||
@ -1371,7 +1371,7 @@ private:
|
||||
std::deque<std::string> m_addr_fetches GUARDED_BY(m_addr_fetches_mutex);
|
||||
RecursiveMutex m_addr_fetches_mutex;
|
||||
std::vector<std::string> vAddedNodes GUARDED_BY(cs_vAddedNodes);
|
||||
RecursiveMutex cs_vAddedNodes;
|
||||
mutable RecursiveMutex cs_vAddedNodes;
|
||||
std::vector<uint256> vPendingMasternodes;
|
||||
mutable RecursiveMutex cs_vPendingMasternodes;
|
||||
std::map<std::pair<Consensus::LLMQType, uint256>, std::set<uint256>> masternodeQuorumNodes GUARDED_BY(cs_vPendingMasternodes);
|
||||
|
@ -355,7 +355,7 @@ public:
|
||||
|
||||
/** Implement PeerManager */
|
||||
void CheckForStaleTipAndEvictPeers() override;
|
||||
bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) override;
|
||||
bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const override;
|
||||
bool IgnoresIncomingTxs() override { return m_ignore_incoming_txs; }
|
||||
void SendPings() override;
|
||||
void RelayTransaction(const uint256& txid) override;
|
||||
@ -1440,7 +1440,7 @@ PeerRef PeerManagerImpl::RemovePeer(NodeId id)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats)
|
||||
bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const
|
||||
{
|
||||
{
|
||||
LOCK(cs_main);
|
||||
|
@ -63,7 +63,7 @@ public:
|
||||
virtual ~PeerManager() { }
|
||||
|
||||
/** Get statistics from node state */
|
||||
virtual bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) = 0;
|
||||
virtual bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const = 0;
|
||||
|
||||
/** Whether this node ignores txs received over p2p. */
|
||||
virtual bool IgnoresIncomingTxs() = 0;
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <pow.h>
|
||||
#include <rpc/blockchain.h>
|
||||
#include <rpc/mining.h>
|
||||
#include <rpc/net.h>
|
||||
#include <rpc/server.h>
|
||||
#include <rpc/util.h>
|
||||
#include <script/descriptor.h>
|
||||
@ -731,10 +732,8 @@ static RPCHelpMan getblocktemplate()
|
||||
if (strMode != "template")
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode");
|
||||
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
|
||||
if (node.connman->GetNodeCount(ConnectionDirection::Both) == 0)
|
||||
const CConnman& connman = EnsureConnman(node);
|
||||
if (connman.GetNodeCount(ConnectionDirection::Both) == 0)
|
||||
throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, PACKAGE_NAME " is not connected!");
|
||||
|
||||
if (active_chainstate.IsInitialBlockDownload())
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <net.h>
|
||||
#include <node/context.h>
|
||||
#include <rpc/blockchain.h>
|
||||
#include <rpc/net.h>
|
||||
#include <rpc/server.h>
|
||||
#include <rpc/util.h>
|
||||
#include <scheduler.h>
|
||||
@ -213,15 +214,13 @@ static RPCHelpMan sporkupdate()
|
||||
}
|
||||
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if (!node.connman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
// SPORK VALUE
|
||||
int64_t nValue = request.params[1].get_int64();
|
||||
|
||||
// broadcast new spork
|
||||
if (node.sporkman->UpdateSpork(nSporkID, nValue, *node.connman)) {
|
||||
if (node.sporkman->UpdateSpork(nSporkID, nValue, connman)) {
|
||||
return "success";
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,22 @@ const std::vector<std::string> CONNECTION_TYPE_DOC{
|
||||
"feeler (short-lived automatic connection for testing addresses)"
|
||||
};
|
||||
|
||||
CConnman& EnsureConnman(const NodeContext& node)
|
||||
{
|
||||
if (!node.connman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
return *node.connman;
|
||||
}
|
||||
|
||||
PeerManager& EnsurePeerman(const NodeContext& node)
|
||||
{
|
||||
if (!node.peerman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
return *node.peerman;
|
||||
}
|
||||
|
||||
static RPCHelpMan getconnectioncount()
|
||||
{
|
||||
return RPCHelpMan{"getconnectioncount",
|
||||
@ -55,10 +71,9 @@ static RPCHelpMan getconnectioncount()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
const CConnman& connman = EnsureConnman(node);
|
||||
|
||||
return (int)node.connman->GetNodeCount(ConnectionDirection::Both);
|
||||
return (int)connman.GetNodeCount(ConnectionDirection::Both);
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -78,12 +93,10 @@ static RPCHelpMan ping()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if (!node.peerman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
PeerManager& peerman = EnsurePeerman(node);
|
||||
|
||||
// Request that each node send a ping during next message processing pass
|
||||
node.peerman->SendPings();
|
||||
peerman.SendPings();
|
||||
return NullUniValue;
|
||||
},
|
||||
};
|
||||
@ -174,19 +187,18 @@ static RPCHelpMan getpeerinfo()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman || !node.peerman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
const CConnman& connman = EnsureConnman(node);
|
||||
const PeerManager& peerman = EnsurePeerman(node);
|
||||
|
||||
std::vector<CNodeStats> vstats;
|
||||
node.connman->GetNodeStats(vstats);
|
||||
connman.GetNodeStats(vstats);
|
||||
|
||||
UniValue ret(UniValue::VARR);
|
||||
|
||||
for (const CNodeStats& stats : vstats) {
|
||||
UniValue obj(UniValue::VOBJ);
|
||||
CNodeStateStats statestats;
|
||||
bool fStateStats = node.peerman->GetNodeStateStats(stats.nodeid, statestats);
|
||||
bool fStateStats = peerman.GetNodeStateStats(stats.nodeid, statestats);
|
||||
obj.pushKV("id", stats.nodeid);
|
||||
obj.pushKV("addr", stats.addrName);
|
||||
if (stats.addrBind.IsValid()) {
|
||||
@ -303,27 +315,28 @@ static RPCHelpMan addnode()
|
||||
strCommand = request.params[1].get_str();
|
||||
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
std::string strNode = request.params[0].get_str();
|
||||
|
||||
if (strCommand == "onetry")
|
||||
{
|
||||
CAddress addr;
|
||||
node.connman->OpenNetworkConnection(addr, false, nullptr, strNode.c_str(), ConnectionType::MANUAL);
|
||||
connman.OpenNetworkConnection(addr, false, nullptr, strNode.c_str(), ConnectionType::MANUAL);
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (strCommand == "add")
|
||||
{
|
||||
if(!node.connman->AddNode(strNode))
|
||||
if (!connman.AddNode(strNode)) {
|
||||
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Node already added");
|
||||
}
|
||||
}
|
||||
else if(strCommand == "remove")
|
||||
{
|
||||
if(!node.connman->RemoveAddedNode(strNode))
|
||||
if (!connman.RemoveAddedNode(strNode)) {
|
||||
throw JSONRPCError(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node could not be removed. It has not been added previously.");
|
||||
}
|
||||
}
|
||||
|
||||
return NullUniValue;
|
||||
@ -368,11 +381,9 @@ static RPCHelpMan addconnection()
|
||||
}
|
||||
|
||||
NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if (!node.connman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled.");
|
||||
}
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
const bool success = node.connman->AddConnection(address, conn_type);
|
||||
const bool success = connman.AddConnection(address, conn_type);
|
||||
if (!success) {
|
||||
throw JSONRPCError(RPC_CLIENT_NODE_CAPACITY_REACHED, "Error: Already at capacity for specified connection type.");
|
||||
}
|
||||
@ -407,8 +418,7 @@ static RPCHelpMan disconnectnode()
|
||||
{
|
||||
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
bool success;
|
||||
const UniValue &address_arg = request.params[0];
|
||||
@ -416,11 +426,11 @@ static RPCHelpMan disconnectnode()
|
||||
|
||||
if (!address_arg.isNull() && id_arg.isNull()) {
|
||||
/* handle disconnect-by-address */
|
||||
success = node.connman->DisconnectNode(address_arg.get_str());
|
||||
success = connman.DisconnectNode(address_arg.get_str());
|
||||
} else if (!id_arg.isNull() && (address_arg.isNull() || (address_arg.isStr() && address_arg.get_str().empty()))) {
|
||||
/* handle disconnect-by-id */
|
||||
NodeId nodeid = (NodeId) id_arg.get_int64();
|
||||
success = node.connman->DisconnectNode(nodeid);
|
||||
success = connman.DisconnectNode(nodeid);
|
||||
} else {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMS, "Only one of address and nodeid should be provided.");
|
||||
}
|
||||
@ -468,10 +478,9 @@ static RPCHelpMan getaddednodeinfo()
|
||||
{
|
||||
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
const CConnman& connman = EnsureConnman(node);;
|
||||
|
||||
std::vector<AddedNodeInfo> vInfo = node.connman->GetAddedNodeInfo();
|
||||
std::vector<AddedNodeInfo> vInfo = connman.GetAddedNodeInfo();
|
||||
|
||||
if (!request.params[0].isNull()) {
|
||||
bool found = false;
|
||||
@ -539,21 +548,20 @@ static RPCHelpMan getnettotals()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if(!node.connman)
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
const CConnman& connman = EnsureConnman(node);
|
||||
|
||||
UniValue obj(UniValue::VOBJ);
|
||||
obj.pushKV("totalbytesrecv", node.connman->GetTotalBytesRecv());
|
||||
obj.pushKV("totalbytessent", node.connman->GetTotalBytesSent());
|
||||
obj.pushKV("totalbytesrecv", connman.GetTotalBytesRecv());
|
||||
obj.pushKV("totalbytessent", connman.GetTotalBytesSent());
|
||||
obj.pushKV("timemillis", GetTimeMillis());
|
||||
|
||||
UniValue outboundLimit(UniValue::VOBJ);
|
||||
outboundLimit.pushKV("timeframe", count_seconds(node.connman->GetMaxOutboundTimeframe()));
|
||||
outboundLimit.pushKV("target", node.connman->GetMaxOutboundTarget());
|
||||
outboundLimit.pushKV("target_reached", node.connman->OutboundTargetReached(false));
|
||||
outboundLimit.pushKV("serve_historical_blocks", !node.connman->OutboundTargetReached(true));
|
||||
outboundLimit.pushKV("bytes_left_in_cycle", node.connman->GetOutboundTargetBytesLeft());
|
||||
outboundLimit.pushKV("time_left_in_cycle", count_seconds(node.connman->GetMaxOutboundTimeLeftInCycle()));
|
||||
outboundLimit.pushKV("timeframe", count_seconds(connman.GetMaxOutboundTimeframe()));
|
||||
outboundLimit.pushKV("target", connman.GetMaxOutboundTarget());
|
||||
outboundLimit.pushKV("target_reached", connman.OutboundTargetReached(false));
|
||||
outboundLimit.pushKV("serve_historical_blocks", !connman.OutboundTargetReached(true));
|
||||
outboundLimit.pushKV("bytes_left_in_cycle", connman.GetOutboundTargetBytesLeft());
|
||||
outboundLimit.pushKV("time_left_in_cycle", count_seconds(connman.GetMaxOutboundTimeLeftInCycle()));
|
||||
obj.pushKV("uploadtarget", outboundLimit);
|
||||
return obj;
|
||||
},
|
||||
@ -898,13 +906,11 @@ static RPCHelpMan setnetworkactive()
|
||||
{
|
||||
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if (!node.connman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
node.connman->SetNetworkActive(request.params[0].get_bool(), node.mn_sync.get());
|
||||
connman.SetNetworkActive(request.params[0].get_bool(), node.mn_sync.get());
|
||||
|
||||
return node.connman->GetNetworkActive();
|
||||
return connman.GetNetworkActive();
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -940,9 +946,7 @@ static RPCHelpMan getnodeaddresses()
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
if (!node.connman) {
|
||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||
}
|
||||
const CConnman& connman = EnsureConnman(node);
|
||||
|
||||
const int count{request.params[0].isNull() ? 1 : request.params[0].get_int()};
|
||||
if (count < 0) throw JSONRPCError(RPC_INVALID_PARAMETER, "Address count out of range");
|
||||
@ -953,7 +957,7 @@ static RPCHelpMan getnodeaddresses()
|
||||
}
|
||||
|
||||
// returns a shuffled list of CAddress
|
||||
const std::vector<CAddress> vAddr{node.connman->GetAddresses(count, /* max_pct */ 0, network)};
|
||||
const std::vector<CAddress> vAddr{connman.GetAddresses(count, /* max_pct */ 0, network)};
|
||||
UniValue ret(UniValue::VARR);
|
||||
|
||||
for (const CAddress& addr : vAddr) {
|
||||
|
15
src/rpc/net.h
Normal file
15
src/rpc/net.h
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright (c) 2021 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_RPC_NET_H
|
||||
#define BITCOIN_RPC_NET_H
|
||||
|
||||
class CConnman;
|
||||
class PeerManager;
|
||||
struct NodeContext;
|
||||
|
||||
CConnman& EnsureConnman(const NodeContext& node);
|
||||
PeerManager& EnsurePeerman(const NodeContext& node);
|
||||
|
||||
#endif // BITCOIN_RPC_NET_H
|
Loading…
Reference in New Issue
Block a user