]> Git Repo - VerusCoin.git/blame - src/rpcnet.cpp
Added better WalletTools description.
[VerusCoin.git] / src / rpcnet.cpp
CommitLineData
70ab73a0
JG
1// Copyright (c) 2009-2012 Bitcoin Developers
2// Distributed under the MIT/X11 software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include "net.h"
6#include "bitcoinrpc.h"
7
8using namespace json_spirit;
9using namespace std;
10
11Value getconnectioncount(const Array& params, bool fHelp)
12{
13 if (fHelp || params.size() != 0)
14 throw runtime_error(
15 "getconnectioncount\n"
16 "Returns the number of connections to other nodes.");
17
1006f070 18 LOCK(cs_vNodes);
70ab73a0
JG
19 return (int)vNodes.size();
20}
21
1006f070
JG
22static void CopyNodeStats(std::vector<CNodeStats>& vstats)
23{
24 vstats.clear();
25
26 LOCK(cs_vNodes);
27 vstats.reserve(vNodes.size());
28 BOOST_FOREACH(CNode* pnode, vNodes) {
29 CNodeStats stats;
30 pnode->copyStats(stats);
31 vstats.push_back(stats);
32 }
33}
34
35Value getpeerinfo(const Array& params, bool fHelp)
36{
37 if (fHelp || params.size() != 0)
38 throw runtime_error(
39 "getpeerinfo\n"
40 "Returns data about each connected network node.");
41
42 vector<CNodeStats> vstats;
43 CopyNodeStats(vstats);
44
45 Array ret;
46
47 BOOST_FOREACH(const CNodeStats& stats, vstats) {
48 Object obj;
49
50 obj.push_back(Pair("addr", stats.addrName));
51 obj.push_back(Pair("services", strprintf("%08"PRI64x, stats.nServices)));
52 obj.push_back(Pair("lastsend", (boost::int64_t)stats.nLastSend));
53 obj.push_back(Pair("lastrecv", (boost::int64_t)stats.nLastRecv));
86648a8d
PW
54 obj.push_back(Pair("bytessent", (boost::int64_t)stats.nSendBytes));
55 obj.push_back(Pair("bytesrecv", (boost::int64_t)stats.nRecvBytes));
1006f070
JG
56 obj.push_back(Pair("conntime", (boost::int64_t)stats.nTimeConnected));
57 obj.push_back(Pair("version", stats.nVersion));
58 obj.push_back(Pair("subver", stats.strSubVer));
59 obj.push_back(Pair("inbound", stats.fInbound));
18e8e437 60 obj.push_back(Pair("startingheight", stats.nStartingHeight));
1006f070 61 obj.push_back(Pair("banscore", stats.nMisbehavior));
86648a8d
PW
62 if (stats.fSyncNode)
63 obj.push_back(Pair("syncnode", true));
1006f070
JG
64
65 ret.push_back(obj);
66 }
ea0796bd 67
1006f070
JG
68 return ret;
69}
70ab73a0 70
72a348fd
MC
71Value addnode(const Array& params, bool fHelp)
72{
73 string strCommand;
74 if (params.size() == 2)
75 strCommand = params[1].get_str();
76 if (fHelp || params.size() != 2 ||
77 (strCommand != "onetry" && strCommand != "add" && strCommand != "remove"))
78 throw runtime_error(
79 "addnode <node> <add|remove|onetry>\n"
80 "Attempts add or remove <node> from the addnode list or try a connection to <node> once.");
81
82 string strNode = params[0].get_str();
83
84 if (strCommand == "onetry")
85 {
86 CAddress addr;
87 ConnectNode(addr, strNode.c_str());
88 return Value::null;
89 }
90
91 LOCK(cs_vAddedNodes);
92 vector<string>::iterator it = vAddedNodes.begin();
93 for(; it != vAddedNodes.end(); it++)
94 if (strNode == *it)
95 break;
96
97 if (strCommand == "add")
98 {
99 if (it != vAddedNodes.end())
100 throw JSONRPCError(-23, "Error: Node already added");
101 vAddedNodes.push_back(strNode);
102 }
103 else if(strCommand == "remove")
104 {
105 if (it == vAddedNodes.end())
106 throw JSONRPCError(-24, "Error: Node has not been added.");
107 vAddedNodes.erase(it);
108 }
109
110 return Value::null;
111}
112
67a11bd6
MC
113Value getaddednodeinfo(const Array& params, bool fHelp)
114{
115 if (fHelp || params.size() < 1 || params.size() > 2)
116 throw runtime_error(
117 "getaddednodeinfo <dns> [node]\n"
118 "Returns information about the given added node, or all added nodes\n"
119 "(note that onetry addnodes are not listed here)\n"
120 "If dns is false, only a list of added nodes will be provided,\n"
121 "otherwise connected information will also be available.");
122
123 bool fDns = params[0].get_bool();
124
125 list<string> laddedNodes(0);
126 if (params.size() == 1)
127 {
128 LOCK(cs_vAddedNodes);
129 BOOST_FOREACH(string& strAddNode, vAddedNodes)
130 laddedNodes.push_back(strAddNode);
131 }
132 else
133 {
134 string strNode = params[1].get_str();
135 LOCK(cs_vAddedNodes);
136 BOOST_FOREACH(string& strAddNode, vAddedNodes)
137 if (strAddNode == strNode)
138 {
139 laddedNodes.push_back(strAddNode);
140 break;
141 }
142 if (laddedNodes.size() == 0)
143 throw JSONRPCError(-24, "Error: Node has not been added.");
144 }
145
146 if (!fDns)
147 {
148 Object ret;
149 BOOST_FOREACH(string& strAddNode, laddedNodes)
150 ret.push_back(Pair("addednode", strAddNode));
151 return ret;
152 }
153
154 Array ret;
155
156 list<pair<string, vector<CService> > > laddedAddreses(0);
157 BOOST_FOREACH(string& strAddNode, laddedNodes)
158 {
159 vector<CService> vservNode(0);
0e4b3175 160 if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0))
67a11bd6
MC
161 laddedAddreses.push_back(make_pair(strAddNode, vservNode));
162 else
163 {
164 Object obj;
165 obj.push_back(Pair("addednode", strAddNode));
166 obj.push_back(Pair("connected", false));
167 Array addresses;
168 obj.push_back(Pair("addresses", addresses));
169 }
170 }
171
172 LOCK(cs_vNodes);
173 for (list<pair<string, vector<CService> > >::iterator it = laddedAddreses.begin(); it != laddedAddreses.end(); it++)
174 {
175 Object obj;
176 obj.push_back(Pair("addednode", it->first));
177
178 Array addresses;
179 bool fConnected = false;
180 BOOST_FOREACH(CService& addrNode, it->second)
181 {
182 bool fFound = false;
183 Object node;
184 node.push_back(Pair("address", addrNode.ToString()));
185 BOOST_FOREACH(CNode* pnode, vNodes)
186 if (pnode->addr == addrNode)
187 {
188 fFound = true;
189 fConnected = true;
190 node.push_back(Pair("connected", pnode->fInbound ? "inbound" : "outbound"));
191 break;
192 }
193 if (!fFound)
194 node.push_back(Pair("connected", "false"));
195 addresses.push_back(node);
196 }
197 obj.push_back(Pair("connected", fConnected));
198 obj.push_back(Pair("addresses", addresses));
199 ret.push_back(obj);
200 }
201
202 return ret;
203}
204
This page took 0.110161 seconds and 4 git commands to generate.