20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/paths/TrustLine.h>
22 #include <ripple/ledger/ReadView.h>
23 #include <ripple/net/RPCErr.h>
24 #include <ripple/protocol/ErrorCodes.h>
25 #include <ripple/protocol/jss.h>
26 #include <ripple/resource/Fees.h>
27 #include <ripple/rpc/Context.h>
28 #include <ripple/rpc/impl/RPCHelpers.h>
29 #include <ripple/rpc/impl/Tuning.h>
36 STAmount const& saBalance(line.getBalance());
37 STAmount const& saLimit(line.getLimit());
38 STAmount const& saLimitPeer(line.getLimitPeer());
41 jPeer[jss::account] =
to_string(line.getAccountIDPeer());
47 jPeer[jss::balance] = saBalance.
getText();
49 jPeer[jss::limit] = saLimit.
getText();
50 jPeer[jss::limit_peer] = saLimitPeer.
getText();
51 jPeer[jss::quality_in] = line.getQualityIn().value;
52 jPeer[jss::quality_out] = line.getQualityOut().value;
54 jPeer[jss::authorized] =
true;
55 if (line.getAuthPeer())
56 jPeer[jss::peer_authorized] =
true;
57 if (line.getNoRipple() || !line.getDefaultRipple())
58 jPeer[jss::no_ripple] = line.getNoRipple();
59 if (line.getNoRipplePeer() || !line.getDefaultRipple())
60 jPeer[jss::no_ripple_peer] = line.getNoRipplePeer();
62 jPeer[jss::freeze] =
true;
63 if (line.getFreezePeer())
64 jPeer[jss::freeze_peer] =
true;
79 auto const& params(context.
params);
80 if (!params.isMember(jss::account))
88 auto id = parseBase58<AccountID>(params[jss::account].asString());
94 auto const accountID{std::move(
id.value())};
100 if (params.isMember(jss::peer))
101 strPeer = params[jss::peer].asString();
104 return strPeer.
empty() ? std::nullopt : parseBase58<AccountID>(strPeer);
106 if (!strPeer.
empty() && !raPeerAccount)
121 bool ignoreDefault = params.isMember(jss::ignore_default) &&
122 params[jss::ignore_default].asBool();
133 VisitData visitData = {{}, accountID, raPeerAccount, ignoreDefault, 0};
134 uint256 startAfter = beast::zero;
137 if (params.isMember(jss::marker))
139 if (!params[jss::marker].isString())
157 startHint = boost::lexical_cast<std::uint64_t>(value);
159 catch (boost::bad_lexical_cast&)
166 auto const sle = ledger->
read({
ltANY, startAfter});
185 [&visitData, &count, &marker, &limit, &nextHint](
193 if (++count == limit)
195 marker = sleCur->
key();
204 if (visitData.ignoreDefault)
215 if (!ignore && count <= limit)
221 (!visitData.raPeerAccount ||
222 *visitData.raPeerAccount ==
223 line->getAccountIDPeer()))
225 visitData.items.emplace_back(*line);
239 if (count == limit + 1 && marker)
241 result[jss::limit] = limit;
242 result[jss::marker] =
246 result[jss::account] =
toBase58(accountID);
248 for (
auto const& item : visitData.items)