From 70ab73a0087cbb0d6b26c9ad58146ae542b1b9be Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Thu, 28 Jun 2012 23:18:38 -0400 Subject: Create new rpcnet module, and move 'getconnectioncount' RPC to it --- src/rpcnet.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/rpcnet.cpp (limited to 'src/rpcnet.cpp') diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp new file mode 100644 index 000000000..1c27d0ef8 --- /dev/null +++ b/src/rpcnet.cpp @@ -0,0 +1,21 @@ +// 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."); + + return (int)vNodes.size(); +} + + -- cgit v1.2.3 From 1006f0707e34f8903f247195dabd86243ae61f05 Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Fri, 29 Jun 2012 17:24:53 -0400 Subject: RPC: add 'getpeerinfo', returning easy-to-retrieve per-CNode data --- src/rpcnet.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'src/rpcnet.cpp') diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index 1c27d0ef8..c5746651c 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -15,7 +15,53 @@ Value getconnectioncount(const Array& params, bool fHelp) "getconnectioncount\n" "Returns the number of connections to other nodes."); + LOCK(cs_vNodes); return (int)vNodes.size(); } +static void CopyNodeStats(std::vector& 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 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; +} -- cgit v1.2.3