]>
Commit | Line | Data |
---|---|---|
8bd66202 | 1 | // Copyright (c) 2010 Satoshi Nakamoto |
57702541 | 2 | // Copyright (c) 2009-2014 The Bitcoin developers |
8bd66202 | 3 | // Distributed under the MIT/X11 software license, see the accompanying |
3a25a2b9 | 4 | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
8bd66202 | 5 | |
fb78cc23 | 6 | #ifndef _BITCOINRPC_SERVER_H_ |
093303a8 | 7 | #define _BITCOINRPC_SERVER_H_ |
e46704dd | 8 | |
51ed9ec9 | 9 | #include "uint256.h" |
fb78cc23 | 10 | #include "rpcprotocol.h" |
51ed9ec9 | 11 | |
899d373b | 12 | #include <list> |
e46704dd | 13 | #include <map> |
51ed9ec9 BD |
14 | #include <stdint.h> |
15 | #include <string> | |
c625ae04 | 16 | |
e46704dd | 17 | #include "json/json_spirit_reader_template.h" |
e46704dd | 18 | #include "json/json_spirit_utils.h" |
51ed9ec9 | 19 | #include "json/json_spirit_writer_template.h" |
e46704dd | 20 | |
51ed9ec9 | 21 | class CBlockIndex; |
21bf3d25 | 22 | class CNetAddr; |
480d44bd | 23 | |
ed5769f5 JG |
24 | class AcceptedConnection |
25 | { | |
26 | public: | |
27 | virtual ~AcceptedConnection() {} | |
28 | ||
29 | virtual std::iostream& stream() = 0; | |
30 | virtual std::string peer_address_to_string() const = 0; | |
31 | virtual void close() = 0; | |
32 | }; | |
33 | ||
a8db31c8 | 34 | /* Start RPC threads */ |
21eb5ada | 35 | void StartRPCThreads(); |
a8db31c8 WL |
36 | /* Alternative to StartRPCThreads for the GUI, when no server is |
37 | * used. The RPC thread in this case is only used to handle timeouts. | |
38 | * If real RPC threads have already been started this is a no-op. | |
39 | */ | |
40 | void StartDummyRPCThread(); | |
41 | /* Stop RPC threads */ | |
21eb5ada | 42 | void StopRPCThreads(); |
ff6a7af1 LD |
43 | /* Query whether RPC is running */ |
44 | bool IsRPCRunning(); | |
460c51fd | 45 | |
899d373b GA |
46 | /* |
47 | Type-check arguments; throws JSONRPCError if wrong type given. Does not check that | |
48 | the right number of arguments are passed, just that any passed are the correct type. | |
49 | Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type)); | |
50 | */ | |
51 | void RPCTypeCheck(const json_spirit::Array& params, | |
cc6dfd1f | 52 | const std::list<json_spirit::Value_type>& typesExpected, bool fAllowNull=false); |
899d373b GA |
53 | /* |
54 | Check for expected keys/value types in an Object. | |
55 | Use like: RPCTypeCheck(object, boost::assign::map_list_of("name", str_type)("value", int_type)); | |
56 | */ | |
57 | void RPCTypeCheck(const json_spirit::Object& o, | |
cc6dfd1f | 58 | const std::map<std::string, json_spirit::Value_type>& typesExpected, bool fAllowNull=false); |
899d373b | 59 | |
92f2c1fe GA |
60 | /* |
61 | Run func nSeconds from now. Uses boost deadline timers. | |
62 | Overrides previous timer <name> (if any). | |
63 | */ | |
51ed9ec9 | 64 | void RPCRunLater(const std::string& name, boost::function<void(void)> func, int64_t nSeconds); |
92f2c1fe | 65 | |
21bf3d25 WL |
66 | //! Convert boost::asio address to CNetAddr |
67 | extern CNetAddr BoostAsioToCNetAddr(boost::asio::ip::address address); | |
68 | ||
e46704dd PW |
69 | typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp); |
70 | ||
71 | class CRPCCommand | |
72 | { | |
73 | public: | |
6b5b7cbf | 74 | std::string category; |
e46704dd PW |
75 | std::string name; |
76 | rpcfn_type actor; | |
77 | bool okSafeMode; | |
10ef3611 | 78 | bool threadSafe; |
b0730874 | 79 | bool reqWallet; |
e46704dd PW |
80 | }; |
81 | ||
460c51fd WL |
82 | /** |
83 | * Bitcoin RPC command dispatcher. | |
84 | */ | |
e46704dd PW |
85 | class CRPCTable |
86 | { | |
87 | private: | |
88 | std::map<std::string, const CRPCCommand*> mapCommands; | |
89 | public: | |
90 | CRPCTable(); | |
91 | const CRPCCommand* operator[](std::string name) const; | |
92 | std::string help(std::string name) const; | |
460c51fd WL |
93 | |
94 | /** | |
95 | * Execute a method. | |
96 | * @param method Method to execute | |
97 | * @param params Array of arguments (JSON objects) | |
98 | * @returns Result of the call. | |
99 | * @throws an exception (json_spirit::Value) when an error happens. | |
100 | */ | |
101 | json_spirit::Value execute(const std::string &method, const json_spirit::Array ¶ms) const; | |
e46704dd PW |
102 | }; |
103 | ||
104 | extern const CRPCTable tableRPC; | |
d98bf10f | 105 | |
463c9710 PT |
106 | // |
107 | // Utilities: convert hex-encoded Values | |
108 | // (throws error if not hex). | |
109 | // | |
110 | extern uint256 ParseHashV(const json_spirit::Value& v, std::string strName); | |
111 | extern uint256 ParseHashO(const json_spirit::Object& o, std::string strKey); | |
112 | extern std::vector<unsigned char> ParseHexV(const json_spirit::Value& v, std::string strName); | |
113 | extern std::vector<unsigned char> ParseHexO(const json_spirit::Object& o, std::string strKey); | |
114 | ||
d98bf10f WL |
115 | extern void InitRPCMining(); |
116 | extern void ShutdownRPCMining(); | |
e46704dd | 117 | |
51ed9ec9 BD |
118 | extern int64_t nWalletUnlockTime; |
119 | extern int64_t AmountFromValue(const json_spirit::Value& value); | |
120 | extern json_spirit::Value ValueFromAmount(int64_t amount); | |
c625ae04 | 121 | extern double GetDifficulty(const CBlockIndex* blockindex = NULL); |
c625ae04 | 122 | extern std::string HelpRequiringPassphrase(); |
a6099ef3 | 123 | extern std::string HelpExampleCli(std::string methodname, std::string args); |
124 | extern std::string HelpExampleRpc(std::string methodname, std::string args); | |
125 | ||
c625ae04 | 126 | extern void EnsureWalletIsUnlocked(); |
e3bc5698 JG |
127 | |
128 | extern json_spirit::Value getconnectioncount(const json_spirit::Array& params, bool fHelp); // in rpcnet.cpp | |
129 | extern json_spirit::Value getpeerinfo(const json_spirit::Array& params, bool fHelp); | |
971bb3e9 | 130 | extern json_spirit::Value ping(const json_spirit::Array& params, bool fHelp); |
72a348fd | 131 | extern json_spirit::Value addnode(const json_spirit::Array& params, bool fHelp); |
67a11bd6 | 132 | extern json_spirit::Value getaddednodeinfo(const json_spirit::Array& params, bool fHelp); |
ce14345a | 133 | extern json_spirit::Value getnettotals(const json_spirit::Array& params, bool fHelp); |
4e534aa9 | 134 | |
e3bc5698 JG |
135 | extern json_spirit::Value dumpprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp |
136 | extern json_spirit::Value importprivkey(const json_spirit::Array& params, bool fHelp); | |
c8988460 | 137 | extern json_spirit::Value importaddress(const json_spirit::Array& params, bool fHelp); |
4e534aa9 PW |
138 | extern json_spirit::Value dumpwallet(const json_spirit::Array& params, bool fHelp); |
139 | extern json_spirit::Value importwallet(const json_spirit::Array& params, bool fHelp); | |
e3bc5698 JG |
140 | |
141 | extern json_spirit::Value getgenerate(const json_spirit::Array& params, bool fHelp); // in rpcmining.cpp | |
142 | extern json_spirit::Value setgenerate(const json_spirit::Array& params, bool fHelp); | |
d64eef48 | 143 | extern json_spirit::Value getnetworkhashps(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
144 | extern json_spirit::Value gethashespersec(const json_spirit::Array& params, bool fHelp); |
145 | extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp); | |
2a72d459 | 146 | extern json_spirit::Value prioritisetransaction(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
147 | extern json_spirit::Value getblocktemplate(const json_spirit::Array& params, bool fHelp); |
148 | extern json_spirit::Value submitblock(const json_spirit::Array& params, bool fHelp); | |
171ca774 GA |
149 | extern json_spirit::Value estimatefee(const json_spirit::Array& params, bool fHelp); |
150 | extern json_spirit::Value estimatepriority(const json_spirit::Array& params, bool fHelp); | |
e3bc5698 JG |
151 | |
152 | extern json_spirit::Value getnewaddress(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp | |
153 | extern json_spirit::Value getaccountaddress(const json_spirit::Array& params, bool fHelp); | |
e5e9904c | 154 | extern json_spirit::Value getrawchangeaddress(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
155 | extern json_spirit::Value setaccount(const json_spirit::Array& params, bool fHelp); |
156 | extern json_spirit::Value getaccount(const json_spirit::Array& params, bool fHelp); | |
157 | extern json_spirit::Value getaddressesbyaccount(const json_spirit::Array& params, bool fHelp); | |
158 | extern json_spirit::Value sendtoaddress(const json_spirit::Array& params, bool fHelp); | |
159 | extern json_spirit::Value signmessage(const json_spirit::Array& params, bool fHelp); | |
160 | extern json_spirit::Value verifymessage(const json_spirit::Array& params, bool fHelp); | |
161 | extern json_spirit::Value getreceivedbyaddress(const json_spirit::Array& params, bool fHelp); | |
162 | extern json_spirit::Value getreceivedbyaccount(const json_spirit::Array& params, bool fHelp); | |
163 | extern json_spirit::Value getbalance(const json_spirit::Array& params, bool fHelp); | |
6027b460 | 164 | extern json_spirit::Value getunconfirmedbalance(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
165 | extern json_spirit::Value movecmd(const json_spirit::Array& params, bool fHelp); |
166 | extern json_spirit::Value sendfrom(const json_spirit::Array& params, bool fHelp); | |
167 | extern json_spirit::Value sendmany(const json_spirit::Array& params, bool fHelp); | |
168 | extern json_spirit::Value addmultisigaddress(const json_spirit::Array& params, bool fHelp); | |
34226be7 | 169 | extern json_spirit::Value createmultisig(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
170 | extern json_spirit::Value listreceivedbyaddress(const json_spirit::Array& params, bool fHelp); |
171 | extern json_spirit::Value listreceivedbyaccount(const json_spirit::Array& params, bool fHelp); | |
172 | extern json_spirit::Value listtransactions(const json_spirit::Array& params, bool fHelp); | |
22dfd735 | 173 | extern json_spirit::Value listaddressgroupings(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
174 | extern json_spirit::Value listaccounts(const json_spirit::Array& params, bool fHelp); |
175 | extern json_spirit::Value listsinceblock(const json_spirit::Array& params, bool fHelp); | |
176 | extern json_spirit::Value gettransaction(const json_spirit::Array& params, bool fHelp); | |
177 | extern json_spirit::Value backupwallet(const json_spirit::Array& params, bool fHelp); | |
178 | extern json_spirit::Value keypoolrefill(const json_spirit::Array& params, bool fHelp); | |
179 | extern json_spirit::Value walletpassphrase(const json_spirit::Array& params, bool fHelp); | |
180 | extern json_spirit::Value walletpassphrasechange(const json_spirit::Array& params, bool fHelp); | |
181 | extern json_spirit::Value walletlock(const json_spirit::Array& params, bool fHelp); | |
182 | extern json_spirit::Value encryptwallet(const json_spirit::Array& params, bool fHelp); | |
183 | extern json_spirit::Value validateaddress(const json_spirit::Array& params, bool fHelp); | |
c625ae04 | 184 | extern json_spirit::Value getinfo(const json_spirit::Array& params, bool fHelp); |
a00ebb51 | 185 | extern json_spirit::Value getwalletinfo(const json_spirit::Array& params, bool fHelp); |
d387b8ec WL |
186 | extern json_spirit::Value getblockchaininfo(const json_spirit::Array& params, bool fHelp); |
187 | extern json_spirit::Value getnetworkinfo(const json_spirit::Array& params, bool fHelp); | |
e3bc5698 JG |
188 | |
189 | extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp | |
190 | extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp); | |
fdbb537d JG |
191 | extern json_spirit::Value lockunspent(const json_spirit::Array& params, bool fHelp); |
192 | extern json_spirit::Value listlockunspent(const json_spirit::Array& params, bool fHelp); | |
e3bc5698 JG |
193 | extern json_spirit::Value createrawtransaction(const json_spirit::Array& params, bool fHelp); |
194 | extern json_spirit::Value decoderawtransaction(const json_spirit::Array& params, bool fHelp); | |
be066fad | 195 | extern json_spirit::Value decodescript(const json_spirit::Array& params, bool fHelp); |
e3bc5698 JG |
196 | extern json_spirit::Value signrawtransaction(const json_spirit::Array& params, bool fHelp); |
197 | extern json_spirit::Value sendrawtransaction(const json_spirit::Array& params, bool fHelp); | |
198 | ||
c625ae04 | 199 | extern json_spirit::Value getblockcount(const json_spirit::Array& params, bool fHelp); // in rpcblockchain.cpp |
091aa8da | 200 | extern json_spirit::Value getbestblockhash(const json_spirit::Array& params, bool fHelp); |
c625ae04 JG |
201 | extern json_spirit::Value getdifficulty(const json_spirit::Array& params, bool fHelp); |
202 | extern json_spirit::Value settxfee(const json_spirit::Array& params, bool fHelp); | |
6f2c26a4 | 203 | extern json_spirit::Value getmempoolinfo(const json_spirit::Array& params, bool fHelp); |
c625ae04 JG |
204 | extern json_spirit::Value getrawmempool(const json_spirit::Array& params, bool fHelp); |
205 | extern json_spirit::Value getblockhash(const json_spirit::Array& params, bool fHelp); | |
206 | extern json_spirit::Value getblock(const json_spirit::Array& params, bool fHelp); | |
beeb5761 PW |
207 | extern json_spirit::Value gettxoutsetinfo(const json_spirit::Array& params, bool fHelp); |
208 | extern json_spirit::Value gettxout(const json_spirit::Array& params, bool fHelp); | |
f5906533 | 209 | extern json_spirit::Value verifychain(const json_spirit::Array& params, bool fHelp); |
b33bd7a3 | 210 | extern json_spirit::Value getchaintips(const json_spirit::Array& params, bool fHelp); |
c625ae04 | 211 | |
093303a8 | 212 | #endif // _BITCOINRPC_SERVER_H_ |