|
|
|
@ -39,10 +39,10 @@ static UniValue getconnectioncount(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
return (int)g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL);
|
|
|
|
|
return (int)g_rpc_node->connman->GetNodeCount(CConnman::CONNECTIONS_ALL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static UniValue ping(const JSONRPCRequest& request)
|
|
|
|
@ -59,11 +59,11 @@ static UniValue ping(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
// Request that each node send a ping during next message processing pass
|
|
|
|
|
g_connman->ForEachNode([](CNode* pnode) {
|
|
|
|
|
g_rpc_node->connman->ForEachNode([](CNode* pnode) {
|
|
|
|
|
pnode->fPingQueued = true;
|
|
|
|
|
});
|
|
|
|
|
return NullUniValue;
|
|
|
|
@ -132,11 +132,11 @@ static UniValue getpeerinfo(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
std::vector<CNodeStats> vstats;
|
|
|
|
|
g_connman->GetNodeStats(vstats);
|
|
|
|
|
g_rpc_node->connman->GetNodeStats(vstats);
|
|
|
|
|
|
|
|
|
|
UniValue ret(UniValue::VARR);
|
|
|
|
|
|
|
|
|
@ -235,7 +235,7 @@ static UniValue addnode(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.ToString());
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
std::string strNode = request.params[0].get_str();
|
|
|
|
@ -243,18 +243,18 @@ static UniValue addnode(const JSONRPCRequest& request)
|
|
|
|
|
if (strCommand == "onetry")
|
|
|
|
|
{
|
|
|
|
|
CAddress addr;
|
|
|
|
|
g_connman->OpenNetworkConnection(addr, false, nullptr, strNode.c_str(), false, false, true);
|
|
|
|
|
g_rpc_node->connman->OpenNetworkConnection(addr, false, nullptr, strNode.c_str(), false, false, true);
|
|
|
|
|
return NullUniValue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strCommand == "add")
|
|
|
|
|
{
|
|
|
|
|
if(!g_connman->AddNode(strNode))
|
|
|
|
|
if(!g_rpc_node->connman->AddNode(strNode))
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Node already added");
|
|
|
|
|
}
|
|
|
|
|
else if(strCommand == "remove")
|
|
|
|
|
{
|
|
|
|
|
if(!g_connman->RemoveAddedNode(strNode))
|
|
|
|
|
if(!g_rpc_node->connman->RemoveAddedNode(strNode))
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node has not been added.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -280,7 +280,7 @@ static UniValue disconnectnode(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
bool success;
|
|
|
|
@ -289,11 +289,11 @@ static UniValue disconnectnode(const JSONRPCRequest& request)
|
|
|
|
|
|
|
|
|
|
if (!address_arg.isNull() && id_arg.isNull()) {
|
|
|
|
|
/* handle disconnect-by-address */
|
|
|
|
|
success = g_connman->DisconnectNode(address_arg.get_str());
|
|
|
|
|
success = g_rpc_node->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 = g_connman->DisconnectNode(nodeid);
|
|
|
|
|
success = g_rpc_node->connman->DisconnectNode(nodeid);
|
|
|
|
|
} else {
|
|
|
|
|
throw JSONRPCError(RPC_INVALID_PARAMS, "Only one of address and nodeid should be provided.");
|
|
|
|
|
}
|
|
|
|
@ -334,10 +334,10 @@ static UniValue getaddednodeinfo(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
std::vector<AddedNodeInfo> vInfo = g_connman->GetAddedNodeInfo();
|
|
|
|
|
std::vector<AddedNodeInfo> vInfo = g_rpc_node->connman->GetAddedNodeInfo();
|
|
|
|
|
|
|
|
|
|
if (!request.params[0].isNull()) {
|
|
|
|
|
bool found = false;
|
|
|
|
@ -400,21 +400,21 @@ static UniValue getnettotals(const JSONRPCRequest& request)
|
|
|
|
|
+ HelpExampleRpc("getnettotals", "")
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
if(!g_connman)
|
|
|
|
|
if(!g_rpc_node->connman)
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
|
|
|
|
|
UniValue obj(UniValue::VOBJ);
|
|
|
|
|
obj.pushKV("totalbytesrecv", g_connman->GetTotalBytesRecv());
|
|
|
|
|
obj.pushKV("totalbytessent", g_connman->GetTotalBytesSent());
|
|
|
|
|
obj.pushKV("totalbytesrecv", g_rpc_node->connman->GetTotalBytesRecv());
|
|
|
|
|
obj.pushKV("totalbytessent", g_rpc_node->connman->GetTotalBytesSent());
|
|
|
|
|
obj.pushKV("timemillis", GetTimeMillis());
|
|
|
|
|
|
|
|
|
|
UniValue outboundLimit(UniValue::VOBJ);
|
|
|
|
|
outboundLimit.pushKV("timeframe", g_connman->GetMaxOutboundTimeframe());
|
|
|
|
|
outboundLimit.pushKV("target", g_connman->GetMaxOutboundTarget());
|
|
|
|
|
outboundLimit.pushKV("target_reached", g_connman->OutboundTargetReached(false));
|
|
|
|
|
outboundLimit.pushKV("serve_historical_blocks", !g_connman->OutboundTargetReached(true));
|
|
|
|
|
outboundLimit.pushKV("bytes_left_in_cycle", g_connman->GetOutboundTargetBytesLeft());
|
|
|
|
|
outboundLimit.pushKV("time_left_in_cycle", g_connman->GetMaxOutboundTimeLeftInCycle());
|
|
|
|
|
outboundLimit.pushKV("timeframe", g_rpc_node->connman->GetMaxOutboundTimeframe());
|
|
|
|
|
outboundLimit.pushKV("target", g_rpc_node->connman->GetMaxOutboundTarget());
|
|
|
|
|
outboundLimit.pushKV("target_reached", g_rpc_node->connman->OutboundTargetReached(false));
|
|
|
|
|
outboundLimit.pushKV("serve_historical_blocks", !g_rpc_node->connman->OutboundTargetReached(true));
|
|
|
|
|
outboundLimit.pushKV("bytes_left_in_cycle", g_rpc_node->connman->GetOutboundTargetBytesLeft());
|
|
|
|
|
outboundLimit.pushKV("time_left_in_cycle", g_rpc_node->connman->GetMaxOutboundTimeLeftInCycle());
|
|
|
|
|
obj.pushKV("uploadtarget", outboundLimit);
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
@ -493,16 +493,16 @@ static UniValue getnetworkinfo(const JSONRPCRequest& request)
|
|
|
|
|
obj.pushKV("version", CLIENT_VERSION);
|
|
|
|
|
obj.pushKV("subversion", strSubVersion);
|
|
|
|
|
obj.pushKV("protocolversion",PROTOCOL_VERSION);
|
|
|
|
|
if (g_connman) {
|
|
|
|
|
ServiceFlags services = g_connman->GetLocalServices();
|
|
|
|
|
if (g_rpc_node->connman) {
|
|
|
|
|
ServiceFlags services = g_rpc_node->connman->GetLocalServices();
|
|
|
|
|
obj.pushKV("localservices", strprintf("%016x", services));
|
|
|
|
|
obj.pushKV("localservicesnames", GetServicesNames(services));
|
|
|
|
|
}
|
|
|
|
|
obj.pushKV("localrelay", g_relay_txes);
|
|
|
|
|
obj.pushKV("timeoffset", GetTimeOffset());
|
|
|
|
|
if (g_connman) {
|
|
|
|
|
obj.pushKV("networkactive", g_connman->GetNetworkActive());
|
|
|
|
|
obj.pushKV("connections", (int)g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL));
|
|
|
|
|
if (g_rpc_node->connman) {
|
|
|
|
|
obj.pushKV("networkactive", g_rpc_node->connman->GetNetworkActive());
|
|
|
|
|
obj.pushKV("connections", (int)g_rpc_node->connman->GetNodeCount(CConnman::CONNECTIONS_ALL));
|
|
|
|
|
}
|
|
|
|
|
obj.pushKV("networks", GetNetworksInfo());
|
|
|
|
|
obj.pushKV("relayfee", ValueFromAmount(::minRelayTxFee.GetFeePerK()));
|
|
|
|
@ -547,7 +547,7 @@ static UniValue setban(const JSONRPCRequest& request)
|
|
|
|
|
if (request.fHelp || !help.IsValidNumArgs(request.params.size()) || (strCommand != "add" && strCommand != "remove")) {
|
|
|
|
|
throw std::runtime_error(help.ToString());
|
|
|
|
|
}
|
|
|
|
|
if (!g_banman) {
|
|
|
|
|
if (!g_rpc_node->banman) {
|
|
|
|
|
throw JSONRPCError(RPC_DATABASE_ERROR, "Error: Ban database not loaded");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -571,7 +571,7 @@ static UniValue setban(const JSONRPCRequest& request)
|
|
|
|
|
|
|
|
|
|
if (strCommand == "add")
|
|
|
|
|
{
|
|
|
|
|
if (isSubnet ? g_banman->IsBanned(subNet) : g_banman->IsBanned(netAddr)) {
|
|
|
|
|
if (isSubnet ? g_rpc_node->banman->IsBanned(subNet) : g_rpc_node->banman->IsBanned(netAddr)) {
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: IP/Subnet already banned");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -584,20 +584,20 @@ static UniValue setban(const JSONRPCRequest& request)
|
|
|
|
|
absolute = true;
|
|
|
|
|
|
|
|
|
|
if (isSubnet) {
|
|
|
|
|
g_banman->Ban(subNet, BanReasonManuallyAdded, banTime, absolute);
|
|
|
|
|
if (g_connman) {
|
|
|
|
|
g_connman->DisconnectNode(subNet);
|
|
|
|
|
g_rpc_node->banman->Ban(subNet, BanReasonManuallyAdded, banTime, absolute);
|
|
|
|
|
if (g_rpc_node->connman) {
|
|
|
|
|
g_rpc_node->connman->DisconnectNode(subNet);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
g_banman->Ban(netAddr, BanReasonManuallyAdded, banTime, absolute);
|
|
|
|
|
if (g_connman) {
|
|
|
|
|
g_connman->DisconnectNode(netAddr);
|
|
|
|
|
g_rpc_node->banman->Ban(netAddr, BanReasonManuallyAdded, banTime, absolute);
|
|
|
|
|
if (g_rpc_node->connman) {
|
|
|
|
|
g_rpc_node->connman->DisconnectNode(netAddr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(strCommand == "remove")
|
|
|
|
|
{
|
|
|
|
|
if (!( isSubnet ? g_banman->Unban(subNet) : g_banman->Unban(netAddr) )) {
|
|
|
|
|
if (!( isSubnet ? g_rpc_node->banman->Unban(subNet) : g_rpc_node->banman->Unban(netAddr) )) {
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_INVALID_IP_OR_SUBNET, "Error: Unban failed. Requested address/subnet was not previously banned.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -616,12 +616,12 @@ static UniValue listbanned(const JSONRPCRequest& request)
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if(!g_banman) {
|
|
|
|
|
if(!g_rpc_node->banman) {
|
|
|
|
|
throw JSONRPCError(RPC_DATABASE_ERROR, "Error: Ban database not loaded");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
banmap_t banMap;
|
|
|
|
|
g_banman->GetBanned(banMap);
|
|
|
|
|
g_rpc_node->banman->GetBanned(banMap);
|
|
|
|
|
|
|
|
|
|
UniValue bannedAddresses(UniValue::VARR);
|
|
|
|
|
for (const auto& entry : banMap)
|
|
|
|
@ -650,11 +650,11 @@ static UniValue clearbanned(const JSONRPCRequest& request)
|
|
|
|
|
+ HelpExampleRpc("clearbanned", "")
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
if (!g_banman) {
|
|
|
|
|
if (!g_rpc_node->banman) {
|
|
|
|
|
throw JSONRPCError(RPC_DATABASE_ERROR, "Error: Ban database not loaded");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_banman->ClearBanned();
|
|
|
|
|
g_rpc_node->banman->ClearBanned();
|
|
|
|
|
|
|
|
|
|
return NullUniValue;
|
|
|
|
|
}
|
|
|
|
@ -670,13 +670,13 @@ static UniValue setnetworkactive(const JSONRPCRequest& request)
|
|
|
|
|
RPCExamples{""},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
|
|
|
|
|
if (!g_connman) {
|
|
|
|
|
if (!g_rpc_node->connman) {
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_connman->SetNetworkActive(request.params[0].get_bool());
|
|
|
|
|
g_rpc_node->connman->SetNetworkActive(request.params[0].get_bool());
|
|
|
|
|
|
|
|
|
|
return g_connman->GetNetworkActive();
|
|
|
|
|
return g_rpc_node->connman->GetNetworkActive();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static UniValue getnodeaddresses(const JSONRPCRequest& request)
|
|
|
|
@ -702,7 +702,7 @@ static UniValue getnodeaddresses(const JSONRPCRequest& request)
|
|
|
|
|
+ HelpExampleRpc("getnodeaddresses", "8")
|
|
|
|
|
},
|
|
|
|
|
}.Check(request);
|
|
|
|
|
if (!g_connman) {
|
|
|
|
|
if (!g_rpc_node->connman) {
|
|
|
|
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -714,7 +714,7 @@ static UniValue getnodeaddresses(const JSONRPCRequest& request)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// returns a shuffled list of CAddress
|
|
|
|
|
std::vector<CAddress> vAddr = g_connman->GetAddresses();
|
|
|
|
|
std::vector<CAddress> vAddr = g_rpc_node->connman->GetAddresses();
|
|
|
|
|
UniValue ret(UniValue::VARR);
|
|
|
|
|
|
|
|
|
|
int address_return_count = std::min<int>(count, vAddr.size());
|
|
|
|
|