/root/bitcoin/src/rpc/protocol.h
Line | Count | Source |
1 | | // Copyright (c) 2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present The Bitcoin Core developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | #ifndef BITCOIN_RPC_PROTOCOL_H |
7 | | #define BITCOIN_RPC_PROTOCOL_H |
8 | | |
9 | | //! HTTP status codes |
10 | | enum HTTPStatusCode |
11 | | { |
12 | | HTTP_OK = 200, |
13 | | HTTP_NO_CONTENT = 204, |
14 | | HTTP_BAD_REQUEST = 400, |
15 | | HTTP_UNAUTHORIZED = 401, |
16 | | HTTP_FORBIDDEN = 403, |
17 | | HTTP_NOT_FOUND = 404, |
18 | | HTTP_BAD_METHOD = 405, |
19 | | HTTP_INTERNAL_SERVER_ERROR = 500, |
20 | | HTTP_SERVICE_UNAVAILABLE = 503, |
21 | | }; |
22 | | |
23 | | //! Mapping of HTTP status codes to short string explanation. |
24 | | //! Copied from libevent http.c success_phrases[] and client_error_phrases[] |
25 | | inline std::string_view HTTPStatusReasonString(HTTPStatusCode code) |
26 | 0 | { |
27 | 0 | switch (code) { |
28 | 0 | case HTTP_OK: return "OK"; |
29 | 0 | case HTTP_NO_CONTENT: return "No Content"; |
30 | 0 | case HTTP_BAD_REQUEST: return "Bad Request"; |
31 | 0 | case HTTP_UNAUTHORIZED: return "Unauthorized"; |
32 | 0 | case HTTP_FORBIDDEN: return "Forbidden"; |
33 | 0 | case HTTP_NOT_FOUND: return "Not Found"; |
34 | 0 | case HTTP_BAD_METHOD: return "Method Not Allowed"; |
35 | 0 | case HTTP_INTERNAL_SERVER_ERROR: return "Internal Server Error"; |
36 | 0 | case HTTP_SERVICE_UNAVAILABLE: return "Service Unavailable"; |
37 | 0 | } |
38 | | |
39 | | // Reason phrases are optional and may be replaced by local variants. |
40 | | // https://httpwg.org/specs/rfc9110.html#rfc.section.15.1 |
41 | 0 | return ""; |
42 | 0 | } |
43 | | |
44 | | //! Bitcoin RPC error codes |
45 | | enum RPCErrorCode |
46 | | { |
47 | | //! Standard JSON-RPC 2.0 errors |
48 | | // RPC_INVALID_REQUEST is internally mapped to HTTP_BAD_REQUEST (400). |
49 | | // It should not be used for application-layer errors. |
50 | | RPC_INVALID_REQUEST = -32600, |
51 | | // RPC_METHOD_NOT_FOUND is internally mapped to HTTP_NOT_FOUND (404). |
52 | | // It should not be used for application-layer errors. |
53 | | RPC_METHOD_NOT_FOUND = -32601, |
54 | | RPC_INVALID_PARAMS = -32602, |
55 | | // RPC_INTERNAL_ERROR should only be used for genuine errors in bitcoind |
56 | | // (for example datadir corruption). |
57 | | RPC_INTERNAL_ERROR = -32603, |
58 | | RPC_PARSE_ERROR = -32700, |
59 | | |
60 | | //! General application defined errors |
61 | | RPC_MISC_ERROR = -1, //!< std::exception thrown in command handling |
62 | | RPC_TYPE_ERROR = -3, //!< Unexpected type was passed as parameter |
63 | | RPC_INVALID_ADDRESS_OR_KEY = -5, //!< Invalid address or key |
64 | | RPC_OUT_OF_MEMORY = -7, //!< Ran out of memory during operation |
65 | | RPC_INVALID_PARAMETER = -8, //!< Invalid, missing or duplicate parameter |
66 | | RPC_DATABASE_ERROR = -20, //!< Database error |
67 | | RPC_DESERIALIZATION_ERROR = -22, //!< Error parsing or validating structure in raw format |
68 | | RPC_VERIFY_ERROR = -25, //!< General error during transaction or block submission |
69 | | RPC_VERIFY_REJECTED = -26, //!< Transaction or block was rejected by network rules |
70 | | RPC_VERIFY_ALREADY_IN_UTXO_SET = -27, //!< Transaction already in utxo set |
71 | | RPC_IN_WARMUP = -28, //!< Client still warming up |
72 | | RPC_METHOD_DEPRECATED = -32, //!< RPC method is deprecated |
73 | | |
74 | | //! Aliases for backward compatibility |
75 | | RPC_TRANSACTION_ERROR = RPC_VERIFY_ERROR, |
76 | | RPC_TRANSACTION_REJECTED = RPC_VERIFY_REJECTED, |
77 | | |
78 | | //! P2P client errors |
79 | | RPC_CLIENT_NOT_CONNECTED = -9, //!< Bitcoin is not connected |
80 | | RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, //!< Still downloading initial blocks |
81 | | RPC_CLIENT_NODE_ALREADY_ADDED = -23, //!< Node is already added |
82 | | RPC_CLIENT_NODE_NOT_ADDED = -24, //!< Node has not been added before |
83 | | RPC_CLIENT_NODE_NOT_CONNECTED = -29, //!< Node to disconnect not found in connected nodes |
84 | | RPC_CLIENT_INVALID_IP_OR_SUBNET = -30, //!< Invalid IP/Subnet |
85 | | RPC_CLIENT_P2P_DISABLED = -31, //!< No valid connection manager instance found |
86 | | RPC_CLIENT_NODE_CAPACITY_REACHED= -34, //!< Max number of outbound or block-relay connections already open |
87 | | |
88 | | //! Chain errors |
89 | | RPC_CLIENT_MEMPOOL_DISABLED = -33, //!< No mempool instance found |
90 | | |
91 | | //! Wallet errors |
92 | | RPC_WALLET_ERROR = -4, //!< Unspecified problem with wallet (key not found etc.) |
93 | | RPC_WALLET_INSUFFICIENT_FUNDS = -6, //!< Not enough funds in wallet or account |
94 | | RPC_WALLET_INVALID_LABEL_NAME = -11, //!< Invalid label name |
95 | | RPC_WALLET_KEYPOOL_RAN_OUT = -12, //!< Keypool ran out, call keypoolrefill first |
96 | | RPC_WALLET_UNLOCK_NEEDED = -13, //!< Enter the wallet passphrase with walletpassphrase first |
97 | | RPC_WALLET_PASSPHRASE_INCORRECT = -14, //!< The wallet passphrase entered was incorrect |
98 | | RPC_WALLET_WRONG_ENC_STATE = -15, //!< Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.) |
99 | | RPC_WALLET_ENCRYPTION_FAILED = -16, //!< Failed to encrypt the wallet |
100 | | RPC_WALLET_ALREADY_UNLOCKED = -17, //!< Wallet is already unlocked |
101 | | RPC_WALLET_NOT_FOUND = -18, //!< Invalid wallet specified |
102 | | RPC_WALLET_NOT_SPECIFIED = -19, //!< No wallet specified (error when there are multiple wallets loaded) |
103 | | RPC_WALLET_ALREADY_LOADED = -35, //!< This same wallet is already loaded |
104 | | RPC_WALLET_ALREADY_EXISTS = -36, //!< There is already a wallet with the same name |
105 | | |
106 | | //! Backwards compatible aliases |
107 | | RPC_WALLET_INVALID_ACCOUNT_NAME = RPC_WALLET_INVALID_LABEL_NAME, |
108 | | |
109 | | //! Unused reserved codes, kept around for backwards compatibility. Do not reuse. |
110 | | RPC_FORBIDDEN_BY_SAFE_MODE = -2, //!< Server is in safe mode, and command is not allowed in safe mode |
111 | | }; |
112 | | |
113 | | #endif // BITCOIN_RPC_PROTOCOL_H |