From 547c61f8d8b42296fd0a51bad4a2e3a3765aa7fd Mon Sep 17 00:00:00 2001 From: Josh Lehan Date: Wed, 21 Aug 2013 22:50:19 -0700 Subject: [PATCH] Adding new "addrlocal" field to RPC getpeerinfo. The existing CNode::addrLocal member is revealed to the user, as an address string, similar to the existing "addr" field. Instead of showing garbage or empty string, it simply will not appear in the output if local address not known yet. --- src/net.cpp | 3 +++ src/net.h | 1 + src/rpcnet.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/net.cpp b/src/net.cpp index dd7bf283a..d223b3999 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -639,6 +639,9 @@ void CNode::copyStats(CNodeStats &stats) // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) stats.dPingTime = (((double)nPingUsecTime) / 1e6); stats.dPingWait = (((double)nPingUsecWait) / 1e6); + + // Leave string empty if addrLocal invalid (not filled in yet) + stats.addrLocal = addrLocal.IsValid() ? addrLocal.ToString() : ""; } #undef X diff --git a/src/net.h b/src/net.h index 2c2d3a768..a1dc19df3 100644 --- a/src/net.h +++ b/src/net.h @@ -121,6 +121,7 @@ public: bool fSyncNode; double dPingTime; double dPingWait; + std::string addrLocal; }; diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index 7685dec57..3c9273985 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -66,6 +66,8 @@ Value getpeerinfo(const Array& params, bool fHelp) Object obj; obj.push_back(Pair("addr", stats.addrName)); + if (!(stats.addrLocal.empty())) + obj.push_back(Pair("addrlocal", stats.addrLocal)); 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));