mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-25 22:14:15 +00:00
Merge pull request #1531 from jgarzik/peerinfo
RPC: add 'getpeerinfo', returning easy-to-retrieve per-CNode data
This commit is contained in:
commit
3a906d45dc
@ -206,6 +206,7 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
|
|||||||
src/qt/walletmodel.cpp \
|
src/qt/walletmodel.cpp \
|
||||||
src/bitcoinrpc.cpp \
|
src/bitcoinrpc.cpp \
|
||||||
src/rpcdump.cpp \
|
src/rpcdump.cpp \
|
||||||
|
src/rpcnet.cpp \
|
||||||
src/qt/overviewpage.cpp \
|
src/qt/overviewpage.cpp \
|
||||||
src/qt/csvmodelwriter.cpp \
|
src/qt/csvmodelwriter.cpp \
|
||||||
src/crypter.cpp \
|
src/crypter.cpp \
|
||||||
|
@ -46,6 +46,8 @@ static std::string strRPCUserColonPass;
|
|||||||
static int64 nWalletUnlockTime;
|
static int64 nWalletUnlockTime;
|
||||||
static CCriticalSection cs_nWalletUnlockTime;
|
static CCriticalSection cs_nWalletUnlockTime;
|
||||||
|
|
||||||
|
extern Value getconnectioncount(const Array& params, bool fHelp);
|
||||||
|
extern Value getpeerinfo(const Array& params, bool fHelp);
|
||||||
extern Value dumpprivkey(const Array& params, bool fHelp);
|
extern Value dumpprivkey(const Array& params, bool fHelp);
|
||||||
extern Value importprivkey(const Array& params, bool fHelp);
|
extern Value importprivkey(const Array& params, bool fHelp);
|
||||||
|
|
||||||
@ -456,17 +458,6 @@ Value getblockcount(const Array& params, bool fHelp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Value getconnectioncount(const Array& params, bool fHelp)
|
|
||||||
{
|
|
||||||
if (fHelp || params.size() != 0)
|
|
||||||
throw runtime_error(
|
|
||||||
"getconnectioncount\n"
|
|
||||||
"Returns the number of connections to other nodes.");
|
|
||||||
|
|
||||||
return (int)vNodes.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Value getdifficulty(const Array& params, bool fHelp)
|
Value getdifficulty(const Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() != 0)
|
if (fHelp || params.size() != 0)
|
||||||
@ -2310,6 +2301,7 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "stop", &stop, true },
|
{ "stop", &stop, true },
|
||||||
{ "getblockcount", &getblockcount, true },
|
{ "getblockcount", &getblockcount, true },
|
||||||
{ "getconnectioncount", &getconnectioncount, true },
|
{ "getconnectioncount", &getconnectioncount, true },
|
||||||
|
{ "getpeerinfo", &getpeerinfo, true },
|
||||||
{ "getdifficulty", &getdifficulty, true },
|
{ "getdifficulty", &getdifficulty, true },
|
||||||
{ "getgenerate", &getgenerate, true },
|
{ "getgenerate", &getgenerate, true },
|
||||||
{ "setgenerate", &setgenerate, true },
|
{ "setgenerate", &setgenerate, true },
|
||||||
|
@ -60,6 +60,7 @@ OBJS= \
|
|||||||
obj/protocol.o \
|
obj/protocol.o \
|
||||||
obj/bitcoinrpc.o \
|
obj/bitcoinrpc.o \
|
||||||
obj/rpcdump.o \
|
obj/rpcdump.o \
|
||||||
|
obj/rpcnet.o \
|
||||||
obj/script.o \
|
obj/script.o \
|
||||||
obj/sync.o \
|
obj/sync.o \
|
||||||
obj/util.o \
|
obj/util.o \
|
||||||
|
@ -57,6 +57,7 @@ OBJS= \
|
|||||||
obj/protocol.o \
|
obj/protocol.o \
|
||||||
obj/bitcoinrpc.o \
|
obj/bitcoinrpc.o \
|
||||||
obj/rpcdump.o \
|
obj/rpcdump.o \
|
||||||
|
obj/rpcnet.o \
|
||||||
obj/script.o \
|
obj/script.o \
|
||||||
obj/sync.o \
|
obj/sync.o \
|
||||||
obj/util.o \
|
obj/util.o \
|
||||||
|
@ -84,6 +84,7 @@ OBJS= \
|
|||||||
obj/protocol.o \
|
obj/protocol.o \
|
||||||
obj/bitcoinrpc.o \
|
obj/bitcoinrpc.o \
|
||||||
obj/rpcdump.o \
|
obj/rpcdump.o \
|
||||||
|
obj/rpcnet.o \
|
||||||
obj/script.o \
|
obj/script.o \
|
||||||
obj/sync.o \
|
obj/sync.o \
|
||||||
obj/util.o \
|
obj/util.o \
|
||||||
|
@ -104,6 +104,7 @@ OBJS= \
|
|||||||
obj/protocol.o \
|
obj/protocol.o \
|
||||||
obj/bitcoinrpc.o \
|
obj/bitcoinrpc.o \
|
||||||
obj/rpcdump.o \
|
obj/rpcdump.o \
|
||||||
|
obj/rpcnet.o \
|
||||||
obj/script.o \
|
obj/script.o \
|
||||||
obj/sync.o \
|
obj/sync.o \
|
||||||
obj/util.o \
|
obj/util.o \
|
||||||
|
18
src/net.cpp
18
src/net.cpp
@ -606,7 +606,23 @@ bool CNode::Misbehaving(int howmuch)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef X
|
||||||
|
#define X(name) stats.name = name
|
||||||
|
void CNode::copyStats(CNodeStats &stats)
|
||||||
|
{
|
||||||
|
X(nServices);
|
||||||
|
X(nLastSend);
|
||||||
|
X(nLastRecv);
|
||||||
|
X(nTimeConnected);
|
||||||
|
X(addrName);
|
||||||
|
X(nVersion);
|
||||||
|
X(strSubVer);
|
||||||
|
X(fInbound);
|
||||||
|
X(nReleaseTime);
|
||||||
|
X(nStartingHeight);
|
||||||
|
X(nMisbehavior);
|
||||||
|
}
|
||||||
|
#undef X
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
19
src/net.h
19
src/net.h
@ -128,6 +128,24 @@ extern std::map<CInv, int64> mapAlreadyAskedFor;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CNodeStats
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
uint64 nServices;
|
||||||
|
int64 nLastSend;
|
||||||
|
int64 nLastRecv;
|
||||||
|
int64 nTimeConnected;
|
||||||
|
std::string addrName;
|
||||||
|
int nVersion;
|
||||||
|
std::string strSubVer;
|
||||||
|
bool fInbound;
|
||||||
|
int64 nReleaseTime;
|
||||||
|
int nStartingHeight;
|
||||||
|
int nMisbehavior;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Information about a peer */
|
/** Information about a peer */
|
||||||
@ -617,6 +635,7 @@ public:
|
|||||||
static void ClearBanned(); // needed for unit testing
|
static void ClearBanned(); // needed for unit testing
|
||||||
static bool IsBanned(CNetAddr ip);
|
static bool IsBanned(CNetAddr ip);
|
||||||
bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot
|
bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot
|
||||||
|
void copyStats(CNodeStats &stats);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
67
src/rpcnet.cpp
Normal file
67
src/rpcnet.cpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// Copyright (c) 2009-2012 Bitcoin Developers
|
||||||
|
// Distributed under the MIT/X11 software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include "net.h"
|
||||||
|
#include "bitcoinrpc.h"
|
||||||
|
|
||||||
|
using namespace json_spirit;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
Value getconnectioncount(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 0)
|
||||||
|
throw runtime_error(
|
||||||
|
"getconnectioncount\n"
|
||||||
|
"Returns the number of connections to other nodes.");
|
||||||
|
|
||||||
|
LOCK(cs_vNodes);
|
||||||
|
return (int)vNodes.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CopyNodeStats(std::vector<CNodeStats>& vstats)
|
||||||
|
{
|
||||||
|
vstats.clear();
|
||||||
|
|
||||||
|
LOCK(cs_vNodes);
|
||||||
|
vstats.reserve(vNodes.size());
|
||||||
|
BOOST_FOREACH(CNode* pnode, vNodes) {
|
||||||
|
CNodeStats stats;
|
||||||
|
pnode->copyStats(stats);
|
||||||
|
vstats.push_back(stats);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Value getpeerinfo(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 0)
|
||||||
|
throw runtime_error(
|
||||||
|
"getpeerinfo\n"
|
||||||
|
"Returns data about each connected network node.");
|
||||||
|
|
||||||
|
vector<CNodeStats> vstats;
|
||||||
|
CopyNodeStats(vstats);
|
||||||
|
|
||||||
|
Array ret;
|
||||||
|
|
||||||
|
BOOST_FOREACH(const CNodeStats& stats, vstats) {
|
||||||
|
Object obj;
|
||||||
|
|
||||||
|
obj.push_back(Pair("addr", stats.addrName));
|
||||||
|
obj.push_back(Pair("services", strprintf("%08"PRI64x, stats.nServices)));
|
||||||
|
obj.push_back(Pair("lastsend", (boost::int64_t)stats.nLastSend));
|
||||||
|
obj.push_back(Pair("lastrecv", (boost::int64_t)stats.nLastRecv));
|
||||||
|
obj.push_back(Pair("conntime", (boost::int64_t)stats.nTimeConnected));
|
||||||
|
obj.push_back(Pair("version", stats.nVersion));
|
||||||
|
obj.push_back(Pair("subver", stats.strSubVer));
|
||||||
|
obj.push_back(Pair("inbound", stats.fInbound));
|
||||||
|
obj.push_back(Pair("releasetime", (boost::int64_t)stats.nReleaseTime));
|
||||||
|
obj.push_back(Pair("height", stats.nStartingHeight));
|
||||||
|
obj.push_back(Pair("banscore", stats.nMisbehavior));
|
||||||
|
|
||||||
|
ret.push_back(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user