X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcnet.cpp;h=e67c5f1ebe0f9b29b826586f224704e9128c3327;hb=6cea4ed3fed2259f8800d8ecb45c691c0df0cdd1;hp=f476ce01b9316d6d001b548f0f418d7d0796a58d;hpb=6aab4a028e369f448ffefae47e422f700005331c;p=novacoin.git diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index f476ce0..e67c5f1 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -36,19 +36,32 @@ static void CopyNodeStats(std::vector& vstats) } } +struct addrManItemSort { + bool operator()(const CAddrInfo &leftItem, const CAddrInfo &rightItem) { + int64_t nTime = GetTime(); + return leftItem.GetChance(nTime) > rightItem.GetChance(nTime); + } +}; + Value getaddrmaninfo(const Array& params, bool fHelp) { - if (fHelp || params.size() != 0) + if (fHelp || params.size() > 1) throw runtime_error( - "getaddrmaninfo\n" + "getaddrmaninfo [networkType]\n" "Returns a dump of addrman data."); - // Return a full list of "online" address items - vector vAddr = addrman.GetOnlineAddr(); + // Get a full list of "online" address items + vector vAddr = addrman.GetOnlineAddr(); - Array ret; + // Sort by the GetChance result backwardly + sort(vAddr.begin(), vAddr.end(), addrManItemSort()); + + string strFilterNetType = ""; + if (params.size() == 1) + strFilterNetType = params[0].get_str(); - BOOST_FOREACH(const CAddress &addr, vAddr) { + Array ret; + BOOST_FOREACH(const CAddrInfo &addr, vAddr) { if (!addr.IsRoutable() || addr.IsLocal()) continue; @@ -58,20 +71,25 @@ Value getaddrmaninfo(const Array& params, bool fHelp) string strNetType; switch(addr.GetNetwork()) { -// case NET_TOR: -// strNetType = "tor"; -// break; + case NET_TOR: + strNetType = "tor"; + break; // case NET_I2P: // strNetType = "i2p"; // break; - case NET_IPV4: - strNetType = "ipv4"; - break; - default: case NET_IPV6: strNetType = "ipv6"; + break; + default: + case NET_IPV4: + strNetType = "ipv4"; } + + if (strFilterNetType.size() != 0 && strNetType != strFilterNetType) + continue; + + addrManItem.push_back(Pair("chance", addr.GetChance(GetTime()))); addrManItem.push_back(Pair("type", strNetType)); addrManItem.push_back(Pair("time", (int64_t)addr.nTime)); @@ -98,15 +116,15 @@ Value getpeerinfo(const Array& params, bool fHelp) obj.push_back(Pair("addr", stats.addrName)); obj.push_back(Pair("services", strprintf("%08" PRIx64, 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("bytessent", (boost::int64_t)stats.nSendBytes)); - obj.push_back(Pair("bytesrecv", (boost::int64_t)stats.nRecvBytes)); - obj.push_back(Pair("conntime", (boost::int64_t)stats.nTimeConnected)); + obj.push_back(Pair("lastsend", (int64_t)stats.nLastSend)); + obj.push_back(Pair("lastrecv", (int64_t)stats.nLastRecv)); + obj.push_back(Pair("bytessent", (int64_t)stats.nSendBytes)); + obj.push_back(Pair("bytesrecv", (int64_t)stats.nRecvBytes)); + obj.push_back(Pair("conntime", (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("releasetime", (int64_t)stats.nReleaseTime)); obj.push_back(Pair("startingheight", stats.nStartingHeight)); obj.push_back(Pair("banscore", stats.nMisbehavior)); if (stats.fSyncNode) @@ -251,10 +269,6 @@ Value getaddednodeinfo(const Array& params, bool fHelp) return ret; } -extern CCriticalSection cs_mapAlerts; -extern map mapAlerts; - -// ppcoin: send alert. // There is a known deadlock situation with ThreadMessageHandler // ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages() // ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage() @@ -326,8 +340,8 @@ Value getnettotals(const Array& params, bool fHelp) "and current time."); Object obj; - obj.push_back(Pair("totalbytesrecv", static_cast< boost::uint64_t>(CNode::GetTotalBytesRecv()))); - obj.push_back(Pair("totalbytessent", static_cast(CNode::GetTotalBytesSent()))); - obj.push_back(Pair("timemillis", static_cast(GetTimeMillis()))); + obj.push_back(Pair("totalbytesrecv", static_cast(CNode::GetTotalBytesRecv()))); + obj.push_back(Pair("totalbytessent", static_cast(CNode::GetTotalBytesSent()))); + obj.push_back(Pair("timemillis", static_cast(GetTimeMillis()))); return obj; } \ No newline at end of file