20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/paths/RippleState.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>
48 STAmount const& saBalance(line.getBalance());
49 STAmount const& saLimit(line.getLimit());
50 STAmount const& saLimitPeer(line.getLimitPeer());
53 jPeer[jss::account] =
to_string(line.getAccountIDPeer());
59 jPeer[jss::balance] = saBalance.
getText();
61 jPeer[jss::limit] = saLimit.
getText();
62 jPeer[jss::limit_peer] = saLimitPeer.
getText();
63 jPeer[jss::quality_in] = line.getQualityIn().value;
64 jPeer[jss::quality_out] = line.getQualityOut().value;
66 jPeer[jss::authorized] =
true;
67 if (line.getAuthPeer())
68 jPeer[jss::peer_authorized] =
true;
69 if (line.getNoRipple() || !line.getDefaultRipple())
70 jPeer[jss::no_ripple] = line.getNoRipple();
71 if (line.getNoRipplePeer() || !line.getDefaultRipple())
72 jPeer[jss::no_ripple_peer] = line.getNoRipplePeer();
74 jPeer[jss::freeze] =
true;
75 if (line.getFreezePeer())
76 jPeer[jss::freeze_peer] =
true;
91 auto const& params(context.
params);
92 if (!params.isMember(jss::account))
100 std::string strIdent(params[jss::account].asString());
105 for (
auto it = jv.begin(); it != jv.end(); ++it)
106 result[it.memberName()] = *it;
114 if (params.isMember(jss::peer))
115 strPeer = params[jss::peer].asString();
116 auto hasPeer = !strPeer.
empty();
123 for (
auto it = jv.begin(); it != jv.end(); ++it)
124 result[it.memberName()] = *it;
138 bool ignoreDefault = params.isMember(jss::ignore_default) &&
139 params[jss::ignore_default].asBool();
143 {}, accountID, hasPeer, raPeerAccount, ignoreDefault, 0,
nullptr};
144 uint256 startAfter = beast::zero;
147 if (params.isMember(jss::marker))
149 if (!params[jss::marker].isString())
167 startHint = boost::lexical_cast<std::uint64_t>(value);
169 catch (boost::bad_lexical_cast&)
176 auto const sle = ledger->
read({
ltANY, startAfter});
195 [&visitData, &count, &marker, &limit, &nextHint](
200 if (sleCur->getFieldAmount(sfLowLimit).getIssuer() ==
203 !(sleCur->getFieldU32(sfFlags) & lsfLowReserve);
206 sleCur->getFieldU32(sfFlags) & lsfHighReserve);
215 if (++count == limit)
217 marker = sleCur->
key();
222 if (!ignore && count <= limit)
227 if (line !=
nullptr &&
230 line->getAccountIDPeer()))
232 visitData.
items.emplace_back(line);
246 if (count == limit + 1 && marker)
248 result[jss::limit] = limit;
249 result[jss::marker] =
255 for (
auto const& item : visitData.
items)