void addLine (Json::Value& jsonLines, RippleState const& line) { STAmount const& saBalance (line.getBalance ()); STAmount const& saLimit (line.getLimit ()); STAmount const& saLimitPeer (line.getLimitPeer ()); Json::Value& jPeer (jsonLines.append (Json::objectValue)); jPeer[jss::account] = to_string (line.getAccountIDPeer ()); // Amount reported is positive if current account holds other // account's IOUs. // // Amount reported is negative if other account holds current // account's IOUs. jPeer[jss::balance] = saBalance.getText (); jPeer[jss::currency] = to_string (saBalance.issue ().currency); jPeer[jss::limit] = saLimit.getText (); jPeer[jss::limit_peer] = saLimitPeer.getText (); jPeer[jss::quality_in] = static_cast<Json::UInt> (line.getQualityIn ()); jPeer[jss::quality_out] = static_cast<Json::UInt> (line.getQualityOut ()); if (line.getAuth ()) jPeer[jss::authorized] = true; if (line.getAuthPeer ()) jPeer[jss::peer_authorized] = true; if (line.getNoRipple ()) jPeer[jss::no_ripple] = true; if (line.getNoRipplePeer ()) jPeer[jss::no_ripple_peer] = true; if (line.getFreeze ()) jPeer[jss::freeze] = true; if (line.getFreezePeer ()) jPeer[jss::freeze_peer] = true; }
Json::Value doAccountCurrencies (RPC::Context& context) { auto& params = context.params; // Get the current ledger Ledger::pointer ledger; Json::Value result (RPC::lookupLedger (params, ledger, context.netOps)); if (!ledger) return result; if (!(params.isMember (jss::account) || params.isMember (jss::ident))) return RPC::missing_field_error (jss::account); std::string const strIdent (params.isMember (jss::account) ? params[jss::account].asString () : params[jss::ident].asString ()); int iIndex = 0; if (params.isMember (jss::account_index)) { auto const& accountIndex = params[jss::account_index]; if (!accountIndex.isUInt() && !accountIndex.isInt ()) return RPC::invalid_field_message (jss::account_index); iIndex = accountIndex.asUInt (); } bool const bStrict = params.isMember (jss::strict) && params[jss::strict].asBool (); // Get info on account. bool bIndex; // out param RippleAddress naAccount; // out param Json::Value jvAccepted (RPC::accountFromString ( ledger, naAccount, bIndex, strIdent, iIndex, bStrict, context.netOps)); if (!jvAccepted.empty ()) return jvAccepted; std::set<Currency> send, receive; for (auto const& item : getRippleStateItems (naAccount.getAccountID (), ledger)) { RippleState* rspEntry = (RippleState*) item.get (); STAmount const& saBalance = rspEntry->getBalance (); if (saBalance < rspEntry->getLimit ()) receive.insert (saBalance.getCurrency ()); if ((-saBalance) < rspEntry->getLimitPeer ()) send.insert (saBalance.getCurrency ()); } send.erase (badCurrency()); receive.erase (badCurrency()); Json::Value& sendCurrencies = (result[jss::send_currencies] = Json::arrayValue); for (auto const& c: send) sendCurrencies.append (to_string (c)); Json::Value& recvCurrencies = (result[jss::receive_currencies] = Json::arrayValue); for (auto const& c: receive) recvCurrencies.append (to_string (c)); return result; }
Json::Value doAccountCurrencies (RPC::Context& context) { auto& params = context.params_; // Get the current ledger Ledger::pointer ledger; Json::Value result (RPC::lookupLedger (params, ledger, context.netOps_)); if (!ledger) return result; if (!(params.isMember ("account") || params.isMember ("ident"))) return RPC::missing_field_error ("account"); std::string const strIdent (params.isMember ("account") ? params["account"].asString () : params["ident"].asString ()); int const iIndex (params.isMember ("account_index") ? params["account_index"].asUInt () : 0); bool const bStrict = params.isMember ("strict") && params["strict"].asBool (); // Get info on account. bool bIndex; // out param RippleAddress naAccount; // out param Json::Value jvAccepted (RPC::accountFromString ( ledger, naAccount, bIndex, strIdent, iIndex, bStrict, context.netOps_)); if (!jvAccepted.empty ()) return jvAccepted; std::set<Currency> send, receive; AccountItems rippleLines ( naAccount.getAccountID (), ledger, AccountItem::pointer (new RippleState ())); for (auto item: rippleLines.getItems ()) { RippleState* rspEntry = (RippleState*) item.get (); STAmount const& saBalance = rspEntry->getBalance (); if (saBalance < rspEntry->getLimit ()) receive.insert (saBalance.getCurrency ()); if ((-saBalance) < rspEntry->getLimitPeer ()) send.insert (saBalance.getCurrency ()); } send.erase (badCurrency()); receive.erase (badCurrency()); Json::Value& sendCurrencies = (result["send_currencies"] = Json::arrayValue); for (auto const& c: send) sendCurrencies.append (to_string (c)); Json::Value& recvCurrencies = (result["receive_currencies"] = Json::arrayValue); for (auto const& c: receive) recvCurrencies.append (to_string (c)); return result; }