annotate rpc.cpp @ 65:91fd50f5d311 draft

better prevention of inventory relaying during initial download, message checksum between nodes with 0.2.9 or higher, optimization level up from -O0 to -O2, rpc functions: setlabel, getlabel, getaddressesbylabel, getreceivedbyaddress, getreceivedbylabel, listreceivedbyaddress, listreceivedbylabel -- version 0.2.9 git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@78 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Wed, 26 May 2010 00:05:26 +0000
parents 287b52edacce
children 0fecfb941a51
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1 // Copyright (c) 2010 Satoshi Nakamoto
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
2 // Distributed under the MIT/X11 software license, see the accompanying
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
3 // file license.txt or http://www.opensource.org/licenses/mit-license.php.
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
4
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
5 #include "headers.h"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
6 #undef printf
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
7 #include <boost/asio.hpp>
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
8 #include "json/json_spirit_reader_template.h"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
9 #include "json/json_spirit_writer_template.h"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
10 #include "json/json_spirit_utils.h"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
11 #define printf OutputDebugStringF
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
12 // MinGW 3.4.5 gets "fatal error: had to relocate PCH" if the json headers are
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
13 // precompiled in headers.h. The problem might be when the pch file goes over
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
14 // a certain size around 145MB. If we need access to json_spirit outside this
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
15 // file, we could use the compiled json_spirit option.
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
16
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
17 using boost::asio::ip::tcp;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
18 using namespace json_spirit;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
19
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
20 void ThreadRPCServer2(void* parg);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
21
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
22
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
23
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
24
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
25
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
26
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
27
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
28 ///
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
29 /// Note: This interface may still be subject to change.
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
30 ///
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
31
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
32
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
33
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
34 Value stop(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
35 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
36 if (params.size() != 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
37 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
38 "stop (no parameters)\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
39 "Stop bitcoin server.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
40
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
41 // Shutdown will take long enough that the response should get back
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
42 CreateThread(Shutdown, NULL);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
43 return "bitcoin server stopping";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
44 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
45
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
46
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
47 Value getblockcount(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
48 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
49 if (params.size() != 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
50 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
51 "getblockcount (no parameters)\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
52 "Returns the number of blocks in the longest block chain.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
53
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
54 return nBestHeight + 1;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
55 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
56
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
57
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
58 Value getblocknumber(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
59 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
60 if (params.size() != 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
61 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
62 "getblocknumber (no parameters)\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
63 "Returns the block number of the latest block in the longest block chain.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
64
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
65 return nBestHeight;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
66 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
67
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
68
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
69 Value getconnectioncount(const Array& params)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
70 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
71 if (params.size() != 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
72 throw runtime_error(
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
73 "getconnectioncount (no parameters)\n"
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
74 "Returns the number of connections to other nodes.");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
75
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
76 return (int)vNodes.size();
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
77 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
78
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
79
63
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
80 double GetDifficulty()
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
81 {
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
82 // Floating point number that is a multiple of the minimum difficulty,
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
83 // minimum difficulty = 1.0.
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
84 if (pindexBest == NULL)
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
85 return 1.0;
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
86 int nShift = 256 - 32 - 31; // to fit in a uint
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
87 double dMinimum = (CBigNum().SetCompact(bnProofOfWorkLimit.GetCompact()) >> nShift).getuint();
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
88 double dCurrently = (CBigNum().SetCompact(pindexBest->nBits) >> nShift).getuint();
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
89 return dMinimum / dCurrently;
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
90 }
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
91
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
92 Value getdifficulty(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
93 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
94 if (params.size() != 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
95 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
96 "getdifficulty (no parameters)\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
97 "Returns the proof-of-work difficulty as a multiple of the minimum difficulty.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
98
63
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
99 return GetDifficulty();
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
100 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
101
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
102
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
103 Value getbalance(const Array& params)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
104 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
105 if (params.size() != 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
106 throw runtime_error(
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
107 "getbalance (no parameters)\n"
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
108 "Returns the server's available balance.");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
109
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
110 return ((double)GetBalance() / (double)COIN);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
111 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
112
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
113
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
114 Value getgenerate(const Array& params)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
115 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
116 if (params.size() != 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
117 throw runtime_error(
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
118 "getgenerate (no parameters)\n"
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
119 "Returns true or false.");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
120
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
121 return (bool)fGenerateBitcoins;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
122 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
123
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
124
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
125 Value setgenerate(const Array& params)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
126 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
127 if (params.size() < 1 || params.size() > 2)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
128 throw runtime_error(
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
129 "setgenerate <generate> [genproclimit]\n"
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
130 "<generate> is true or false to turn generation on or off.\n"
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
131 "Generation is limited to [genproclimit] processors, -1 is unlimited.");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
132
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
133 bool fGenerate = true;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
134 if (params.size() > 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
135 fGenerate = params[0].get_bool();
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
136
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
137 if (params.size() > 1)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
138 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
139 int nGenProcLimit = params[1].get_int();
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
140 fLimitProcessors = (nGenProcLimit != -1);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
141 CWalletDB().WriteSetting("fLimitProcessors", fLimitProcessors);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
142 if (nGenProcLimit != -1)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
143 CWalletDB().WriteSetting("nLimitProcessors", nLimitProcessors = nGenProcLimit);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
144 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
145
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
146 GenerateBitcoins(fGenerate);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
147 return Value::null;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
148 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
149
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
150
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
151 Value getinfo(const Array& params)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
152 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
153 if (params.size() != 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
154 throw runtime_error(
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
155 "getinfo (no parameters)");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
156
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
157 Object obj;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
158 obj.push_back(Pair("balance", (double)GetBalance() / (double)COIN));
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
159 obj.push_back(Pair("blocks", (int)nBestHeight + 1));
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
160 obj.push_back(Pair("connections", (int)vNodes.size()));
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
161 obj.push_back(Pair("proxy", (fUseProxy ? addrProxy.ToStringIPPort() : string())));
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
162 obj.push_back(Pair("generate", (bool)fGenerateBitcoins));
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
163 obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1)));
63
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
164 obj.push_back(Pair("difficulty", (double)GetDifficulty()));
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
165 return obj;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
166 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
167
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
168
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
169 Value getnewaddress(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
170 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
171 if (params.size() > 1)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
172 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
173 "getnewaddress [label]\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
174 "Returns a new bitcoin address for receiving payments. "
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
175 "If [label] is specified (recommended), it is added to the address book "
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
176 "so payments received with the address will be labeled.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
177
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
178 // Parse the label first so we don't generate a key if there's an error
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
179 string strLabel;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
180 if (params.size() > 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
181 strLabel = params[0].get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
182
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
183 // Generate a new key that is added to wallet
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
184 string strAddress = PubKeyToAddress(GenerateNewKey());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
185
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
186 SetAddressBookName(strAddress, strLabel);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
187 return strAddress;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
188 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
189
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
190
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
191 Value setlabel(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
192 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
193 if (params.size() < 1 || params.size() > 2)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
194 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
195 "setlabel <bitcoinaddress> <label>\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
196 "Sets the label associated with the given address.");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
197
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
198 string strAddress = params[0].get_str();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
199 string strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
200 if (params.size() > 1)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
201 strLabel = params[1].get_str();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
202
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
203 SetAddressBookName(strAddress, strLabel);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
204 return Value::null;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
205 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
206
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
207
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
208 Value getlabel(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
209 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
210 if (params.size() != 1)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
211 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
212 "getlabel <bitcoinaddress>\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
213 "Returns the label associated with the given address.");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
214
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
215 string strAddress = params[0].get_str();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
216
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
217 string strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
218 CRITICAL_BLOCK(cs_mapAddressBook)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
219 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
220 map<string, string>::iterator mi = mapAddressBook.find(strAddress);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
221 if (mi != mapAddressBook.end() && !(*mi).second.empty())
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
222 strLabel = (*mi).second;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
223 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
224 return strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
225 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
226
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
227
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
228 Value getaddressesbylabel(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
229 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
230 if (params.size() != 1)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
231 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
232 "getaddressesbylabel <label>\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
233 "Returns the list of addresses with the given label.");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
234
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
235 string strLabel = params[0].get_str();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
236
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
237 // Find all addresses that have the given label
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
238 Array ret;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
239 CRITICAL_BLOCK(cs_mapAddressBook)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
240 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
241 foreach(const PAIRTYPE(string, string)& item, mapAddressBook)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
242 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
243 const string& strAddress = item.first;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
244 const string& strName = item.second;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
245 if (strName == strLabel)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
246 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
247 // We're only adding valid bitcoin addresses and not ip addresses
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
248 CScript scriptPubKey;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
249 if (scriptPubKey.SetBitcoinAddress(strAddress))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
250 ret.push_back(strAddress);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
251 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
252 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
253 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
254 return ret;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
255 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
256
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
257
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
258 Value sendtoaddress(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
259 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
260 if (params.size() < 2 || params.size() > 4)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
261 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
262 "sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
263 "<amount> is a real and is rounded to the nearest 0.01");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
264
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
265 string strAddress = params[0].get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
266
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
267 // Amount
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
268 if (params[1].get_real() <= 0.0 || params[1].get_real() > 21000000.0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
269 throw runtime_error("Invalid amount");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
270 int64 nAmount = roundint64(params[1].get_real() * 100.00) * CENT;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
271
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
272 // Wallet comments
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
273 CWalletTx wtx;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
274 if (params.size() > 2 && params[2].type() != null_type && !params[2].get_str().empty())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
275 wtx.mapValue["message"] = params[2].get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
276 if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
277 wtx.mapValue["to"] = params[3].get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
278
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
279 string strError = SendMoneyToBitcoinAddress(strAddress, nAmount, wtx);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
280 if (strError != "")
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
281 throw runtime_error(strError);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
282 return "sent";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
283 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
284
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
285
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
286 Value listtransactions(const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
287 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
288 if (params.size() > 2)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
289 throw runtime_error(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
290 "listtransactions [count=10] [includegenerated=false]\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
291 "Returns up to [count] most recent transactions.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
292
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
293 int64 nCount = 10;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
294 if (params.size() > 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
295 nCount = params[0].get_int64();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
296 bool fGenerated = false;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
297 if (params.size() > 1)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
298 fGenerated = params[1].get_bool();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
299
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
300 Array ret;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
301 //// not finished
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
302 ret.push_back("not implemented yet");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
303 return ret;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
304 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
305
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
306
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
307 Value getreceivedbyaddress(const Array& params)
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
308 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
309 if (params.size() < 1 || params.size() > 2)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
310 throw runtime_error(
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
311 "getreceivedbyaddress <bitcoinaddress> [minconf=1]\n"
50
ecc1a8128d0e renamed a few rpc methods
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 49
diff changeset
312 "Returns the total amount received by <bitcoinaddress> in transactions with at least [minconf] confirmations.");
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
313
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
314 // Bitcoin address
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
315 string strAddress = params[0].get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
316 CScript scriptPubKey;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
317 if (!scriptPubKey.SetBitcoinAddress(strAddress))
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
318 throw runtime_error("Invalid bitcoin address");
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
319 if (!IsMine(scriptPubKey))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
320 return (double)0.0;
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
321
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
322 // Minimum confirmations
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
323 int nMinDepth = 1;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
324 if (params.size() > 1)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
325 nMinDepth = params[1].get_int();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
326
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
327 // Tally
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
328 int64 nAmount = 0;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
329 CRITICAL_BLOCK(cs_mapWallet)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
330 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
331 for (map<uint256, CWalletTx>::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
332 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
333 const CWalletTx& wtx = (*it).second;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
334 if (wtx.IsCoinBase() || !wtx.IsFinal())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
335 continue;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
336
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
337 foreach(const CTxOut& txout, wtx.vout)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
338 if (txout.scriptPubKey == scriptPubKey)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
339 if (wtx.GetDepthInMainChain() >= nMinDepth)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
340 nAmount += txout.nValue;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
341 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
342 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
343
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
344 return (double)nAmount / (double)COIN;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
345 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
346
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
347
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
348 Value getreceivedbylabel(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
349 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
350 if (params.size() < 1 || params.size() > 2)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
351 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
352 "getreceivedbylabel <label> [minconf=1]\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
353 "Returns the total amount received by addresses with <label> in transactions with at least [minconf] confirmations.");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
354
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
355 // Get the set of pub keys that have the label
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
356 string strLabel = params[0].get_str();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
357 set<CScript> setPubKey;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
358 CRITICAL_BLOCK(cs_mapAddressBook)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
359 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
360 foreach(const PAIRTYPE(string, string)& item, mapAddressBook)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
361 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
362 const string& strAddress = item.first;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
363 const string& strName = item.second;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
364 if (strName == strLabel)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
365 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
366 // We're only counting our own valid bitcoin addresses and not ip addresses
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
367 CScript scriptPubKey;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
368 if (scriptPubKey.SetBitcoinAddress(strAddress))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
369 if (IsMine(scriptPubKey))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
370 setPubKey.insert(scriptPubKey);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
371 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
372 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
373 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
374
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
375 // Minimum confirmations
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
376 int nMinDepth = 1;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
377 if (params.size() > 1)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
378 nMinDepth = params[1].get_int();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
379
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
380 // Tally
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
381 int64 nAmount = 0;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
382 CRITICAL_BLOCK(cs_mapWallet)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
383 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
384 for (map<uint256, CWalletTx>::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
385 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
386 const CWalletTx& wtx = (*it).second;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
387 if (wtx.IsCoinBase() || !wtx.IsFinal())
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
388 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
389
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
390 foreach(const CTxOut& txout, wtx.vout)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
391 if (setPubKey.count(txout.scriptPubKey))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
392 if (wtx.GetDepthInMainChain() >= nMinDepth)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
393 nAmount += txout.nValue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
394 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
395 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
396
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
397 return (double)nAmount / (double)COIN;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
398 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
399
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
400
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
401 struct tallyitem
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
402 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
403 int64 nAmount;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
404 int nConf;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
405 tallyitem()
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
406 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
407 nAmount = 0;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
408 nConf = INT_MAX;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
409 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
410 };
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
411
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
412 Value ListReceived(const Array& params, bool fByLabels)
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
413 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
414 // Minimum confirmations
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
415 int nMinDepth = 1;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
416 if (params.size() > 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
417 nMinDepth = params[0].get_int();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
418
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
419 // Whether to include empty accounts
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
420 bool fIncludeEmpty = false;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
421 if (params.size() > 1)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
422 fIncludeEmpty = params[1].get_bool();
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
423
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
424 // Tally
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
425 map<uint160, tallyitem> mapTally;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
426 CRITICAL_BLOCK(cs_mapWallet)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
427 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
428 for (map<uint256, CWalletTx>::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
429 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
430 const CWalletTx& wtx = (*it).second;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
431 if (wtx.IsCoinBase() || !wtx.IsFinal())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
432 continue;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
433
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
434 int nDepth = wtx.GetDepthInMainChain();
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
435 if (nDepth < nMinDepth)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
436 continue;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
437
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
438 foreach(const CTxOut& txout, wtx.vout)
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
439 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
440 // Only counting our own bitcoin addresses and not ip addresses
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
441 uint160 hash160 = txout.scriptPubKey.GetBitcoinAddressHash160();
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
442 if (hash160 == 0 || !mapPubKeys.count(hash160)) // IsMine
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
443 continue;
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
444
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
445 tallyitem& item = mapTally[hash160];
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
446 item.nAmount += txout.nValue;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
447 item.nConf = min(item.nConf, nDepth);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
448 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
449 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
450 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
451
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
452 // Reply
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
453 Array ret;
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
454 map<string, tallyitem> mapLabelTally;
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
455 CRITICAL_BLOCK(cs_mapAddressBook)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
456 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
457 foreach(const PAIRTYPE(string, string)& item, mapAddressBook)
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
458 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
459 const string& strAddress = item.first;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
460 const string& strLabel = item.second;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
461 uint160 hash160;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
462 if (!AddressToHash160(strAddress, hash160))
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
463 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
464 map<uint160, tallyitem>::iterator it = mapTally.find(hash160);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
465 if (it == mapTally.end() && !fIncludeEmpty)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
466 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
467
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
468 int64 nAmount = 0;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
469 int nConf = INT_MAX;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
470 if (it != mapTally.end())
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
471 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
472 nAmount = (*it).second.nAmount;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
473 nConf = (*it).second.nConf;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
474 }
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
475
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
476 if (fByLabels)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
477 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
478 tallyitem& item = mapLabelTally[strLabel];
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
479 item.nAmount += nAmount;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
480 item.nConf = min(item.nConf, nConf);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
481 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
482 else
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
483 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
484 Object obj;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
485 obj.push_back(Pair("address", strAddress));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
486 obj.push_back(Pair("label", strLabel));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
487 obj.push_back(Pair("amount", (double)nAmount / (double)COIN));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
488 obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf)));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
489 ret.push_back(obj);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
490 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
491 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
492 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
493
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
494 if (fByLabels)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
495 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
496 for (map<string, tallyitem>::iterator it = mapLabelTally.begin(); it != mapLabelTally.end(); ++it)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
497 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
498 int64 nAmount = (*it).second.nAmount;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
499 int nConf = (*it).second.nConf;
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
500 Object obj;
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
501 obj.push_back(Pair("label", (*it).first));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
502 obj.push_back(Pair("amount", (double)nAmount / (double)COIN));
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
503 obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf)));
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
504 ret.push_back(obj);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
505 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
506 }
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
507
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
508 return ret;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
509 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
510
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
511 Value listreceivedbyaddress(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
512 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
513 if (params.size() > 2)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
514 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
515 "listreceivedbyaddress [minconf=1] [includeempty=false]\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
516 "[minconf] is the minimum number of confirmations before payments are included.\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
517 "[includeempty] whether to include addresses that haven't received any payments.\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
518 "Returns an array of objects containing:\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
519 " \"address\" : receiving address\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
520 " \"label\" : the label of the receiving address\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
521 " \"amount\" : total amount received by the address\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
522 " \"confirmations\" : number of confirmations of the most recent transaction included");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
523
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
524 return ListReceived(params, false);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
525 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
526
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
527 Value listreceivedbylabel(const Array& params)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
528 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
529 if (params.size() > 2)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
530 throw runtime_error(
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
531 "listreceivedbylabel [minconf=1] [includeempty=false]\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
532 "[minconf] is the minimum number of confirmations before payments are included.\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
533 "[includeempty] whether to include labels that haven't received any payments.\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
534 "Returns an array of objects containing:\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
535 " \"label\" : the label of the receiving addresses\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
536 " \"amount\" : total amount received by addresses with this label\n"
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
537 " \"confirmations\" : number of confirmations of the most recent transaction included");
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
538
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
539 return ListReceived(params, true);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
540 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
541
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
542
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
543
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
544
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
545
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
546
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
547
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
548
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
549
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
550
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
551
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
552
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
553
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
554 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
555 // Call Table
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
556 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
557
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
558 typedef Value(*rpcfn_type)(const Array& params);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
559 pair<string, rpcfn_type> pCallTable[] =
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
560 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
561 make_pair("stop", &stop),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
562 make_pair("getblockcount", &getblockcount),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
563 make_pair("getblocknumber", &getblocknumber),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
564 make_pair("getconnectioncount", &getconnectioncount),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
565 make_pair("getdifficulty", &getdifficulty),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
566 make_pair("getbalance", &getbalance),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
567 make_pair("getgenerate", &getgenerate),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
568 make_pair("setgenerate", &setgenerate),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
569 make_pair("getinfo", &getinfo),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
570 make_pair("getnewaddress", &getnewaddress),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
571 make_pair("setlabel", &setlabel),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
572 make_pair("getlabel", &getlabel),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
573 make_pair("getaddressesbylabel", &getaddressesbylabel),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
574 make_pair("sendtoaddress", &sendtoaddress),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
575 make_pair("listtransactions", &listtransactions),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
576 make_pair("getamountreceived", &getreceivedbyaddress), // deprecated, renamed to getreceivedbyaddress
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
577 make_pair("getallreceived", &listreceivedbyaddress), // deprecated, renamed to listreceivedbyaddress
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
578 make_pair("getreceivedbyaddress", &getreceivedbyaddress),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
579 make_pair("getreceivedbylabel", &getreceivedbylabel),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
580 make_pair("listreceivedbyaddress", &listreceivedbyaddress),
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
581 make_pair("listreceivedbylabel", &listreceivedbylabel),
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
582 };
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
583 map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0]));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
584
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
585
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
586
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
587
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
588 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
589 // HTTP protocol
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
590 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
591 // This ain't Apache. We're just using HTTP header for the length field
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
592 // and to be compatible with other JSON-RPC implementations.
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
593 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
594
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
595 string HTTPPost(const string& strMsg)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
596 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
597 return strprintf(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
598 "POST / HTTP/1.1\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
599 "User-Agent: json-rpc/1.0\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
600 "Host: 127.0.0.1\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
601 "Content-Type: application/json\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
602 "Content-Length: %d\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
603 "Accept: application/json\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
604 "\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
605 "%s",
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
606 strMsg.size(),
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
607 strMsg.c_str());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
608 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
609
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
610 string HTTPReply(const string& strMsg, int nStatus=200)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
611 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
612 string strStatus;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
613 if (nStatus == 200) strStatus = "OK";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
614 if (nStatus == 500) strStatus = "Internal Server Error";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
615 return strprintf(
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
616 "HTTP/1.1 %d %s\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
617 "Connection: close\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
618 "Content-Length: %d\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
619 "Content-Type: application/json\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
620 "Date: Sat, 08 Jul 2006 12:04:08 GMT\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
621 "Server: json-rpc/1.0\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
622 "\r\n"
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
623 "%s",
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
624 nStatus,
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
625 strStatus.c_str(),
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
626 strMsg.size(),
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
627 strMsg.c_str());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
628 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
629
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
630 int ReadHTTPHeader(tcp::iostream& stream)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
631 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
632 int nLen = 0;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
633 loop
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
634 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
635 string str;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
636 std::getline(stream, str);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
637 if (str.empty() || str == "\r")
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
638 break;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
639 if (str.substr(0,15) == "Content-Length:")
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
640 nLen = atoi(str.substr(15));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
641 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
642 return nLen;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
643 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
644
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
645 inline string ReadHTTP(tcp::iostream& stream)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
646 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
647 // Read header
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
648 int nLen = ReadHTTPHeader(stream);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
649 if (nLen <= 0)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
650 return string();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
651
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
652 // Read message
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
653 vector<char> vch(nLen);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
654 stream.read(&vch[0], nLen);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
655 return string(vch.begin(), vch.end());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
656 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
657
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
658
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
659
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
660 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
661 // JSON-RPC protocol
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
662 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
663 // http://json-rpc.org/wiki/specification
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
664 // http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
665 //
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
666
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
667 string JSONRPCRequest(const string& strMethod, const Array& params, const Value& id)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
668 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
669 Object request;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
670 request.push_back(Pair("method", strMethod));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
671 request.push_back(Pair("params", params));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
672 request.push_back(Pair("id", id));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
673 return write_string(Value(request), false) + "\n";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
674 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
675
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
676 string JSONRPCReply(const Value& result, const Value& error, const Value& id)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
677 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
678 Object reply;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
679 if (error.type() != null_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
680 reply.push_back(Pair("result", Value::null));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
681 else
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
682 reply.push_back(Pair("result", result));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
683 reply.push_back(Pair("error", error));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
684 reply.push_back(Pair("id", id));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
685 return write_string(Value(reply), false) + "\n";
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
686 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
687
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
688
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
689
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
690
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
691 void ThreadRPCServer(void* parg)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
692 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
693 IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer(parg));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
694 try
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
695 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
696 vnThreadsRunning[4]++;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
697 ThreadRPCServer2(parg);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
698 vnThreadsRunning[4]--;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
699 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
700 catch (std::exception& e) {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
701 vnThreadsRunning[4]--;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
702 PrintException(&e, "ThreadRPCServer()");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
703 } catch (...) {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
704 vnThreadsRunning[4]--;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
705 PrintException(NULL, "ThreadRPCServer()");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
706 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
707 printf("ThreadRPCServer exiting\n");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
708 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
709
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
710 void ThreadRPCServer2(void* parg)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
711 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
712 printf("ThreadRPCServer started\n");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
713
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
714 // Bind to loopback 127.0.0.1 so the socket can only be accessed locally
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
715 boost::asio::io_service io_service;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
716 tcp::endpoint endpoint(boost::asio::ip::address_v4::loopback(), 8332);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
717 tcp::acceptor acceptor(io_service, endpoint);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
718
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
719 loop
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
720 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
721 // Accept connection
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
722 tcp::iostream stream;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
723 tcp::endpoint peer;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
724 vnThreadsRunning[4]--;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
725 acceptor.accept(*stream.rdbuf(), peer);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
726 vnThreadsRunning[4]++;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
727 if (fShutdown)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
728 return;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
729
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
730 // Shouldn't be possible for anyone else to connect, but just in case
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
731 if (peer.address().to_string() != "127.0.0.1")
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
732 continue;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
733
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
734 // Receive request
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
735 string strRequest = ReadHTTP(stream);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
736 printf("ThreadRPCServer request=%s", strRequest.c_str());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
737
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
738 // Handle multiple invocations per request
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
739 string::iterator begin = strRequest.begin();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
740 while (skipspaces(begin), begin != strRequest.end())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
741 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
742 string::iterator prev = begin;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
743 Value id;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
744 try
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
745 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
746 // Parse request
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
747 Value valRequest;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
748 if (!read_range(begin, strRequest.end(), valRequest))
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
749 throw runtime_error("Parse error.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
750 const Object& request = valRequest.get_obj();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
751 if (find_value(request, "method").type() != str_type ||
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
752 find_value(request, "params").type() != array_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
753 throw runtime_error("Invalid request.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
754
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
755 string strMethod = find_value(request, "method").get_str();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
756 const Array& params = find_value(request, "params").get_array();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
757 id = find_value(request, "id");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
758
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
759 // Execute
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
760 map<string, rpcfn_type>::iterator mi = mapCallTable.find(strMethod);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
761 if (mi == mapCallTable.end())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
762 throw runtime_error("Method not found.");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
763 Value result = (*(*mi).second)(params);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
764
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
765 // Send reply
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
766 string strReply = JSONRPCReply(result, Value::null, id);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
767 stream << HTTPReply(strReply, 200) << std::flush;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
768 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
769 catch (std::exception& e)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
770 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
771 // Send error reply
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
772 string strReply = JSONRPCReply(Value::null, e.what(), id);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
773 stream << HTTPReply(strReply, 500) << std::flush;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
774 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
775 if (begin == prev)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
776 break;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
777 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
778 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
779 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
780
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
781
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
782
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
783
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
784 Value CallRPC(const string& strMethod, const Array& params)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
785 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
786 // Connect to localhost
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
787 tcp::iostream stream("127.0.0.1", "8332");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
788 if (stream.fail())
49
281dad733155 Workaround for bug on wxWidgets 2.9.0 Ubuntu 9.10 64-bit where first character of the hidden columns were displayed so status column had three numbers overprinted. Fixed by adding a leading space to the hidden columns. 64-bit compile with wxWidgets 2.9.0 seems to be fully working normally now.
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 47
diff changeset
789 throw runtime_error("couldn't connect to server");
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
790
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
791 // Send request
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
792 string strRequest = JSONRPCRequest(strMethod, params, 1);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
793 stream << HTTPPost(strRequest) << std::flush;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
794
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
795 // Receive reply
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
796 string strReply = ReadHTTP(stream);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
797 if (strReply.empty())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
798 throw runtime_error("no response from server");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
799
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
800 // Parse reply
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
801 Value valReply;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
802 if (!read_string(strReply, valReply))
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
803 throw runtime_error("couldn't parse reply from server");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
804 const Object& reply = valReply.get_obj();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
805 if (reply.empty())
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
806 throw runtime_error("expected reply to have result, error and id properties");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
807
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
808 const Value& result = find_value(reply, "result");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
809 const Value& error = find_value(reply, "error");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
810 const Value& id = find_value(reply, "id");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
811
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
812 if (error.type() == str_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
813 throw runtime_error(error.get_str());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
814 else if (error.type() != null_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
815 throw runtime_error(write_string(error, false));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
816 return result;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
817 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
818
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
819
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
820
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
821
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
822 template<typename T>
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
823 void ConvertTo(Value& value)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
824 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
825 if (value.type() == str_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
826 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
827 // reinterpret string as unquoted json value
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
828 Value value2;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
829 if (!read_string(value.get_str(), value2))
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
830 throw runtime_error("type mismatch");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
831 value = value2.get_value<T>();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
832 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
833 else
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
834 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
835 value = value.get_value<T>();
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
836 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
837 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
838
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
839 int CommandLineRPC(int argc, char *argv[])
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
840 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
841 try
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
842 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
843 // Check that method exists
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
844 if (argc < 2)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
845 throw runtime_error("too few parameters");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
846 string strMethod = argv[1];
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
847 if (!mapCallTable.count(strMethod))
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
848 throw runtime_error(strprintf("unknown command: %s", strMethod.c_str()));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
849
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
850 // Parameters default to strings
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
851 Array params;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
852 for (int i = 2; i < argc; i++)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
853 params.push_back(argv[i]);
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
854 int n = params.size();
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
855
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
856 //
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
857 // Special case other types
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
858 //
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
859 if (strMethod == "setgenerate" && n > 0) ConvertTo<bool>(params[0]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
860 if (strMethod == "setgenerate" && n > 1) ConvertTo<boost::int64_t>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
861 if (strMethod == "sendtoaddress" && n > 1) ConvertTo<double>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
862 if (strMethod == "listtransactions" && n > 0) ConvertTo<boost::int64_t>(params[0]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
863 if (strMethod == "listtransactions" && n > 1) ConvertTo<bool>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
864 if (strMethod == "getamountreceived" && n > 1) ConvertTo<boost::int64_t>(params[1]); // deprecated
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
865 if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo<boost::int64_t>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
866 if (strMethod == "getreceivedbylabel" && n > 1) ConvertTo<boost::int64_t>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
867 if (strMethod == "getallreceived" && n > 0) ConvertTo<boost::int64_t>(params[0]); // deprecated
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
868 if (strMethod == "getallreceived" && n > 1) ConvertTo<bool>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
869 if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
870 if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo<bool>(params[1]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
871 if (strMethod == "listreceivedbylabel" && n > 0) ConvertTo<boost::int64_t>(params[0]);
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
872 if (strMethod == "listreceivedbylabel" && n > 1) ConvertTo<bool>(params[1]);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
873
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
874 // Execute
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
875 Value result = CallRPC(strMethod, params);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
876
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
877 // Print result
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
878 string strResult = (result.type() == str_type ? result.get_str() : write_string(result, true));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
879 if (result.type() != null_type)
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
880 {
58
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
881 if (fWindows && fGUI)
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
882 // Windows GUI apps can't print to command line,
58
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
883 // so settle for a message box yuck
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
884 MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
885 else
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
886 fprintf(stdout, "%s\n", strResult.c_str());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
887 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
888 return 0;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
889 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
890 catch (std::exception& e) {
58
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
891 if (fWindows && fGUI)
e1232b450156 GUI-less build target bitcoind that links to wxBase and shouldn't need GTK,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 57
diff changeset
892 MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
47
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
893 else
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
894 fprintf(stderr, "error: %s\n", e.what());
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
895 } catch (...) {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
896 PrintException(NULL, "CommandLineRPC()");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
897 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
898 return 1;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
899 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
900
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
901
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
902
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
903
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
904 #ifdef TEST
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
905 int main(int argc, char *argv[])
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
906 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
907 #ifdef _MSC_VER
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
908 // Turn off microsoft heap dump noise
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
909 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
910 _CrtSetReportFile(_CRT_WARN, CreateFile("NUL", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0));
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
911 #endif
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
912 setbuf(stdin, NULL);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
913 setbuf(stdout, NULL);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
914 setbuf(stderr, NULL);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
915
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
916 try
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
917 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
918 if (argc >= 2 && string(argv[1]) == "-server")
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
919 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
920 printf("server ready\n");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
921 ThreadRPCServer(NULL);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
922 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
923 else
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
924 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
925 return CommandLineRPC(argc, argv);
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
926 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
927 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
928 catch (std::exception& e) {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
929 PrintException(&e, "main()");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
930 } catch (...) {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
931 PrintException(NULL, "main()");
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
932 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
933 return 0;
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
934 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
935 #endif