}
}
+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
+ // Get a full list of "online" address items
vector<CAddrInfo> 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();
+ Array ret;
BOOST_FOREACH(const CAddrInfo &addr, vAddr) {
if (!addr.IsRoutable() || addr.IsLocal())
continue;
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));
return ret;
}
-extern CCriticalSection cs_mapAlerts;
-extern map<uint256, CAlert> 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()