annotate rpc.cpp @ 225:f38021811428 draft

fix -datadir=./subdir relative path, autostart off by default except on windows, fix occasional "vector iterator not dereferencable" assertion with msvc, fix readlink compile warning on linux build, use sys/param.h and BSD define instead of __BSD__, -paytxfee switch git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@130 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Thu, 12 Aug 2010 21:13:43 +0000 (2010-08-12)
parents 2e6accd84e67
children 835b9dd8e8cd
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);
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
21 typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
22 extern map<string, rpcfn_type> mapCallTable;
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
23
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
24
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
25
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
26 void PrintConsole(const char* format, ...)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
27 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
28 char buffer[50000];
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
29 int limit = sizeof(buffer);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
30 va_list arg_ptr;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
31 va_start(arg_ptr, format);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
32 int ret = _vsnprintf(buffer, limit, format, arg_ptr);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
33 va_end(arg_ptr);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
34 if (ret < 0 || ret >= limit)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
35 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
36 ret = limit - 1;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
37 buffer[limit-1] = 0;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
38 }
207
e981ed3b15d2 bitcoind now compiles without wxWidgets or wxBase
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 206
diff changeset
39 #if defined(__WXMSW__) && defined(GUI)
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
40 MyMessageBox(buffer, "Bitcoin", wxOK | wxICON_EXCLAMATION);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
41 #else
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
42 fprintf(stdout, "%s", buffer);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
43 #endif
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
44 }
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
45
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
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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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 ///
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
53 /// 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
54 ///
a349f999e5e7 command line and JSON-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
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
57 Value help(const Array& params, bool fHelp)
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
58 {
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
59 if (fHelp || params.size() > 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
60 throw runtime_error(
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
61 "help [command]\n"
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
62 "List commands, or get help for a command.");
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
63
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
64 string strCommand;
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
65 if (params.size() > 0)
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
66 strCommand = params[0].get_str();
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
67
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
68 string strRet;
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
69 set<rpcfn_type> setDone;
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
70 for (map<string, rpcfn_type>::iterator mi = mapCallTable.begin(); mi != mapCallTable.end(); ++mi)
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
71 {
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
72 string strMethod = (*mi).first;
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
73 // We already filter duplicates, but these deprecated screw up the sort order
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
74 if (strMethod == "getamountreceived" ||
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
75 strMethod == "getallreceived")
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
76 continue;
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
77 if (strCommand != "" && strMethod != strCommand)
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
78 continue;
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
79 try
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
80 {
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
81 Array params;
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
82 rpcfn_type pfn = (*mi).second;
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
83 if (setDone.insert(pfn).second)
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
84 (*pfn)(params, true);
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
85 }
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
86 catch (std::exception& e)
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
87 {
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
88 // Help text is returned in an exception
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
89 string strHelp = string(e.what());
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
90 if (strCommand == "")
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
91 if (strHelp.find('\n') != -1)
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
92 strHelp = strHelp.substr(0, strHelp.find('\n'));
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
93 strRet += strHelp + "\n";
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
94 }
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
95 }
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
96 if (strRet == "")
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
97 strRet = strprintf("help: unknown command: %s\n", strCommand.c_str());
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
98 strRet = strRet.substr(0,strRet.size()-1);
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
99 return strRet;
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
100 }
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
101
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
102
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
103 Value stop(const Array& params, bool fHelp)
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
104 {
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
105 if (fHelp || params.size() != 0)
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
106 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
107 "stop\n"
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
108 "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
109
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
110 // 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
111 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
112 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
113 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
114
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
115
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
116 Value getblockcount(const Array& params, bool fHelp)
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
117 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
118 if (fHelp || params.size() != 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
119 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
120 "getblockcount\n"
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
121 "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
122
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
123 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
124 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
125
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
126
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
127 Value getblocknumber(const Array& params, bool fHelp)
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
128 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
129 if (fHelp || params.size() != 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
130 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
131 "getblocknumber\n"
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
132 "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
133
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
134 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
135 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
136
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
137
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
138 Value getconnectioncount(const Array& params, bool fHelp)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
139 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
140 if (fHelp || params.size() != 0)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
141 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
142 "getconnectioncount\n"
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
143 "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
144
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
145 return (int)vNodes.size();
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
146 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
147
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
148
63
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
149 double GetDifficulty()
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
150 {
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
151 // 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
152 // minimum difficulty = 1.0.
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
153 if (pindexBest == NULL)
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
154 return 1.0;
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
155 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
156 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
157 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
158 return dMinimum / dCurrently;
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
159 }
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
160
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
161 Value getdifficulty(const Array& params, bool fHelp)
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
162 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
163 if (fHelp || params.size() != 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
164 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
165 "getdifficulty\n"
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
166 "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
167
63
287b52edacce Mac OS build fixes by laszlo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 58
diff changeset
168 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
169 }
a349f999e5e7 command line and JSON-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
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
172 Value getbalance(const Array& params, bool fHelp)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
173 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
174 if (fHelp || params.size() != 0)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
175 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
176 "getbalance\n"
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
177 "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
178
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
179 return ((double)GetBalance() / (double)COIN);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
180 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
181
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
182
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
183 Value getgenerate(const Array& params, bool fHelp)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
184 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
185 if (fHelp || params.size() != 0)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
186 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
187 "getgenerate\n"
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
188 "Returns true or false.");
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
189
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
190 return (bool)fGenerateBitcoins;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
191 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
192
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
193
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
194 Value setgenerate(const Array& params, bool fHelp)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
195 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
196 if (fHelp || params.size() < 1 || params.size() > 2)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
197 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
198 "setgenerate <generate> [genproclimit]\n"
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
199 "<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
200 "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
201
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
202 bool fGenerate = true;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
203 if (params.size() > 0)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
204 fGenerate = params[0].get_bool();
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
205
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
206 if (params.size() > 1)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
207 {
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
208 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
209 fLimitProcessors = (nGenProcLimit != -1);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
210 CWalletDB().WriteSetting("fLimitProcessors", fLimitProcessors);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
211 if (nGenProcLimit != -1)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
212 CWalletDB().WriteSetting("nLimitProcessors", nLimitProcessors = nGenProcLimit);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
213 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
214
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
215 GenerateBitcoins(fGenerate);
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
216 return Value::null;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
217 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
218
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
219
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
220 Value gethashespersec(const Array& params, bool fHelp)
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
221 {
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
222 if (fHelp || params.size() != 0)
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
223 throw runtime_error(
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
224 "gethashespersec\n"
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
225 "Returns a recent hashes per second performance measurement while generating.");
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
226
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
227 if (GetTimeMillis() - nHPSTimerStart > 8000)
224
2e6accd84e67 fix build, thanks jgarzik
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 222
diff changeset
228 return (boost::int64_t)0;
2e6accd84e67 fix build, thanks jgarzik
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 222
diff changeset
229 return (boost::int64_t)dHashesPerSec;
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
230 }
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
231
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
232
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
233 Value getinfo(const Array& params, bool fHelp)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
234 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
235 if (fHelp || params.size() != 0)
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
236 throw runtime_error(
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
237 "getinfo\n"
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
238 "Returns an object containing various state info.");
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
239
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
240 Object obj;
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
241 obj.push_back(Pair("version", (int)VERSION));
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
242 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
243 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
244 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
245 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
246 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
247 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
248 obj.push_back(Pair("difficulty", (double)GetDifficulty()));
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
249 obj.push_back(Pair("hashespersec", gethashespersec(params, false)));
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
250 return obj;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
251 }
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
252
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
253
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
254 Value getnewaddress(const Array& params, bool fHelp)
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
255 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
256 if (fHelp || params.size() > 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
257 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
258 "getnewaddress [label]\n"
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
259 "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
260 "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
261 "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
262
a349f999e5e7 command line and JSON-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 // 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
264 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
265 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
266 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
267
a349f999e5e7 command line and JSON-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 // 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
269 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
270
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
271 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
272 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
273 }
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
276 Value setlabel(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
277 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
278 if (fHelp || params.size() < 1 || params.size() > 2)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
279 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
280 "setlabel <bitcoinaddress> <label>\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
281 "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
282
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
283 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
284 string strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
285 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
286 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
287
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
288 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
289 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
290 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
291
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
292
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
293 Value getlabel(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
294 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
295 if (fHelp || params.size() != 1)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
296 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
297 "getlabel <bitcoinaddress>\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
298 "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
299
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
300 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
301
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
302 string strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
303 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
304 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
305 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
306 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
307 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
308 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
309 return strLabel;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
310 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
311
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
312
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
313 Value getaddressesbylabel(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
314 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
315 if (fHelp || params.size() != 1)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
316 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
317 "getaddressesbylabel <label>\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
318 "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
319
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
320 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
321
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
322 // 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
323 Array ret;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
324 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
325 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
326 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
327 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
328 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
329 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
330 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
331 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
332 // 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
333 CScript scriptPubKey;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
334 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
335 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
336 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
337 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
338 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
339 return ret;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
340 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
341
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
342
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
343 Value sendtoaddress(const Array& params, bool fHelp)
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
344 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
345 if (fHelp || params.size() < 2 || params.size() > 4)
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
346 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
347 "sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]\n"
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
348 "<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
349
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
350 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
351
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
352 // 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
353 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
354 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
355 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
356
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
357 // 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
358 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
359 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
360 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
361 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
362 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
363
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
364 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
365 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
366 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
367 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
368 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
369
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
370
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
371 Value listtransactions(const Array& params, bool fHelp)
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
372 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
373 if (fHelp || params.size() > 2)
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
374 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
375 "listtransactions [count=10] [includegenerated=false]\n"
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
376 "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
377
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
378 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
379 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
380 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
381 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
382 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
383 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
384
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
385 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
386 //// 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
387 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
388 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
389 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
390
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
391
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
392 Value getreceivedbyaddress(const Array& params, bool fHelp)
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
393 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
394 if (fHelp || params.size() < 1 || params.size() > 2)
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
395 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
396 "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
397 "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
398
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
399 // 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
400 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
401 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
402 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
403 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
404 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
405 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
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 // 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
408 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
409 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
410 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
411
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
412 // 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
413 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
414 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
415 {
a349f999e5e7 command line and JSON-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 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
417 {
a349f999e5e7 command line and JSON-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 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
419 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
420 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
421
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
422 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
423 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
424 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
425 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
426 }
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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 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
430 }
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
433 Value getreceivedbylabel(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
434 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
435 if (fHelp || params.size() < 1 || params.size() > 2)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
436 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
437 "getreceivedbylabel <label> [minconf=1]\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
438 "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
439
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
440 // 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
441 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
442 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
443 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
444 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
445 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
446 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
447 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
448 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
449 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
450 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
451 // 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
452 CScript scriptPubKey;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
453 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
454 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
455 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
456 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
457 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
458 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
459
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
460 // Minimum confirmations
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
461 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
462 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
463 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
464
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
465 // Tally
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
466 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
467 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
468 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
469 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
470 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
471 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
472 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
473 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
474
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
475 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
476 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
477 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
478 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
479 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
480 }
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 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
483 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
484
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
485
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
486
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
487 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
488 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
489 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
490 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
491 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
492 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
493 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
494 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
495 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
496 };
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
497
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
498 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
499 {
a349f999e5e7 command line and JSON-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 // 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
501 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
502 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
503 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
504
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
505 // 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
506 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
507 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
508 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
509
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
510 // 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
511 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
512 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
513 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
514 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
515 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
516 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
517 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
518 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
519
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
520 int nDepth = wtx.GetDepthInMainChain();
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
521 if (nDepth < nMinDepth)
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
522 continue;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
523
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
524 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
525 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
526 // 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
527 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
528 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
529 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
530
57
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
531 tallyitem& item = mapTally[hash160];
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
532 item.nAmount += txout.nValue;
92b068d75526 run as daemon without GUI,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 50
diff changeset
533 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
534 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
535 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
536 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
537
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
538 // 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
539 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
540 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
541 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
542 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
543 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
544 {
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
545 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
546 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
547 uint160 hash160;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
548 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
549 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
550 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
551 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
552 continue;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
553
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
554 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
555 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
556 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
557 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
558 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
559 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
560 }
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
561
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
562 if (fByLabels)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
563 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
564 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
565 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
566 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
567 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
568 else
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
569 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
570 Object obj;
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
571 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
572 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
573 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
574 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
575 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
576 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
577 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
578 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
579
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
580 if (fByLabels)
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
581 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
582 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
583 {
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
584 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
585 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
586 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
587 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
588 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
589 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
590 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
591 }
a349f999e5e7 command line and JSON-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 }
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
593
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
594 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
595 }
a349f999e5e7 command line and JSON-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
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
597 Value listreceivedbyaddress(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
598 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
599 if (fHelp || params.size() > 2)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
600 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
601 "listreceivedbyaddress [minconf=1] [includeempty=false]\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
602 "[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
603 "[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
604 "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
605 " \"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
606 " \"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
607 " \"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
608 " \"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
609
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
610 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
611 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
612
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
613 Value listreceivedbylabel(const Array& params, bool fHelp)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
614 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
615 if (fHelp || params.size() > 2)
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
616 throw runtime_error(
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
617 "listreceivedbylabel [minconf=1] [includeempty=false]\n"
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
618 "[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
619 "[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
620 "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
621 " \"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
622 " \"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
623 " \"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
624
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
625 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
626 }
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
627
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
628
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
629
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
630
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
631
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
632
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
633
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
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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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 //
a349f999e5e7 command line and JSON-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 // 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
642 //
a349f999e5e7 command line and JSON-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 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
645 {
68
0fecfb941a51 automatically change displayed address whenever it receives anything,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 65
diff changeset
646 make_pair("help", &help),
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
647 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
648 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
649 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
650 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
651 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
652 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
653 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
654 make_pair("setgenerate", &setgenerate),
222
6ec15daf4b7a gethashespersec and added version and hashespersec to getinfo
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 221
diff changeset
655 make_pair("gethashespersec", &gethashespersec),
65
91fd50f5d311 better prevention of inventory relaying during initial download,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 63
diff changeset
656 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
657 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
658 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
659 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
660 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
661 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
662 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
663 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
664 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
665 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
666 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
667 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
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 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
670
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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 // 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
676 //
a349f999e5e7 command line and JSON-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 // 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
678 // 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
679 //
a349f999e5e7 command line and JSON-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
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
681 string HTTPPost(const string& strMsg, const map<string,string>& mapRequestHeaders)
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
682 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
683 ostringstream s;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
684 s << "POST / HTTP/1.1\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
685 << "User-Agent: json-rpc/1.0\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
686 << "Host: 127.0.0.1\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
687 << "Content-Type: application/json\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
688 << "Content-Length: " << strMsg.size() << "\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
689 << "Accept: application/json\r\n";
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
690 for (map<string,string>::const_iterator it = mapRequestHeaders.begin(); it != mapRequestHeaders.end(); ++it)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
691 s << it->first << ": " << it->second << "\r\n";
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
692 s << "\r\n" << strMsg;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
693
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
694 return s.str();
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
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
a349f999e5e7 command line and JSON-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 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
698 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
699 if (nStatus == 401)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
700 return "HTTP/1.0 401 Authorization Required\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
701 "Server: HTTPd/1.0\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
702 "Date: Sat, 08 Jul 2006 12:04:08 GMT\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
703 "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
704 "Content-Type: text/html\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
705 "Content-Length: 311\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
706 "\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
707 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
708 "\"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd\">\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
709 "<HTML>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
710 "<HEAD>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
711 "<TITLE>Error</TITLE>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
712 "<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
713 "</HEAD>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
714 "<BODY><H1>401 Unauthorized.</H1></BODY>\r\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
715 "</HTML>\r\n";
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
716 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
717 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
718 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
719 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
720 "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
721 "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
722 "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
723 "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
724 "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
725 "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
726 "\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
727 "%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
728 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
729 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
730 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
731 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
732 }
a349f999e5e7 command line and JSON-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
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
734 int ReadHTTPStatus(tcp::iostream& stream)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
735 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
736 string str;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
737 getline(stream, str);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
738 vector<string> vWords;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
739 boost::split(vWords, str, boost::is_any_of(" "));
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
740 int nStatus = atoi(vWords[1].c_str());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
741 return nStatus;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
742 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
743
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
744 int ReadHTTPHeader(tcp::iostream& stream, map<string, string>& mapHeadersRet)
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
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 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
747 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
748 {
a349f999e5e7 command line and JSON-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 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
750 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
751 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
752 break;
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
753 string::size_type nColon = str.find(":");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
754 if (nColon != string::npos)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
755 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
756 string strHeader = str.substr(0, nColon);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
757 boost::trim(strHeader);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
758 string strValue = str.substr(nColon+1);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
759 boost::trim(strValue);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
760 mapHeadersRet[strHeader] = strValue;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
761 if (strHeader == "Content-Length")
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
762 nLen = atoi(strValue.c_str());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
763 }
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
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 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
766 }
a349f999e5e7 command line and JSON-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
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
768 int ReadHTTP(tcp::iostream& stream, map<string, string>& mapHeadersRet, string& strMessageRet)
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
769 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
770 mapHeadersRet.clear();
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
771 strMessageRet = "";
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
772
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
773 // Read status
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
774 int nStatus = ReadHTTPStatus(stream);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
775
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
776 // Read header
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
777 int nLen = ReadHTTPHeader(stream, mapHeadersRet);
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
778 if (nLen <= 0)
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
779 return 500;
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
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 // 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
782 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
783 stream.read(&vch[0], nLen);
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
784 strMessageRet = string(vch.begin(), vch.end());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
785
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
786 return nStatus;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
787 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
788
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
789 string EncodeBase64(string s)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
790 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
791 BIO *b64, *bmem;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
792 BUF_MEM *bptr;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
793
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
794 b64 = BIO_new(BIO_f_base64());
206
02eaf9f99910 Gavin: BIO_FLAGS_BASE64_NO_NL
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 205
diff changeset
795 BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
796 bmem = BIO_new(BIO_s_mem());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
797 b64 = BIO_push(b64, bmem);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
798 BIO_write(b64, s.c_str(), s.size());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
799 BIO_flush(b64);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
800 BIO_get_mem_ptr(b64, &bptr);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
801
206
02eaf9f99910 Gavin: BIO_FLAGS_BASE64_NO_NL
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 205
diff changeset
802 string result(bptr->data, bptr->length);
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
803 BIO_free_all(b64);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
804
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
805 return result;
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
806 }
a349f999e5e7 command line and JSON-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
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
808 string DecodeBase64(string s)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
809 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
810 BIO *b64, *bmem;
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
811
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
812 char* buffer = static_cast<char*>(calloc(s.size(), sizeof(char)));
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
813
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
814 b64 = BIO_new(BIO_f_base64());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
815 BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
816 bmem = BIO_new_mem_buf(const_cast<char*>(s.c_str()), s.size());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
817 bmem = BIO_push(b64, bmem);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
818 BIO_read(bmem, buffer, s.size());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
819 BIO_free_all(bmem);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
820
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
821 string result(buffer);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
822 free(buffer);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
823 return result;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
824 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
825
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
826 bool HTTPAuthorized(map<string, string>& mapHeaders)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
827 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
828 string strAuth = mapHeaders["Authorization"];
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
829 if (strAuth.substr(0,6) != "Basic ")
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
830 return false;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
831 string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
832 string strUserPass = DecodeBase64(strUserPass64);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
833 string::size_type nColon = strUserPass.find(":");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
834 if (nColon == string::npos)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
835 return false;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
836 string strUser = strUserPass.substr(0, nColon);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
837 string strPassword = strUserPass.substr(nColon+1);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
838 return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
839 }
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
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 //
a349f999e5e7 command line and JSON-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 // 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
843 //
a349f999e5e7 command line and JSON-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 // 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
845 // 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
846 //
a349f999e5e7 command line and JSON-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
a349f999e5e7 command line and JSON-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 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
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 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
851 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
852 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
853 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
854 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
855 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
856
a349f999e5e7 command line and JSON-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 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
858 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
859 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
860 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
861 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
862 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
863 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
864 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
865 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
866 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
867 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
868
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
869
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
870
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
871
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
872 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
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 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
875 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
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 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
878 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
879 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
880 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
881 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
882 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
883 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
884 } 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
885 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
886 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
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 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
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
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
891 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
892 {
a349f999e5e7 command line and JSON-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 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
894
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
895 if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "")
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
896 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
897 string strWhatAmI = "To use bitcoind";
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
898 if (mapArgs.count("-server"))
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
899 strWhatAmI = strprintf(_("To use the %s option"), "\"-server\"");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
900 else if (mapArgs.count("-daemon"))
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
901 strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\"");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
902 PrintConsole(
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
903 _("Warning: %s, you must set rpcpassword=<password>\nin the configuration file: %s\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
904 "If the file does not exist, create it with owner-readable-only file permissions.\n"),
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
905 strWhatAmI.c_str(),
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
906 GetConfigFile().c_str());
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
907 CreateThread(Shutdown, NULL);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
908 return;
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
909 }
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
910
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
911 // 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
912 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
913 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
914 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
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 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
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 // 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
919 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
920 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
921 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
922 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
923 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
924 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
925 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
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 // 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
928 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
929 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
930
a349f999e5e7 command line and JSON-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 // Receive request
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
932 map<string, string> mapHeaders;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
933 string strRequest;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
934 ReadHTTP(stream, mapHeaders, strRequest);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
935
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
936 // Check authorization
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
937 if (mapHeaders.count("Authorization") == 0)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
938 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
939 stream << HTTPReply("", 401) << std::flush;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
940 continue;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
941 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
942 if (!HTTPAuthorized(mapHeaders))
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
943 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
944 // Deter brute-forcing short passwords
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
945 if (mapArgs["-rpcpassword"].size() < 15)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
946 Sleep(50);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
947
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
948 stream << HTTPReply("", 401) << std::flush;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
949 printf("ThreadRPCServer incorrect password attempt\n");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
950 continue;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
951 }
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
952
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
953 // 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
954 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
955 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
956 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
957 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
958 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
959 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
960 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
961 // 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
962 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
963 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
964 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
965 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
966 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
967 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
968 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
969
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
970 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
971 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
972 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
973
203
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
974 printf("ThreadRPCServer method=%s\n", strMethod.c_str());
091b5b2c8349 minor UI tweaks, removed some outdated txt files,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 194
diff changeset
975
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 207
diff changeset
976 // Observe lockdown
225
f38021811428 fix -datadir=./subdir relative path,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 224
diff changeset
977 if (IsLockdown() && !mapArgs.count("-overridesafety") && strMethod != "help" && strMethod != "stop" && strMethod != "getgenerate" && strMethod != "setgenerate")
f38021811428 fix -datadir=./subdir relative path,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 224
diff changeset
978 throw runtime_error("WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.");
217
a00eec2495db new safety feature displays a warning message and locks down RPC if it detects a problem that may require an upgrade
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 207
diff changeset
979
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
980 // 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
981 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
982 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
983 throw runtime_error("Method not found.");
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
984 Value result = (*(*mi).second)(params, false);
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
985
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
986 // 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
987 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
988 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
989 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
990 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
991 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
992 // 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
993 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
994 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
995 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
996 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
997 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
998 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
999 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1000 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1001
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1002
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1003
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1004
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1005 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
1006 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1007 if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "")
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1008 throw runtime_error(strprintf(
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1009 _("You must set rpcpassword=<password> in the configuration file:\n%s\n"
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1010 "If the file does not exist, create it with owner-readable-only file permissions."),
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1011 GetConfigFile().c_str()));
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1012
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
1013 // 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
1014 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
1015 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
1016 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
1017
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1018 // HTTP basic authentication
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1019 string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1020 map<string, string> mapRequestHeaders;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1021 mapRequestHeaders["Authorization"] = string("Basic ") + strUserPass64;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1022
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
1023 // 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
1024 string strRequest = JSONRPCRequest(strMethod, params, 1);
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1025 string strPost = HTTPPost(strRequest, mapRequestHeaders);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1026 stream << strPost << std::flush;
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
1027
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1028 // Receive reply
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1029 map<string, string> mapHeaders;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1030 string strReply;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1031 int nStatus = ReadHTTP(stream, mapHeaders, strReply);
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1032 if (nStatus == 401)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1033 throw runtime_error("incorrect rpcuser or rpcpassword (authorization failed)");
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1034 else if (nStatus >= 400 && nStatus != 500)
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1035 throw runtime_error(strprintf("server returned HTTP error %d", nStatus));
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1036 else if (strReply.empty())
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
1037 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
1038
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1039 // 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
1040 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
1041 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
1042 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
1043 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
1044 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
1045 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
1046
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1047 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
1048 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
1049 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
1050
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1051 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
1052 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
1053 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
1054 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
1055 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
1056 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1057
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1058
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1059
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1060
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1061 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
1062 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
1063 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1064 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
1065 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1066 // 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
1067 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
1068 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
1069 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
1070 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
1071 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1072 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
1073 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1074 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
1075 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1076 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1077
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1078 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
1079 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1080 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
1081 {
204
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1082 // Skip switches
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1083 while (argc > 1 && IsSwitchChar(argv[1][0]))
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1084 {
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1085 argc--;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1086 argv++;
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1087 }
80b92dbd504a Gavin Andresen's JSON-RPC HTTP authentication,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 203
diff changeset
1088
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1089 // Method
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
1090 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
1091 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
1092 string strMethod = argv[1];
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1093
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1094 // Parameters default to strings
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1095 Array params;
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1096 for (int i = 2; i < argc; i++)
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1097 params.push_back(argv[i]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1098 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
1099
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1100 //
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1101 // Special case non-string parameter types
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1102 //
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1103 if (strMethod == "setgenerate" && n > 0) ConvertTo<bool>(params[0]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1104 if (strMethod == "setgenerate" && n > 1) ConvertTo<boost::int64_t>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1105 if (strMethod == "sendtoaddress" && n > 1) ConvertTo<double>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1106 if (strMethod == "listtransactions" && n > 0) ConvertTo<boost::int64_t>(params[0]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1107 if (strMethod == "listtransactions" && n > 1) ConvertTo<bool>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1108 if (strMethod == "getamountreceived" && n > 1) ConvertTo<boost::int64_t>(params[1]); // deprecated
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1109 if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo<boost::int64_t>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1110 if (strMethod == "getreceivedbylabel" && n > 1) ConvertTo<boost::int64_t>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1111 if (strMethod == "getallreceived" && n > 0) ConvertTo<boost::int64_t>(params[0]); // deprecated
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1112 if (strMethod == "getallreceived" && n > 1) ConvertTo<bool>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1113 if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1114 if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo<bool>(params[1]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1115 if (strMethod == "listreceivedbylabel" && n > 0) ConvertTo<boost::int64_t>(params[0]);
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1116 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
1117
221
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1118 // Execute
0462c7ba5a60 json-spirit print reals with 8 decimal places,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 217
diff changeset
1119 Value result = CallRPC(strMethod, 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
1120
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1121 // 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
1122 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
1123 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
1124 {
207
e981ed3b15d2 bitcoind now compiles without wxWidgets or wxBase
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 206
diff changeset
1125 #if defined(__WXMSW__) && defined(GUI)
194
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1126 // Windows GUI apps can't print to command line,
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1127 // so settle for a message box yuck
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1128 MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1129 #else
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1130 fprintf(stdout, "%s\n", strResult.c_str());
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1131 #endif
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
1132 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1133 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
1134 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1135 catch (std::exception& e) {
207
e981ed3b15d2 bitcoind now compiles without wxWidgets or wxBase
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 206
diff changeset
1136 #if defined(__WXMSW__) && defined(GUI)
194
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1137 MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1138 #else
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1139 fprintf(stderr, "error: %s\n", e.what());
234c055789ec Laszlo's fix to make generate threads idle priority on Linux,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 68
diff changeset
1140 #endif
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
1141 } 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
1142 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
1143 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1144 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
1145 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1146
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1147
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1148
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1149
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1150 #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
1151 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
1152 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1153 #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
1154 // 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
1155 _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
1156 _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
1157 #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
1158 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
1159 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
1160 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
1161
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1162 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
1163 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1164 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
1165 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1166 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
1167 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
1168 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1169 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
1170 {
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1171 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
1172 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1173 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1174 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
1175 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
1176 } 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
1177 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
1178 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1179 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
1180 }
a349f999e5e7 command line and JSON-RPC first draft, requires Boost 1.35 or higher for boost::asio,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents:
diff changeset
1181 #endif