20 #include <ripple/app/main/Application.h>
21 #include <ripple/basics/StringUtilities.h>
22 #include <ripple/basics/strHex.h>
23 #include <ripple/ledger/ReadView.h>
24 #include <ripple/net/RPCErr.h>
25 #include <ripple/protocol/ErrorCodes.h>
26 #include <ripple/protocol/Indexes.h>
27 #include <ripple/protocol/jss.h>
28 #include <ripple/rpc/Context.h>
29 #include <ripple/rpc/impl/RPCHelpers.h>
48 bool bNodeBinary =
false;
55 uNodeIndex = beast::zero;
56 jvResult[jss::error] =
"malformedRequest";
62 auto const account = parseBase58<AccountID>(
64 if (!account || account->
isZero())
65 jvResult[jss::error] =
"malformedAddress";
75 uNodeIndex = beast::zero;
76 jvResult[jss::error] =
"malformedRequest";
89 uNodeIndex = beast::zero;
90 jvResult[jss::error] =
"malformedRequest";
99 jvResult[jss::error] =
"malformedRequest";
103 auto const owner = parseBase58<AccountID>(
106 auto const authorized = parseBase58<AccountID>(
107 context.
params[jss::deposit_preauth][jss::authorized]
111 jvResult[jss::error] =
"malformedOwner";
113 jvResult[jss::error] =
"malformedAuthorized";
123 jvResult[jss::error] =
"malformedRequest";
129 uNodeIndex = beast::zero;
130 jvResult[jss::error] =
"malformedRequest";
137 jvResult[jss::error] =
"malformedRequest";
143 ? context.
params[jss::directory][jss::sub_index].
asUInt()
153 jvResult[jss::error] =
"malformedRequest";
156 context.
params[jss::directory][jss::dir_root]
159 uNodeIndex = beast::zero;
160 jvResult[jss::error] =
"malformedRequest";
169 auto const ownerID = parseBase58<AccountID>(
174 jvResult[jss::error] =
"malformedAddress";
184 jvResult[jss::error] =
"malformedRequest";
195 uNodeIndex = beast::zero;
196 jvResult[jss::error] =
"malformedRequest";
204 jvResult[jss::error] =
"malformedRequest";
208 auto const id = parseBase58<AccountID>(
211 jvResult[jss::error] =
"malformedOwner";
226 uNodeIndex = beast::zero;
227 jvResult[jss::error] =
"malformedRequest";
235 jvResult[jss::error] =
"malformedRequest";
239 auto const id = parseBase58<AccountID>(
242 jvResult[jss::error] =
"malformedAddress";
257 uNodeIndex = beast::zero;
258 jvResult[jss::error] =
"malformedRequest";
268 !jvRippleState.
isMember(jss::currency) ||
269 !jvRippleState.
isMember(jss::accounts) ||
270 !jvRippleState[jss::accounts].
isArray() ||
271 2 != jvRippleState[jss::accounts].
size() ||
272 !jvRippleState[jss::accounts][0u].
isString() ||
273 !jvRippleState[jss::accounts][1u].
isString() ||
274 (jvRippleState[jss::accounts][0u].
asString() ==
275 jvRippleState[jss::accounts][1u].
asString()))
277 jvResult[jss::error] =
"malformedRequest";
281 auto const id1 = parseBase58<AccountID>(
282 jvRippleState[jss::accounts][0u].asString());
283 auto const id2 = parseBase58<AccountID>(
284 jvRippleState[jss::accounts][1u].asString());
287 jvResult[jss::error] =
"malformedAddress";
290 uCurrency, jvRippleState[jss::currency].asString()))
292 jvResult[jss::error] =
"malformedCurrency";
307 uNodeIndex = beast::zero;
308 jvResult[jss::error] =
"malformedRequest";
316 jvResult[jss::error] =
"malformedRequest";
320 auto const id = parseBase58<AccountID>(
323 jvResult[jss::error] =
"malformedAddress";
326 *
id, context.
params[jss::ticket][jss::ticket_seq].
asUInt());
331 jvResult[jss::error] =
"unknownOption";
343 jvResult[jss::error] =
"entryNotFound";
346 (expectedType !=
ltANY) && (expectedType != sleNode->getType()))
348 jvResult[jss::error] =
"malformedRequest";
350 else if (bNodeBinary)
357 jvResult[jss::index] =
to_string(uNodeIndex);
362 jvResult[jss::index] =
to_string(uNodeIndex);