rippled
ErrorCodes.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012 - 2019 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_PROTOCOL_ERRORCODES_H_INCLUDED
21 #define RIPPLE_PROTOCOL_ERRORCODES_H_INCLUDED
22 
23 #include <ripple/json/json_value.h>
24 #include <ripple/protocol/jss.h>
25 
26 namespace ripple {
27 
28 // VFALCO NOTE These are outside the RPC namespace
29 
30 // NOTE: Although the precise numeric values of these codes were never
31 // intended to be stable, several API endpoints include the numeric values.
32 // Some users came to rely on the values, meaning that renumbering would be
33 // a breaking change for those users.
34 //
35 // We therefore treat the range of values as stable although they are not
36 // and are subject to change.
37 //
38 // Please only append to this table. Do not "fill-in" gaps and do not re-use
39 // or repurpose error code values.
41 {
42  // -1 represents codes not listed in this enumeration
43  rpcUNKNOWN = -1,
44 
46 
50 
51  // Misc failure
52  // unused 4,
53  // unused 5,
56  // unused 8,
63 
64  // Networking
68 
69  // Ledger state
70  // unused 18,
72  // unused 20,
76  // unused 24,
77  // unused 25,
78  // unused 26,
79  // unused 27,
80  // unused 28,
82  // unused 30,
83 
84  // Malformed command
88 
89  // Bad parameter
94  // unused 38,
95  // unused 39,
110  // unused 54,
111  // unused 55,
112  // unused 56,
115  // unused 59,
116  // unused 60,
117  // unused 61,
124  // unused 68,
129 
130  // Internal error (should never happen)
131  rpcINTERNAL = 73, // Generic internal error.
138  rpcLAST = rpcINVALID_LGR_RANGE // rpcLAST should always equal the last code.=
139 };
140 
146 {
149 };
150 
151 //------------------------------------------------------------------------------
152 
153 // VFALCO NOTE these should probably not be in the RPC namespace.
154 
155 namespace RPC {
156 
158 struct ErrorInfo
159 {
160  // Default ctor needed to produce an empty std::array during constexpr eval.
161  constexpr ErrorInfo ()
162  : code (rpcUNKNOWN)
163  , token ("unknown")
164  , message ("An unknown error code.")
165  { }
166 
167  constexpr ErrorInfo (error_code_i code_, char const* token_,
168  char const* message_)
169  : code (code_)
170  , token (token_)
171  , message (message_)
172  { }
173 
177 };
178 
181 
184 template <class JsonValue>
185 void inject_error (error_code_i code, JsonValue& json)
186 {
187  ErrorInfo const& info (get_error_info (code));
188  json [jss::error] = info.token;
189  json [jss::error_code] = info.code;
190  json [jss::error_message] = info.message;
191 }
192 
193 template <class JsonValue>
194 void inject_error (int code, JsonValue& json)
195 {
196  inject_error (error_code_i (code), json);
197 }
198 
199 template <class JsonValue>
201  error_code_i code, std::string const& message, JsonValue& json)
202 {
203  ErrorInfo const& info (get_error_info (code));
204  json [jss::error] = info.token;
205  json [jss::error_code] = info.code;
206  json [jss::error_message] = message;
207 }
208 
214 Json::Value make_error (error_code_i code, std::string const& message);
219 inline Json::Value make_param_error (std::string const& message)
220 {
221  return make_error (rpcINVALID_PARAMS, message);
222 }
223 
225 {
226  return "Missing field '" + name + "'.";
227 }
228 
230 {
231  return make_param_error (missing_field_message (name));
232 }
233 
235 {
236  return missing_field_error (std::string (name));
237 }
238 
240 {
241  return "Invalid field '" + name + "', not object.";
242 }
243 
245 {
246  return make_param_error (object_field_message (name));
247 }
248 
250 {
251  return object_field_error (std::string (name));
252 }
253 
255 {
256  return "Invalid field '" + name + "'.";
257 }
258 
260 {
261  return invalid_field_message (std::string(name));
262 }
263 
265 {
266  return make_param_error (invalid_field_message (name));
267 }
268 
270 {
271  return invalid_field_error (std::string (name));
272 }
273 
275  std::string const& name, std::string const& type)
276 {
277  return "Invalid field '" + name + "', not " + type + ".";
278 }
279 
281  Json::StaticString name, std::string const& type)
282 {
283  return expected_field_message (std::string (name), type);
284 }
285 
287  std::string const& name, std::string const& type)
288 {
289  return make_param_error (expected_field_message (name, type));
290 }
291 
293  Json::StaticString name, std::string const& type)
294 {
295  return expected_field_error (std::string (name), type);
296 }
297 
299 {
300  return make_param_error ("not a validator");
301 }
302 
306 bool contains_error (Json::Value const& json);
307 
308 } // RPC
309 
312 
313 }
314 
315 #endif
ripple::rpcNO_NETWORK
@ rpcNO_NETWORK
Definition: ErrorCodes.h:67
ripple::rpcDB_DESERIALIZATION
@ rpcDB_DESERIALIZATION
Definition: ErrorCodes.h:135
ripple::rpcDST_AMT_MALFORMED
@ rpcDST_AMT_MALFORMED
Definition: ErrorCodes.h:107
ripple::rpcNOT_SUPPORTED
@ rpcNOT_SUPPORTED
Definition: ErrorCodes.h:133
ripple::rpcLGR_IDXS_INVALID
@ rpcLGR_IDXS_INVALID
Definition: ErrorCodes.h:113
std::string
STL class.
ripple::rpcINVALID_PARAMS
@ rpcINVALID_PARAMS
Definition: ErrorCodes.h:85
ripple::RPC::get_error_info
ErrorInfo const & get_error_info(error_code_i code)
Returns an ErrorInfo that reflects the error code.
Definition: ErrorCodes.cpp:175
ripple::RPC::missing_field_message
std::string missing_field_message(std::string const &name)
Definition: ErrorCodes.h:224
ripple::rpcErrorString
std::string rpcErrorString(Json::Value const &jv)
Returns a single string with the contents of an RPC error.
Definition: ErrorCodes.cpp:205
ripple::rpcSRC_ACT_NOT_FOUND
@ rpcSRC_ACT_NOT_FOUND
Definition: ErrorCodes.h:123
ripple::rpcJSON_RPC
@ rpcJSON_RPC
Definition: ErrorCodes.h:48
ripple::rpcSIGNING_MALFORMED
@ rpcSIGNING_MALFORMED
Definition: ErrorCodes.h:119
ripple::rpcNOT_READY
@ rpcNOT_READY
Definition: ErrorCodes.h:61
ripple::rpcEXCESSIVE_LGR_RANGE
@ rpcEXCESSIVE_LGR_RANGE
Definition: ErrorCodes.h:136
ripple::rpcTOO_BUSY
@ rpcTOO_BUSY
Definition: ErrorCodes.h:57
ripple::rpcATX_DEPRECATED
@ rpcATX_DEPRECATED
Definition: ErrorCodes.h:128
ripple::rpcLGR_NOT_FOUND
@ rpcLGR_NOT_FOUND
Definition: ErrorCodes.h:73
ripple::RPC::object_field_error
Json::Value object_field_error(std::string const &name)
Definition: ErrorCodes.h:244
ripple::error_code_i
error_code_i
Definition: ErrorCodes.h:40
ripple::RPC::expected_field_error
Json::Value expected_field_error(std::string const &name, std::string const &type)
Definition: ErrorCodes.h:286
ripple::RPC::missing_field_error
Json::Value missing_field_error(std::string const &name)
Definition: ErrorCodes.h:229
ripple::rpcAMENDMENT_BLOCKED
@ rpcAMENDMENT_BLOCKED
Definition: ErrorCodes.h:62
ripple::RPC::ErrorInfo::message
Json::StaticString message
Definition: ErrorCodes.h:176
ripple::RPC::expected_field_message
std::string expected_field_message(std::string const &name, std::string const &type)
Definition: ErrorCodes.h:274
ripple::warnRPC_AMENDMENT_BLOCKED
@ warnRPC_AMENDMENT_BLOCKED
Definition: ErrorCodes.h:148
ripple::rpcSUCCESS
@ rpcSUCCESS
Definition: ErrorCodes.h:45
ripple::rpcSLOW_DOWN
@ rpcSLOW_DOWN
Definition: ErrorCodes.h:58
ripple::RPC::object_field_message
std::string object_field_message(std::string const &name)
Definition: ErrorCodes.h:239
ripple::RPC::ErrorInfo::ErrorInfo
constexpr ErrorInfo()
Definition: ErrorCodes.h:161
ripple::RPC::contains_error
bool contains_error(Json::Value const &json)
Returns true if the json contains an rpc error specification.
Definition: ErrorCodes.cpp:196
ripple::rpcSRC_ACT_MISSING
@ rpcSRC_ACT_MISSING
Definition: ErrorCodes.h:122
ripple::warning_code_i
warning_code_i
Codes returned in the warnings array of certain RPC commands.
Definition: ErrorCodes.h:145
ripple::rpcALREADY_SINGLE_SIG
@ rpcALREADY_SINGLE_SIG
Definition: ErrorCodes.h:93
ripple::rpcBAD_SEED
@ rpcBAD_SEED
Definition: ErrorCodes.h:100
ripple::rpcHIGH_FEE
@ rpcHIGH_FEE
Definition: ErrorCodes.h:59
ripple::rpcPUBLIC_MALFORMED
@ rpcPUBLIC_MALFORMED
Definition: ErrorCodes.h:118
ripple::rpcACT_NOT_FOUND
@ rpcACT_NOT_FOUND
Definition: ErrorCodes.h:71
ripple::rpcTXN_NOT_FOUND
@ rpcTXN_NOT_FOUND
Definition: ErrorCodes.h:81
ripple::rpcSRC_ISR_MALFORMED
@ rpcSRC_ISR_MALFORMED
Definition: ErrorCodes.h:126
ripple::rpcSTREAM_MALFORMED
@ rpcSTREAM_MALFORMED
Definition: ErrorCodes.h:127
ripple::warnRPC_UNSUPPORTED_MAJORITY
@ warnRPC_UNSUPPORTED_MAJORITY
Definition: ErrorCodes.h:147
ripple::rpcNOT_ENABLED
@ rpcNOT_ENABLED
Definition: ErrorCodes.h:60
ripple::rpcNO_EVENTS
@ rpcNO_EVENTS
Definition: ErrorCodes.h:55
ripple::rpcNO_CURRENT
@ rpcNO_CURRENT
Definition: ErrorCodes.h:66
ripple::RPC::ErrorInfo
Maps an rpc error code to its token and default message.
Definition: ErrorCodes.h:158
ripple::rpcDST_ISR_MALFORMED
@ rpcDST_ISR_MALFORMED
Definition: ErrorCodes.h:109
ripple::rpcCOMMAND_MISSING
@ rpcCOMMAND_MISSING
Definition: ErrorCodes.h:103
ripple::RPC::not_validator_error
Json::Value not_validator_error()
Definition: ErrorCodes.h:298
ripple::rpcDST_ACT_MALFORMED
@ rpcDST_ACT_MALFORMED
Definition: ErrorCodes.h:104
ripple::rpcALREADY_MULTISIG
@ rpcALREADY_MULTISIG
Definition: ErrorCodes.h:92
ripple::rpcLAST
@ rpcLAST
Definition: ErrorCodes.h:138
ripple::rpcACT_BITCOIN
@ rpcACT_BITCOIN
Definition: ErrorCodes.h:90
ripple::rpcINTERNAL
@ rpcINTERNAL
Definition: ErrorCodes.h:131
ripple::rpcCHANNEL_AMT_MALFORMED
@ rpcCHANNEL_AMT_MALFORMED
Definition: ErrorCodes.h:102
ripple::rpcDST_ACT_NOT_FOUND
@ rpcDST_ACT_NOT_FOUND
Definition: ErrorCodes.h:106
ripple::rpcNOT_IMPL
@ rpcNOT_IMPL
Definition: ErrorCodes.h:132
ripple::RPC::invalid_field_message
std::string invalid_field_message(std::string const &name)
Definition: ErrorCodes.h:254
ripple::rpcSRC_ACT_MALFORMED
@ rpcSRC_ACT_MALFORMED
Definition: ErrorCodes.h:121
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::rpcFORBIDDEN
@ rpcFORBIDDEN
Definition: ErrorCodes.h:49
ripple::rpcACT_MALFORMED
@ rpcACT_MALFORMED
Definition: ErrorCodes.h:91
ripple::rpcBAD_SYNTAX
@ rpcBAD_SYNTAX
Definition: ErrorCodes.h:47
ripple::rpcUNKNOWN_COMMAND
@ rpcUNKNOWN_COMMAND
Definition: ErrorCodes.h:86
ripple::rpcLGR_NOT_VALIDATED
@ rpcLGR_NOT_VALIDATED
Definition: ErrorCodes.h:74
ripple::rpcNO_PERMISSION
@ rpcNO_PERMISSION
Definition: ErrorCodes.h:54
Json::StaticString
Lightweight wrapper to tag static string.
Definition: json_value.h:62
ripple::rpcLGR_IDX_MALFORMED
@ rpcLGR_IDX_MALFORMED
Definition: ErrorCodes.h:114
ripple::rpcCHANNEL_MALFORMED
@ rpcCHANNEL_MALFORMED
Definition: ErrorCodes.h:101
ripple::rpcDST_AMT_MISSING
@ rpcDST_AMT_MISSING
Definition: ErrorCodes.h:108
ripple::rpcUNKNOWN
@ rpcUNKNOWN
Definition: ErrorCodes.h:43
ripple::rpcBAD_MARKET
@ rpcBAD_MARKET
Definition: ErrorCodes.h:98
ripple::rpcINVALID_LGR_RANGE
@ rpcINVALID_LGR_RANGE
Definition: ErrorCodes.h:137
ripple::rpcSRC_CUR_MALFORMED
@ rpcSRC_CUR_MALFORMED
Definition: ErrorCodes.h:125
ripple::rpcDST_ACT_MISSING
@ rpcDST_ACT_MISSING
Definition: ErrorCodes.h:105
ripple::RPC::make_param_error
Json::Value make_param_error(std::string const &message)
Returns a new json object that indicates invalid parameters.
Definition: ErrorCodes.h:219
ripple::RPC::ErrorInfo::ErrorInfo
constexpr ErrorInfo(error_code_i code_, char const *token_, char const *message_)
Definition: ErrorCodes.h:167
ripple::rpcNO_CLOSED
@ rpcNO_CLOSED
Definition: ErrorCodes.h:65
ripple::rpcBAD_SECRET
@ rpcBAD_SECRET
Definition: ErrorCodes.h:99
ripple::rpcBAD_ISSUER
@ rpcBAD_ISSUER
Definition: ErrorCodes.h:97
ripple::RPC::inject_error
void inject_error(error_code_i code, JsonValue &json)
Add or update the json update to reflect the error code.
Definition: ErrorCodes.h:185
ripple::RPC::invalid_field_error
Json::Value invalid_field_error(std::string const &name)
Definition: ErrorCodes.h:264
ripple::rpcMASTER_DISABLED
@ rpcMASTER_DISABLED
Definition: ErrorCodes.h:75
ripple::RPC::make_error
Json::Value make_error(error_code_i code)
Returns a new json object that reflects the error code.
Definition: ErrorCodes.cpp:182
ripple::rpcBAD_FEATURE
@ rpcBAD_FEATURE
Definition: ErrorCodes.h:96
ripple::RPC::ErrorInfo::token
Json::StaticString token
Definition: ErrorCodes.h:175
ripple::rpcNO_PF_REQUEST
@ rpcNO_PF_REQUEST
Definition: ErrorCodes.h:87
Json::Value
Represents a JSON value.
Definition: json_value.h:141
ripple::rpcSENDMAX_MALFORMED
@ rpcSENDMAX_MALFORMED
Definition: ErrorCodes.h:120
ripple::RPC::ErrorInfo::code
error_code_i code
Definition: ErrorCodes.h:174
ripple::rpcBAD_KEY_TYPE
@ rpcBAD_KEY_TYPE
Definition: ErrorCodes.h:134