Use Json::StaticString to improve performance:

* Move JSON-RPC fields to jsonrpc_fields.h
This commit is contained in:
David Schwartz
2014-05-06 17:38:26 -07:00
committed by Vinnie Falco
parent 34cbb26e47
commit 6fcf3fedb6
29 changed files with 498 additions and 1248 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -3348,6 +3348,9 @@
<ClInclude Include="..\..\src\ripple\proto\ripple.pb.h"> <ClInclude Include="..\..\src\ripple\proto\ripple.pb.h">
<Filter>[1] Ripple\proto</Filter> <Filter>[1] Ripple\proto</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\common\jsonrpc_fields.h">
<Filter>[1] Ripple\common</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\doc\CheatSheet.md"> <None Include="..\..\doc\CheatSheet.md">

View File

@@ -23,12 +23,11 @@ Global
{73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|Win32.Build.0 = Release|Win32 {73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|Win32.Build.0 = Release|Win32
{73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|x64.ActiveCfg = Release|x64 {73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|x64.ActiveCfg = Release|x64
{73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|x64.Build.0 = Release|x64 {73C5A0F0-7629-4DE7-9194-BE7AC6C19535}.Release|x64.Build.0 = Release|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|Win32.ActiveCfg = Debug|Win32 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|Win32.ActiveCfg = Debug|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|Win32.Build.0 = Debug|Win32 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|Win32.Build.0 = Debug|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|x64.ActiveCfg = Debug|x64 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|x64.ActiveCfg = Debug|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|x64.Build.0 = Debug|x64 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Debug|x64.Build.0 = Debug|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|Win32.ActiveCfg = Release|Win32 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|Win32.ActiveCfg = Release|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|Win32.Build.0 = Release|Win32
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|x64.ActiveCfg = Release|x64 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|x64.ActiveCfg = Release|x64
{B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|x64.Build.0 = Release|x64 {B7F39ECD-473C-484D-BC34-31F8362506A5}.Release|x64.Build.0 = Release|x64
EndGlobalSection EndGlobalSection

View File

@@ -0,0 +1,172 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
Copyright (c) 2012, 2013 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
//==============================================================================
#ifndef RIPPLE_COMMON_JSONRPC_FIELDS_H_INCLUDED
#define RIPPLE_COMMON_JSONRPC_FIELDS_H_INCLUDED
#include "../json/ripple_json.h"
namespace ripple {
namespace jss {
// JSON static strings
#define JSS(x) const Json::StaticString x ( #x )
/* The "StaticString" field names are used instead of string literals to
optimize the performance of accessing members of Json::Value objects.
*/
// VFALCO NOTE Some of these are part of the JSON-RPC API and some aren't
// TODO Move the string not part of the JSON-RPC API into another file
JSS ( accepted );
JSS ( account );
JSS ( account_hash );
JSS ( account_index );
JSS ( accountState );
JSS ( accountTreeHash );
JSS ( affected );
JSS ( age );
JSS ( amendment_blocked );
JSS ( asks );
JSS ( authorized );
JSS ( balance );
JSS ( base_fee );
JSS ( base_fee_xrp );
JSS ( bids );
JSS ( binary );
JSS ( build_version );
JSS ( closed );
JSS ( closed_ledger );
JSS ( close_time );
JSS ( close_time_estimated );
JSS ( close_time_human );
JSS ( close_time_resolution );
JSS ( code );
JSS ( command );
JSS ( complete_ledgers );
JSS ( consensus );
JSS ( converge_time );
JSS ( converge_time_s );
JSS ( currency );
JSS ( date );
JSS ( engine_result );
JSS ( engine_result_code );
JSS ( engine_result_message );
JSS ( error );
JSS ( error_exception );
JSS ( fee_base );
JSS ( fee_ref );
JSS ( fetch_pack );
JSS ( flags );
JSS ( hash );
JSS ( hostid );
JSS ( id );
JSS ( issuer );
JSS ( last_close );
JSS ( ledger );
JSS ( ledgerClosed );
JSS ( ledger_current_index );
JSS ( ledger_hash );
JSS ( ledger_index );
JSS ( ledger_index_max );
JSS ( ledger_index_min );
JSS ( ledger_time );
JSS ( limit );
JSS ( limit_peer );
JSS ( lines );
JSS ( load );
JSS ( load_base );
JSS ( load_factor );
JSS ( load_factor_cluster );
JSS ( load_factor_local );
JSS ( load_factor_net );
JSS ( load_fee );
JSS ( marker );
JSS ( message );
JSS ( meta );
JSS ( metaData );
JSS ( method );
JSS ( missingCommand );
JSS ( name );
JSS ( network_ledger );
JSS ( none );
JSS ( no_ripple );
JSS ( no_ripple_peer );
JSS ( offers );
JSS ( params );
JSS ( parent_hash );
JSS ( peer );
JSS ( peer_authorized );
JSS ( peer_index );
JSS ( peers );
JSS ( proposed );
JSS ( proposers );
JSS ( pubkey_node );
JSS ( pubkey_validator );
JSS ( published_ledger );
JSS ( quality );
JSS ( quality_in );
JSS ( quality_out );
JSS ( random );
JSS ( raw_meta );
JSS ( request );
JSS ( reserve_base );
JSS ( reserve_base_xrp );
JSS ( reserve_inc );
JSS ( reserve_inc_xrp );
JSS ( response );
JSS ( result );
JSS ( ripple_lines );
JSS ( seq );
JSS ( seqNum );
JSS ( server_state );
JSS ( server_status );
JSS ( stand_alone );
JSS ( status );
JSS ( success );
JSS ( taker_gets );
JSS ( taker_gets_funded );
JSS ( taker_pays );
JSS ( taker_pays_funded );
JSS ( total_coins );
JSS ( totalCoins );
JSS ( transaction );
JSS ( transaction_hash );
JSS ( transactions );
JSS ( transTreeHash );
JSS ( tx );
JSS ( tx_blob );
JSS ( tx_json );
JSS ( txn_count );
JSS ( type );
JSS ( type_hex );
JSS ( validated );
JSS ( validated_ledger );
JSS ( validated_ledgers );
JSS ( validation_quorum );
JSS ( value );
JSS ( waiting );
JSS ( warning );
#undef JSS
} // jss
} // ripple
#endif

View File

@@ -54,19 +54,19 @@ std::string AcceptedLedgerTx::getEscMeta () const
void AcceptedLedgerTx::buildJson () void AcceptedLedgerTx::buildJson ()
{ {
mJson = Json::objectValue; mJson = Json::objectValue;
mJson["transaction"] = mTxn->getJson (0); mJson[jss::transaction] = mTxn->getJson (0);
if (mMeta) if (mMeta)
{ {
mJson["meta"] = mMeta->getJson (0); mJson[jss::meta] = mMeta->getJson (0);
mJson["raw_meta"] = strHex (mRawMeta); mJson[jss::raw_meta] = strHex (mRawMeta);
} }
mJson["result"] = transHuman (mResult); mJson[jss::result] = transHuman (mResult);
if (!mAffected.empty ()) if (!mAffected.empty ())
{ {
Json::Value& affected = (mJson["affected"] = Json::arrayValue); Json::Value& affected = (mJson[jss::affected] = Json::arrayValue);
BOOST_FOREACH (const RippleAddress & ra, mAffected) BOOST_FOREACH (const RippleAddress & ra, mAffected)
{ {
affected.append (ra.humanAccountID ()); affected.append (ra.humanAccountID ());

View File

@@ -17,6 +17,8 @@
*/ */
//============================================================================== //==============================================================================
#include "../../ripple/common/jsonrpc_fields.h"
#include "../../beast/beast/unit_test/suite.h" #include "../../beast/beast/unit_test/suite.h"
namespace ripple { namespace ripple {
@@ -1005,7 +1007,7 @@ Ledger::pointer Ledger::getLastFullLedger ()
void Ledger::addJson (Json::Value& ret, int options) void Ledger::addJson (Json::Value& ret, int options)
{ {
ret["ledger"] = getJson (options); ret[jss::ledger] = getJson (options);
} }
static void stateItemTagAppender(Json::Value& value, SHAMapItem::ref smi) static void stateItemTagAppender(Json::Value& value, SHAMapItem::ref smi)
@@ -1026,43 +1028,43 @@ Json::Value Ledger::getJson (int options)
ScopedLockType sl (mLock); ScopedLockType sl (mLock);
ledger["seqNum"] = beast::lexicalCastThrow <std::string> (mLedgerSeq); // DEPRECATED ledger[jss::seqNum] = beast::lexicalCastThrow <std::string> (mLedgerSeq); // DEPRECATED
ledger["parent_hash"] = mParentHash.GetHex (); ledger[jss::parent_hash] = mParentHash.GetHex ();
ledger["ledger_index"] = beast::lexicalCastThrow <std::string> (mLedgerSeq); ledger[jss::ledger_index] = beast::lexicalCastThrow <std::string> (mLedgerSeq);
if (mClosed || bFull) if (mClosed || bFull)
{ {
if (mClosed) if (mClosed)
ledger["closed"] = true; ledger[jss::closed] = true;
ledger["hash"] = mHash.GetHex (); // DEPRECATED ledger[jss::hash] = mHash.GetHex (); // DEPRECATED
ledger["totalCoins"] = beast::lexicalCastThrow <std::string> (mTotCoins); // DEPRECATED ledger[jss::totalCoins] = beast::lexicalCastThrow <std::string> (mTotCoins); // DEPRECATED
ledger["ledger_hash"] = mHash.GetHex (); ledger[jss::ledger_hash] = mHash.GetHex ();
ledger["transaction_hash"] = mTransHash.GetHex (); ledger[jss::transaction_hash] = mTransHash.GetHex ();
ledger["account_hash"] = mAccountHash.GetHex (); ledger[jss::account_hash] = mAccountHash.GetHex ();
ledger["accepted"] = mAccepted; ledger[jss::accepted] = mAccepted;
ledger["total_coins"] = beast::lexicalCastThrow <std::string> (mTotCoins); ledger[jss::total_coins] = beast::lexicalCastThrow <std::string> (mTotCoins);
if (mCloseTime != 0) if (mCloseTime != 0)
{ {
ledger["close_time"] = mCloseTime; ledger[jss::close_time] = mCloseTime;
ledger["close_time_human"] = boost::posix_time::to_simple_string (ptFromSeconds (mCloseTime)); ledger[jss::close_time_human] = boost::posix_time::to_simple_string (ptFromSeconds (mCloseTime));
ledger["close_time_resolution"] = mCloseResolution; ledger[jss::close_time_resolution] = mCloseResolution;
if ((mCloseFlags & sLCF_NoConsensusTime) != 0) if ((mCloseFlags & sLCF_NoConsensusTime) != 0)
ledger["close_time_estimated"] = true; ledger[jss::close_time_estimated] = true;
} }
} }
else else
{ {
ledger["closed"] = false; ledger[jss::closed] = false;
} }
if (mTransactionMap && (bFull || is_bit_set (options, LEDGER_JSON_DUMP_TXRP))) if (mTransactionMap && (bFull || is_bit_set (options, LEDGER_JSON_DUMP_TXRP)))
{ {
Json::Value txns (Json::arrayValue); Json::Value& txns = (ledger[jss::transactions] = Json::arrayValue);
SHAMapTreeNode::TNType type; SHAMapTreeNode::TNType type;
for (SHAMapItem::pointer item = mTransactionMap->peekFirstItem (type); !!item; for (SHAMapItem::pointer item = mTransactionMap->peekFirstItem (type); !!item;
@@ -1086,7 +1088,7 @@ Json::Value Ledger::getJson (int options)
TransactionMetaSet meta (item->getTag (), mLedgerSeq, sit.getVL ()); TransactionMetaSet meta (item->getTag (), mLedgerSeq, sit.getVL ());
Json::Value txJson = txn.getJson (0); Json::Value txJson = txn.getJson (0);
txJson["metaData"] = meta.getJson (0); txJson[jss::metaData] = meta.getJson (0);
txns.append (txJson); txns.append (txJson);
} }
else else
@@ -1099,12 +1101,11 @@ Json::Value Ledger::getJson (int options)
else txns.append (item->getTag ().GetHex ()); else txns.append (item->getTag ().GetHex ());
} }
ledger["transactions"] = txns;
} }
if (mAccountStateMap && (bFull || is_bit_set (options, LEDGER_JSON_DUMP_STATE))) if (mAccountStateMap && (bFull || is_bit_set (options, LEDGER_JSON_DUMP_STATE)))
{ {
Json::Value& state = (ledger["accountState"] = Json::arrayValue); Json::Value& state = (ledger[jss::accountState] = Json::arrayValue);
if (bFull || is_bit_set (options, LEDGER_JSON_EXPAND)) if (bFull || is_bit_set (options, LEDGER_JSON_EXPAND))
visitStateItems(BIND_TYPE(stateItemFullAppender, std::ref(state), P_1)); visitStateItems(BIND_TYPE(stateItemFullAppender, std::ref(state), P_1));
else else
@@ -1809,8 +1810,8 @@ bool Ledger::assertSane ()
Json::Value j = getJson (0); Json::Value j = getJson (0);
j ["accountTreeHash"] = mAccountHash.GetHex (); j [jss::accountTreeHash] = mAccountHash.GetHex ();
j ["transTreeHash"] = mTransHash.GetHex (); j [jss::transTreeHash] = mTransHash.GetHex ();
assert (false); assert (false);

View File

@@ -17,6 +17,8 @@
*/ */
//============================================================================== //==============================================================================
#include "../../ripple/common/jsonrpc_fields.h"
namespace ripple { namespace ripple {
bool ParameterNode::setValue (const std::string& name, const Json::Value& value, Json::Value& error) bool ParameterNode::setValue (const std::string& name, const Json::Value& value, Json::Value& error)
@@ -33,8 +35,8 @@ bool ParameterNode::setValue (const std::string& name, const Json::Value& value,
if (it == mChildren.end ()) if (it == mChildren.end ())
{ {
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Name not found"; error[jss::error] = "Name not found";
error["name"] = name; error[jss::name] = name;
return false; return false;
} }
@@ -46,8 +48,8 @@ bool ParameterNode::setValue (const std::string& name, const Json::Value& value,
if (it == mChildren.end ()) if (it == mChildren.end ())
{ {
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Name not found"; error[jss::error] = "Name not found";
error["name"] = name; error[jss::name] = name;
return false; return false;
} }
@@ -56,8 +58,8 @@ bool ParameterNode::setValue (const std::string& name, const Json::Value& value,
if (!n) if (!n)
{ {
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Node has no children"; error[jss::error] = "Node has no children";
error["name"] = it->second->getName (); error[jss::name] = it->second->getName ();
return false; return false;
} }
@@ -119,7 +121,7 @@ Json::Value ParameterNode::getValue (int i) const
bool ParameterNode::setValue (const Json::Value& value, Json::Value& error) bool ParameterNode::setValue (const Json::Value& value, Json::Value& error)
{ {
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Cannot end on an inner node"; error[jss::error] = "Cannot end on an inner node";
Json::Value nodes (Json::arrayValue); Json::Value nodes (Json::arrayValue);
typedef std::map<std::string, Parameter::pointer>::value_type string_ref_pair; typedef std::map<std::string, Parameter::pointer>::value_type string_ref_pair;
@@ -147,8 +149,8 @@ bool ParameterString::setValue (const Json::Value& value, Json::Value& error)
if (!value.isConvertibleTo (Json::stringValue)) if (!value.isConvertibleTo (Json::stringValue))
{ {
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Cannot convert to string"; error[jss::error] = "Cannot convert to string";
error["value"] = value; error[jss::value] = value;
return false; return false;
} }
@@ -187,8 +189,8 @@ bool ParameterInt::setValue (const Json::Value& value, Json::Value& error)
} }
error = Json::objectValue; error = Json::objectValue;
error["error"] = "Cannot convert to integer"; error[jss::error] = "Cannot convert to integer";
error["value"] = value; error[jss::value] = value;
return false; return false;
} }

View File

@@ -18,6 +18,7 @@
//============================================================================== //==============================================================================
#include "../../ripple_overlay/api/predicates.h" #include "../../ripple_overlay/api/predicates.h"
#include "../../ripple/common/jsonrpc_fields.h"
#include "../../beast/modules/beast_core/thread/DeadlineTimer.h" #include "../../beast/modules/beast_core/thread/DeadlineTimer.h"
#include "../../beast/modules/beast_core/system/SystemStats.h" #include "../../beast/modules/beast_core/system/SystemStats.h"
@@ -1150,17 +1151,17 @@ Json::Value NetworkOPsImp::getOwnerInfo (Ledger::pointer lpLedger, const RippleA
switch (sleCur->getType ()) switch (sleCur->getType ())
{ {
case ltOFFER: case ltOFFER:
if (!jvObjects.isMember ("offers")) if (!jvObjects.isMember (jss::offers))
jvObjects["offers"] = Json::Value (Json::arrayValue); jvObjects[jss::offers] = Json::Value (Json::arrayValue);
jvObjects["offers"].append (sleCur->getJson (0)); jvObjects[jss::offers].append (sleCur->getJson (0));
break; break;
case ltRIPPLE_STATE: case ltRIPPLE_STATE:
if (!jvObjects.isMember ("ripple_lines")) if (!jvObjects.isMember (jss::ripple_lines))
jvObjects["ripple_lines"] = Json::Value (Json::arrayValue); jvObjects[jss::ripple_lines] = Json::Value (Json::arrayValue);
jvObjects["ripple_lines"].append (sleCur->getJson (0)); jvObjects[jss::ripple_lines].append (sleCur->getJson (0));
break; break;
case ltACCOUNT_ROOT: case ltACCOUNT_ROOT:
@@ -1684,10 +1685,10 @@ void NetworkOPsImp::pubServer ()
{ {
Json::Value jvObj (Json::objectValue); Json::Value jvObj (Json::objectValue);
jvObj ["type"] = "serverStatus"; jvObj [jss::type] = "serverStatus";
jvObj ["server_status"] = strOperatingMode (); jvObj [jss::server_status] = strOperatingMode ();
jvObj ["load_base"] = (mLastLoadBase = getApp().getFeeTrack ().getLoadBase ()); jvObj [jss::load_base] = (mLastLoadBase = getApp().getFeeTrack ().getLoadBase ());
jvObj ["load_factor"] = (mLastLoadFactor = getApp().getFeeTrack ().getLoadFactor ()); jvObj [jss::load_factor] = (mLastLoadFactor = getApp().getFeeTrack ().getLoadFactor ());
Json::FastWriter w; Json::FastWriter w;
std::string sObj = w.write (jvObj); std::string sObj = w.write (jvObj);
@@ -1936,10 +1937,10 @@ NetworkOPsImp::getTxsAccount (const RippleAddress& account, std::int32_t minLedg
{ {
try try
{ {
if (!token.isMember("ledger") || !token.isMember("seq")) if (!token.isMember(jss::ledger) || !token.isMember(jss::seq))
return ret; return ret;
findLedger = token["ledger"].asInt(); findLedger = token[jss::ledger].asInt();
findSeq = token["seq"].asInt(); findSeq = token[jss::seq].asInt();
} }
catch (...) catch (...)
{ {
@@ -1978,8 +1979,8 @@ NetworkOPsImp::getTxsAccount (const RippleAddress& account, std::int32_t minLedg
else if (numberOfResults == 0) else if (numberOfResults == 0)
{ {
token = Json::objectValue; token = Json::objectValue;
token["ledger"] = db->getInt("LedgerSeq"); token[jss::ledger] = db->getInt("LedgerSeq");
token["seq"] = db->getInt("TxnSeq"); token[jss::seq] = db->getInt("TxnSeq");
break; break;
} }
@@ -2046,10 +2047,10 @@ NetworkOPsImp::getTxsAccountB (const RippleAddress& account, std::int32_t minLed
{ {
try try
{ {
if (!token.isMember("ledger") || !token.isMember("seq")) if (!token.isMember(jss::ledger) || !token.isMember(jss::seq))
return ret; return ret;
findLedger = token["ledger"].asInt(); findLedger = token[jss::ledger].asInt();
findSeq = token["seq"].asInt(); findSeq = token[jss::seq].asInt();
} }
catch (...) catch (...)
{ {
@@ -2086,8 +2087,8 @@ NetworkOPsImp::getTxsAccountB (const RippleAddress& account, std::int32_t minLed
else if (numberOfResults == 0) else if (numberOfResults == 0)
{ {
token = Json::objectValue; token = Json::objectValue;
token["ledger"] = db->getInt("LedgerSeq"); token[jss::ledger] = db->getInt("LedgerSeq");
token["seq"] = db->getInt("TxnSeq"); token[jss::seq] = db->getInt("TxnSeq");
break; break;
} }
@@ -2160,7 +2161,7 @@ Json::Value NetworkOPsImp::getConsensusInfo ()
return mConsensus->getJson (true); return mConsensus->getJson (true);
Json::Value info = Json::objectValue; Json::Value info = Json::objectValue;
info["consensus"] = "none"; info[jss::consensus] = "none";
return info; return info;
} }
@@ -2176,86 +2177,86 @@ Json::Value NetworkOPsImp::getServerInfo (bool human, bool admin)
{ {
// For a non admin connection, hash the node ID into a single RFC1751 word // For a non admin connection, hash the node ID into a single RFC1751 word
Blob const& addr (getApp().getLocalCredentials ().getNodePublic ().getNodePublic ()); Blob const& addr (getApp().getLocalCredentials ().getNodePublic ().getNodePublic ());
info ["hostid"] = RFC1751::getWordFromBlob (addr.data (), addr.size ()); info [jss::hostid] = RFC1751::getWordFromBlob (addr.data (), addr.size ());
} }
else else
{ {
// Only admins get the hostname for security reasons // Only admins get the hostname for security reasons
info ["hostid"] = beast::SystemStats::getComputerName(); info [jss::hostid] = beast::SystemStats::getComputerName();
} }
} }
info ["build_version"] = BuildInfo::getVersionString (); info [jss::build_version] = BuildInfo::getVersionString ();
info["server_state"] = strOperatingMode (); info [jss::server_state] = strOperatingMode ();
if (mNeedNetworkLedger) if (mNeedNetworkLedger)
info["network_ledger"] = "waiting"; info[jss::network_ledger] = jss::waiting;
info["validation_quorum"] = m_ledgerMaster.getMinValidations (); info[jss::validation_quorum] = m_ledgerMaster.getMinValidations ();
if (admin) if (admin)
{ {
if (getConfig ().VALIDATION_PUB.isValid ()) if (getConfig ().VALIDATION_PUB.isValid ())
info["pubkey_validator"] = getConfig ().VALIDATION_PUB.humanNodePublic (); info[jss::pubkey_validator] = getConfig ().VALIDATION_PUB.humanNodePublic ();
else else
info["pubkey_validator"] = "none"; info[jss::pubkey_validator] = jss::none;
} }
info["pubkey_node"] = getApp().getLocalCredentials ().getNodePublic ().humanNodePublic (); info[jss::pubkey_node] = getApp().getLocalCredentials ().getNodePublic ().humanNodePublic ();
info["complete_ledgers"] = getApp().getLedgerMaster ().getCompleteLedgers (); info[jss::complete_ledgers] = getApp().getLedgerMaster ().getCompleteLedgers ();
if (m_amendmentBlocked) if (m_amendmentBlocked)
info["amendment_blocked"] = true; info[jss::amendment_blocked] = true;
size_t fp = mFetchPack.getCacheSize (); size_t fp = mFetchPack.getCacheSize ();
if (fp != 0) if (fp != 0)
info["fetch_pack"] = Json::UInt (fp); info[jss::fetch_pack] = Json::UInt (fp);
info["peers"] = Json::UInt (getApp ().overlay ().size ()); info[jss::peers] = Json::UInt (getApp ().overlay ().size ());
Json::Value lastClose = Json::objectValue; Json::Value lastClose = Json::objectValue;
lastClose["proposers"] = getApp().getOPs ().getPreviousProposers (); lastClose[jss::proposers] = getApp().getOPs ().getPreviousProposers ();
if (human) if (human)
lastClose["converge_time_s"] = static_cast<double> (getApp().getOPs ().getPreviousConvergeTime ()) / 1000.0; lastClose[jss::converge_time_s] = static_cast<double> (getApp().getOPs ().getPreviousConvergeTime ()) / 1000.0;
else else
lastClose["converge_time"] = Json::Int (getApp().getOPs ().getPreviousConvergeTime ()); lastClose[jss::converge_time] = Json::Int (getApp().getOPs ().getPreviousConvergeTime ());
info["last_close"] = lastClose; info[jss::last_close] = lastClose;
// if (mConsensus) // if (mConsensus)
// info["consensus"] = mConsensus->getJson(); // info[jss::consensus] = mConsensus->getJson();
if (admin) if (admin)
info["load"] = getApp().getJobQueue ().getJson (); info[jss::load] = getApp().getJobQueue ().getJson ();
if (!human) if (!human)
{ {
info["load_base"] = getApp().getFeeTrack ().getLoadBase (); info[jss::load_base] = getApp().getFeeTrack ().getLoadBase ();
info["load_factor"] = getApp().getFeeTrack ().getLoadFactor (); info[jss::load_factor] = getApp().getFeeTrack ().getLoadFactor ();
} }
else else
{ {
info["load_factor"] = info[jss::load_factor] =
static_cast<double> (getApp().getFeeTrack ().getLoadFactor ()) / getApp().getFeeTrack ().getLoadBase (); static_cast<double> (getApp().getFeeTrack ().getLoadFactor ()) / getApp().getFeeTrack ().getLoadBase ();
if (admin) if (admin)
{ {
std::uint32_t base = getApp().getFeeTrack().getLoadBase(); std::uint32_t base = getApp().getFeeTrack().getLoadBase();
std::uint32_t fee = getApp().getFeeTrack().getLocalFee(); std::uint32_t fee = getApp().getFeeTrack().getLocalFee();
if (fee != base) if (fee != base)
info["load_factor_local"] = info[jss::load_factor_local] =
static_cast<double> (fee) / base; static_cast<double> (fee) / base;
fee = getApp().getFeeTrack ().getRemoteFee(); fee = getApp().getFeeTrack ().getRemoteFee();
if (fee != base) if (fee != base)
info["load_factor_net"] = info[jss::load_factor_net] =
static_cast<double> (fee) / base; static_cast<double> (fee) / base;
fee = getApp().getFeeTrack().getClusterFee(); fee = getApp().getFeeTrack().getClusterFee();
if (fee != base) if (fee != base)
info["load_factor_cluster"] = info[jss::load_factor_cluster] =
static_cast<double> (fee) / base; static_cast<double> (fee) / base;
} }
} }
@@ -2273,22 +2274,22 @@ Json::Value NetworkOPsImp::getServerInfo (bool human, bool admin)
std::uint64_t baseFee = lpClosed->getBaseFee (); std::uint64_t baseFee = lpClosed->getBaseFee ();
std::uint64_t baseRef = lpClosed->getReferenceFeeUnits (); std::uint64_t baseRef = lpClosed->getReferenceFeeUnits ();
Json::Value l (Json::objectValue); Json::Value l (Json::objectValue);
l["seq"] = Json::UInt (lpClosed->getLedgerSeq ()); l[jss::seq] = Json::UInt (lpClosed->getLedgerSeq ());
l["hash"] = lpClosed->getHash ().GetHex (); l[jss::hash] = lpClosed->getHash ().GetHex ();
if (!human) if (!human)
{ {
l["base_fee"] = Json::Value::UInt (baseFee); l[jss::base_fee] = Json::Value::UInt (baseFee);
l["reserve_base"] = Json::Value::UInt (lpClosed->getReserve (0)); l[jss::reserve_base] = Json::Value::UInt (lpClosed->getReserve (0));
l["reserve_inc"] = Json::Value::UInt (lpClosed->getReserveInc ()); l[jss::reserve_inc] = Json::Value::UInt (lpClosed->getReserveInc ());
l["close_time"] = Json::Value::UInt (lpClosed->getCloseTimeNC ()); l[jss::close_time] = Json::Value::UInt (lpClosed->getCloseTimeNC ());
} }
else else
{ {
l["base_fee_xrp"] = static_cast<double> (baseFee) / SYSTEM_CURRENCY_PARTS; l[jss::base_fee_xrp] = static_cast<double> (baseFee) / SYSTEM_CURRENCY_PARTS;
l["reserve_base_xrp"] = l[jss::reserve_base_xrp] =
static_cast<double> (Json::UInt (lpClosed->getReserve (0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; static_cast<double> (Json::UInt (lpClosed->getReserve (0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS;
l["reserve_inc_xrp"] = l[jss::reserve_inc_xrp] =
static_cast<double> (Json::UInt (lpClosed->getReserveInc () * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; static_cast<double> (Json::UInt (lpClosed->getReserveInc () * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS;
std::uint32_t closeTime = getCloseTimeNC (); std::uint32_t closeTime = getCloseTimeNC ();
@@ -2299,20 +2300,20 @@ Json::Value NetworkOPsImp::getServerInfo (bool human, bool admin)
std::uint32_t age = closeTime - lCloseTime; std::uint32_t age = closeTime - lCloseTime;
if (age < 1000000) if (age < 1000000)
l["age"] = Json::UInt (age); l[jss::age] = Json::UInt (age);
} }
} }
if (valid) if (valid)
info["validated_ledger"] = l; info[jss::validated_ledger] = l;
else else
info["closed_ledger"] = l; info[jss::closed_ledger] = l;
Ledger::pointer lpPublished = getPublishedLedger (); Ledger::pointer lpPublished = getPublishedLedger ();
if (!lpPublished) if (!lpPublished)
info["published_ledger"] = "none"; info[jss::published_ledger] = jss::none;
else if (lpPublished->getLedgerSeq() != lpClosed->getLedgerSeq()) else if (lpPublished->getLedgerSeq() != lpClosed->getLedgerSeq())
info["published_ledger"] = lpPublished->getLedgerSeq(); info[jss::published_ledger] = lpPublished->getLedgerSeq();
} }
return info; return info;
@@ -2387,20 +2388,20 @@ void NetworkOPsImp::pubLedger (Ledger::ref accepted)
{ {
Json::Value jvObj (Json::objectValue); Json::Value jvObj (Json::objectValue);
jvObj["type"] = "ledgerClosed"; jvObj[jss::type] = jss::ledgerClosed;
jvObj["ledger_index"] = lpAccepted->getLedgerSeq (); jvObj[jss::ledger_index] = lpAccepted->getLedgerSeq ();
jvObj["ledger_hash"] = lpAccepted->getHash ().ToString (); jvObj[jss::ledger_hash] = lpAccepted->getHash ().ToString ();
jvObj["ledger_time"] = Json::Value::UInt (lpAccepted->getCloseTimeNC ()); jvObj[jss::ledger_time] = Json::Value::UInt (lpAccepted->getCloseTimeNC ());
jvObj["fee_ref"] = Json::UInt (lpAccepted->getReferenceFeeUnits ()); jvObj[jss::fee_ref] = Json::UInt (lpAccepted->getReferenceFeeUnits ());
jvObj["fee_base"] = Json::UInt (lpAccepted->getBaseFee ()); jvObj[jss::fee_base] = Json::UInt (lpAccepted->getBaseFee ());
jvObj["reserve_base"] = Json::UInt (lpAccepted->getReserve (0)); jvObj[jss::reserve_base] = Json::UInt (lpAccepted->getReserve (0));
jvObj["reserve_inc"] = Json::UInt (lpAccepted->getReserveInc ()); jvObj[jss::reserve_inc] = Json::UInt (lpAccepted->getReserveInc ());
jvObj["txn_count"] = Json::UInt (alpAccepted->getTxnCount ()); jvObj[jss::txn_count] = Json::UInt (alpAccepted->getTxnCount ());
if (mMode >= omSYNCING) if (mMode >= omSYNCING)
jvObj["validated_ledgers"] = getApp().getLedgerMaster ().getCompleteLedgers (); jvObj[jss::validated_ledgers] = getApp().getLedgerMaster ().getCompleteLedgers ();
NetworkOPsImp::SubMapType::const_iterator it = mSubLedger.begin (); NetworkOPsImp::SubMapType::const_iterator it = mSubLedger.begin ();
@@ -2446,29 +2447,29 @@ Json::Value NetworkOPsImp::transJson (const SerializedTransaction& stTxn, TER te
transResultInfo (terResult, sToken, sHuman); transResultInfo (terResult, sToken, sHuman);
jvObj["type"] = "transaction"; jvObj[jss::type] = jss::transaction;
jvObj["transaction"] = stTxn.getJson (0); jvObj[jss::transaction] = stTxn.getJson (0);
if (bValidated) if (bValidated)
{ {
jvObj["ledger_index"] = lpCurrent->getLedgerSeq (); jvObj[jss::ledger_index] = lpCurrent->getLedgerSeq ();
jvObj["ledger_hash"] = lpCurrent->getHash ().ToString (); jvObj[jss::ledger_hash] = lpCurrent->getHash ().ToString ();
jvObj["transaction"]["date"] = lpCurrent->getCloseTimeNC (); jvObj[jss::transaction][jss::date] = lpCurrent->getCloseTimeNC ();
jvObj["validated"] = true; jvObj[jss::validated] = true;
// WRITEME: Put the account next seq here // WRITEME: Put the account next seq here
} }
else else
{ {
jvObj["validated"] = false; jvObj[jss::validated] = false;
jvObj["ledger_current_index"] = lpCurrent->getLedgerSeq (); jvObj[jss::ledger_current_index] = lpCurrent->getLedgerSeq ();
} }
jvObj["status"] = bValidated ? "closed" : "proposed"; jvObj[jss::status] = bValidated ? jss::closed : jss::proposed;
jvObj["engine_result"] = sToken; jvObj[jss::engine_result] = sToken;
jvObj["engine_result_code"] = terResult; jvObj[jss::engine_result_code] = terResult;
jvObj["engine_result_message"] = sHuman; jvObj[jss::engine_result_message] = sHuman;
return jvObj; return jvObj;
} }
@@ -2476,7 +2477,7 @@ Json::Value NetworkOPsImp::transJson (const SerializedTransaction& stTxn, TER te
void NetworkOPsImp::pubValidatedTransaction (Ledger::ref alAccepted, const AcceptedLedgerTx& alTx) void NetworkOPsImp::pubValidatedTransaction (Ledger::ref alAccepted, const AcceptedLedgerTx& alTx)
{ {
Json::Value jvObj = transJson (*alTx.getTxn (), alTx.getResult (), true, alAccepted); Json::Value jvObj = transJson (*alTx.getTxn (), alTx.getResult (), true, alAccepted);
jvObj["meta"] = alTx.getMeta ()->getJson (0); jvObj[jss::meta] = alTx.getMeta ()->getJson (0);
Json::FastWriter w; Json::FastWriter w;
std::string sObj = w.write (jvObj); std::string sObj = w.write (jvObj);
@@ -2590,7 +2591,7 @@ void NetworkOPsImp::pubAccountTransaction (Ledger::ref lpCurrent, const Accepted
*alTx.getTxn (), alTx.getResult (), bAccepted, lpCurrent); *alTx.getTxn (), alTx.getResult (), bAccepted, lpCurrent);
if (alTx.isApplied ()) if (alTx.isApplied ())
jvObj["meta"] = alTx.getMeta ()->getJson (0); jvObj[jss::meta] = alTx.getMeta ()->getJson (0);
Json::FastWriter w; Json::FastWriter w;
std::string sObj = w.write (jvObj); std::string sObj = w.write (jvObj);
@@ -2749,18 +2750,18 @@ bool NetworkOPsImp::subLedger (InfoSub::ref isrListener, Json::Value& jvResult)
if (lpClosed) if (lpClosed)
{ {
jvResult["ledger_index"] = lpClosed->getLedgerSeq (); jvResult[jss::ledger_index] = lpClosed->getLedgerSeq ();
jvResult["ledger_hash"] = lpClosed->getHash ().ToString (); jvResult[jss::ledger_hash] = lpClosed->getHash ().ToString ();
jvResult["ledger_time"] = Json::Value::UInt (lpClosed->getCloseTimeNC ()); jvResult[jss::ledger_time] = Json::Value::UInt (lpClosed->getCloseTimeNC ());
jvResult["fee_ref"] = Json::UInt (lpClosed->getReferenceFeeUnits ()); jvResult[jss::fee_ref] = Json::UInt (lpClosed->getReferenceFeeUnits ());
jvResult["fee_base"] = Json::UInt (lpClosed->getBaseFee ()); jvResult[jss::fee_base] = Json::UInt (lpClosed->getBaseFee ());
jvResult["reserve_base"] = Json::UInt (lpClosed->getReserve (0)); jvResult[jss::reserve_base] = Json::UInt (lpClosed->getReserve (0));
jvResult["reserve_inc"] = Json::UInt (lpClosed->getReserveInc ()); jvResult[jss::reserve_inc] = Json::UInt (lpClosed->getReserveInc ());
} }
if ((mMode >= omSYNCING) && !isNeedNetworkLedger ()) if ((mMode >= omSYNCING) && !isNeedNetworkLedger ())
jvResult["validated_ledgers"] = getApp().getLedgerMaster ().getCompleteLedgers (); jvResult[jss::validated_ledgers] = getApp().getLedgerMaster ().getCompleteLedgers ();
ScopedLockType sl (mLock); ScopedLockType sl (mLock);
return mSubLedger.emplace (isrListener->getSeq (), isrListener).second; return mSubLedger.emplace (isrListener->getSeq (), isrListener).second;
@@ -2779,13 +2780,13 @@ bool NetworkOPsImp::subServer (InfoSub::ref isrListener, Json::Value& jvResult)
uint256 uRandom; uint256 uRandom;
if (getConfig ().RUN_STANDALONE) if (getConfig ().RUN_STANDALONE)
jvResult["stand_alone"] = getConfig ().RUN_STANDALONE; jvResult[jss::stand_alone] = getConfig ().RUN_STANDALONE;
RandomNumbers::getInstance ().fillBytes (uRandom.begin (), uRandom.size ()); RandomNumbers::getInstance ().fillBytes (uRandom.begin (), uRandom.size ());
jvResult["random"] = uRandom.ToString (); jvResult[jss::random] = uRandom.ToString ();
jvResult["server_status"] = strOperatingMode (); jvResult[jss::server_status] = strOperatingMode ();
jvResult["load_base"] = getApp().getFeeTrack ().getLoadBase (); jvResult[jss::load_base] = getApp().getFeeTrack ().getLoadBase ();
jvResult["load_factor"] = getApp().getFeeTrack ().getLoadFactor (); jvResult[jss::load_factor] = getApp().getFeeTrack ().getLoadFactor ();
ScopedLockType sl (mLock); ScopedLockType sl (mLock);
return mSubServer.emplace (isrListener->getSeq (), isrListener).second; return mSubServer.emplace (isrListener->getSeq (), isrListener).second;
@@ -2854,7 +2855,7 @@ InfoSub::pointer NetworkOPsImp::addRpcSub (const std::string& strUrl, InfoSub::r
// FIXME : support iLimit. // FIXME : support iLimit.
void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTakerPaysCurrencyID, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrencyID, const uint160& uTakerGetsIssuerID, const uint160& uTakerID, const bool bProof, const unsigned int iLimit, const Json::Value& jvMarker, Json::Value& jvResult) void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTakerPaysCurrencyID, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrencyID, const uint160& uTakerGetsIssuerID, const uint160& uTakerID, const bool bProof, const unsigned int iLimit, const Json::Value& jvMarker, Json::Value& jvResult)
{ // CAUTION: This is the old get book page logic { // CAUTION: This is the old get book page logic
Json::Value& jvOffers = (jvResult["offers"] = Json::Value (Json::arrayValue)); Json::Value& jvOffers = (jvResult[jss::offers] = Json::Value (Json::arrayValue));
std::map<uint160, STAmount> umBalance; std::map<uint160, STAmount> umBalance;
const uint256 uBookBase = Ledger::getBookBase (uTakerPaysCurrencyID, uTakerPaysIssuerID, uTakerGetsCurrencyID, uTakerGetsIssuerID); const uint256 uBookBase = Ledger::getBookBase (uTakerPaysCurrencyID, uTakerPaysIssuerID, uTakerGetsCurrencyID, uTakerGetsIssuerID);
@@ -3004,8 +3005,10 @@ void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTaker
saTakerGetsFunded = saOwnerFundsLimit; saTakerGetsFunded = saOwnerFundsLimit;
saTakerGetsFunded.setJson (jvOffer["taker_gets_funded"]); saTakerGetsFunded.setJson (jvOffer[jss::taker_gets_funded]);
std::min (saTakerPays, STAmount::multiply (saTakerGetsFunded, saDirRate, saTakerPays)).setJson (jvOffer["taker_pays_funded"]); std::min (saTakerPays,
STAmount::multiply (saTakerGetsFunded, saDirRate, saTakerPays)).setJson
(jvOffer[jss::taker_pays_funded]);
} }
STAmount saOwnerPays = (QUALITY_ONE == uOfferRate) STAmount saOwnerPays = (QUALITY_ONE == uOfferRate)
@@ -3022,7 +3025,7 @@ void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTaker
{ {
// Only provide funded offers and offers of the taker. // Only provide funded offers and offers of the taker.
Json::Value& jvOf = jvOffers.append (jvOffer); Json::Value& jvOf = jvOffers.append (jvOffer);
jvOf["quality"] = saDirRate.getText (); jvOf[jss::quality] = saDirRate.getText ();
} }
} }
else else
@@ -3054,7 +3057,7 @@ void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTaker
// FIXME : support iLimit. // FIXME : support iLimit.
void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTakerPaysCurrencyID, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrencyID, const uint160& uTakerGetsIssuerID, const uint160& uTakerID, const bool bProof, const unsigned int iLimit, const Json::Value& jvMarker, Json::Value& jvResult) void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTakerPaysCurrencyID, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrencyID, const uint160& uTakerGetsIssuerID, const uint160& uTakerID, const bool bProof, const unsigned int iLimit, const Json::Value& jvMarker, Json::Value& jvResult)
{ {
Json::Value& jvOffers = (jvResult["offers"] = Json::Value (Json::arrayValue)); Json::Value& jvOffers = (jvResult[jss::offers] = Json::Value (Json::arrayValue));
std::map<uint160, STAmount> umBalance; std::map<uint160, STAmount> umBalance;
@@ -3151,8 +3154,8 @@ void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTaker
saTakerGetsFunded = saOwnerFundsLimit; saTakerGetsFunded = saOwnerFundsLimit;
saTakerGetsFunded.setJson (jvOffer["taker_gets_funded"]); saTakerGetsFunded.setJson (jvOffer[jss::taker_gets_funded]);
std::min (saTakerPays, STAmount::multiply (saTakerGetsFunded, saDirRate, saTakerPays)).setJson (jvOffer["taker_pays_funded"]); std::min (saTakerPays, STAmount::multiply (saTakerGetsFunded, saDirRate, saTakerPays)).setJson (jvOffer[jss::taker_pays_funded]);
} }
STAmount saOwnerPays = (QUALITY_ONE == uOfferRate) STAmount saOwnerPays = (QUALITY_ONE == uOfferRate)
@@ -3165,7 +3168,7 @@ void NetworkOPsImp::getBookPage (Ledger::pointer lpLedger, const uint160& uTaker
{ {
// Only provide funded offers and offers of the taker. // Only provide funded offers and offers of the taker.
Json::Value& jvOf = jvOffers.append (jvOffer); Json::Value& jvOf = jvOffers.append (jvOffer);
jvOf["quality"] = saDirRate.getText (); jvOf[jss::quality] = saDirRate.getText ();
} }
} }

View File

@@ -32,6 +32,7 @@
#include "../ripple_net/ripple_net.h" #include "../ripple_net/ripple_net.h"
#include "../ripple_rpc/ripple_rpc.h" #include "../ripple_rpc/ripple_rpc.h"
#include "../ripple_websocket/ripple_websocket.h" #include "../ripple_websocket/ripple_websocket.h"
#include "../ripple/common/jsonrpc_fields.h"
// This .cpp will end up including all of the public header // This .cpp will end up including all of the public header
// material in Ripple since it holds the Application object. // material in Ripple since it holds the Application object.

View File

@@ -21,6 +21,7 @@
#include "ripple_app.h" #include "ripple_app.h"
#include "../ripple_net/ripple_net.h" #include "../ripple_net/ripple_net.h"
#include "../ripple/common/jsonrpc_fields.h"
#include "../ripple/common/seconds_clock.h" #include "../ripple/common/seconds_clock.h"
#include "../ripple/peerfinder/ripple_peerfinder.h" #include "../ripple/peerfinder/ripple_peerfinder.h"

View File

@@ -57,20 +57,20 @@ Json::Value RPCHandler::doRpcCommand (const std::string& strMethod, Json::Value
return logRPCError (rpcError (rpcINVALID_PARAMS)); return logRPCError (rpcError (rpcINVALID_PARAMS));
// Provide the JSON-RPC method as the field "command" in the request. // Provide the JSON-RPC method as the field "command" in the request.
params["command"] = strMethod; params[jss::command] = strMethod;
Json::Value jvResult = doCommand (params, iRole, loadType); Json::Value jvResult = doCommand (params, iRole, loadType);
// Always report "status". On an error report the request as received. // Always report "status". On an error report the request as received.
if (jvResult.isMember ("error")) if (jvResult.isMember ("error"))
{ {
jvResult["status"] = "error"; jvResult[jss::status] = jss::error;
jvResult["request"] = params; jvResult[jss::request] = params;
} }
else else
{ {
jvResult["status"] = "success"; jvResult[jss::status] = jss::success;
} }
return logRPCError (jvResult); return logRPCError (jvResult);
@@ -103,7 +103,7 @@ Json::Value RPCHandler::doCommand (const Json::Value& params, int iRole, Resourc
if (!params.isMember ("command")) if (!params.isMember ("command"))
return rpcError (rpcCOMMAND_MISSING); return rpcError (rpcCOMMAND_MISSING);
std::string strCommand = params["command"].asString (); std::string strCommand = params[jss::command].asString ();
WriteLog (lsTRACE, RPCHandler) << "COMMAND:" << strCommand; WriteLog (lsTRACE, RPCHandler) << "COMMAND:" << strCommand;
WriteLog (lsTRACE, RPCHandler) << "REQUEST:" << params; WriteLog (lsTRACE, RPCHandler) << "REQUEST:" << params;
@@ -232,7 +232,7 @@ Json::Value RPCHandler::doCommand (const Json::Value& params, int iRole, Resourc
// Probably got a string. // Probably got a string.
Json::Value jvResult (Json::objectValue); Json::Value jvResult (Json::objectValue);
jvResult["message"] = jvRaw; jvResult[jss::message] = jvRaw;
return jvResult; return jvResult;
} }

View File

@@ -132,18 +132,18 @@ Json::Value WSConnection::invokeCommand (Json::Value& jvRequest)
// Requests without "command" are invalid. // Requests without "command" are invalid.
// //
if (!jvRequest.isMember ("command")) if (!jvRequest.isMember (jss::command))
{ {
Json::Value jvResult (Json::objectValue); Json::Value jvResult (Json::objectValue);
jvResult["type"] = "response"; jvResult[jss::type] = jss::response;
jvResult["status"] = "error"; jvResult[jss::status] = jss::error;
jvResult["error"] = "missingCommand"; jvResult[jss::error] = jss::missingCommand;
jvResult["request"] = jvRequest; jvResult[jss::request] = jvRequest;
if (jvRequest.isMember ("id")) if (jvRequest.isMember (jss::id))
{ {
jvResult["id"] = jvRequest["id"]; jvResult[jss::id] = jvRequest[jss::id];
} }
getConsumer().charge (Resource::feeInvalidRPC); getConsumer().charge (Resource::feeInvalidRPC);
@@ -162,17 +162,17 @@ Json::Value WSConnection::invokeCommand (Json::Value& jvRequest)
if (Config::FORBID == role) if (Config::FORBID == role)
{ {
jvResult["result"] = rpcError (rpcFORBIDDEN); jvResult[jss::result] = rpcError (rpcFORBIDDEN);
} }
else else
{ {
jvResult["result"] = mRPCHandler.doCommand (jvRequest, role, loadType); jvResult[jss::result] = mRPCHandler.doCommand (jvRequest, role, loadType);
} }
getConsumer().charge (loadType); getConsumer().charge (loadType);
if (getConsumer().warn ()) if (getConsumer().warn ())
{ {
jvResult["warning"] = "load"; jvResult[jss::warning] = jss::load;
} }
// Currently we will simply unwrap errors returned by the RPC // Currently we will simply unwrap errors returned by the RPC
@@ -180,24 +180,24 @@ Json::Value WSConnection::invokeCommand (Json::Value& jvRequest)
// consistent. // consistent.
// //
// Regularize result. This is duplicate code. // Regularize result. This is duplicate code.
if (jvResult["result"].isMember ("error")) if (jvResult[jss::result].isMember (jss::error))
{ {
jvResult = jvResult["result"]; jvResult = jvResult[jss::result];
jvResult["status"] = "error"; jvResult[jss::status] = jss::error;
jvResult["request"] = jvRequest; jvResult[jss::request] = jvRequest;
} }
else else
{ {
jvResult["status"] = "success"; jvResult[jss::status] = jss::success;
} }
if (jvRequest.isMember ("id")) if (jvRequest.isMember (jss::id))
{ {
jvResult["id"] = jvRequest["id"]; jvResult[jss::id] = jvRequest[jss::id];
} }
jvResult["type"] = "response"; jvResult[jss::type] = jss::response;
return jvResult; return jvResult;
} }

View File

@@ -368,8 +368,8 @@ public:
{ {
Json::Value jvResult (Json::objectValue); Json::Value jvResult (Json::objectValue);
jvResult["type"] = "error"; jvResult[jss::type] = jss::error;
jvResult["error"] = "wsTextRequired"; // We only accept text messages. jvResult[jss::error] = "wsTextRequired"; // We only accept text messages.
send (cpClient, jvResult, false); send (cpClient, jvResult, false);
} }
@@ -377,17 +377,17 @@ public:
{ {
Json::Value jvResult (Json::objectValue); Json::Value jvResult (Json::objectValue);
jvResult["type"] = "error"; jvResult[jss::type] = jss::error;
jvResult["error"] = "jsonInvalid"; // Received invalid json. jvResult[jss::error] = "jsonInvalid"; // Received invalid json.
jvResult["value"] = mpMessage->get_payload (); jvResult[jss::value] = mpMessage->get_payload ();
send (cpClient, jvResult, false); send (cpClient, jvResult, false);
} }
else else
{ {
if (jvRequest.isMember ("command")) if (jvRequest.isMember (jss::command))
{ {
Json::Value& jCmd = jvRequest["command"]; Json::Value& jCmd = jvRequest[jss::command];
if (jCmd.isString()) if (jCmd.isString())
job.rename (std::string ("WSClient::") + jCmd.asString()); job.rename (std::string ("WSClient::") + jCmd.asString());
} }

View File

@@ -20,6 +20,8 @@
#ifndef RIPPLE_LOADFEETRACKIMP_H_INCLUDED #ifndef RIPPLE_LOADFEETRACKIMP_H_INCLUDED
#define RIPPLE_LOADFEETRACKIMP_H_INCLUDED #define RIPPLE_LOADFEETRACKIMP_H_INCLUDED
#include "../../ripple/common/jsonrpc_fields.h"
namespace ripple { namespace ripple {
class LoadFeeTrackImp : public LoadFeeTrack class LoadFeeTrackImp : public LoadFeeTrack
@@ -187,10 +189,10 @@ public:
ScopedLockType sl (mLock); ScopedLockType sl (mLock);
// base_fee = The cost to send a "reference" transaction under no load, in millionths of a Ripple // base_fee = The cost to send a "reference" transaction under no load, in millionths of a Ripple
j["base_fee"] = Json::Value::UInt (baseFee); j[jss::base_fee] = Json::Value::UInt (baseFee);
// load_fee = The cost to send a "reference" transaction now, in millionths of a Ripple // load_fee = The cost to send a "reference" transaction now, in millionths of a Ripple
j["load_fee"] = Json::Value::UInt ( j[jss::load_fee] = Json::Value::UInt (
mulDiv (baseFee, std::max (mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee)); mulDiv (baseFee, std::max (mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee));
} }

View File

@@ -62,12 +62,14 @@ static const int f = initFields ();
SField::SField (SerializedTypeID tid, int fv) : fieldCode (FIELD_CODE (tid, fv)), fieldType (tid), fieldValue (fv), SField::SField (SerializedTypeID tid, int fv) : fieldCode (FIELD_CODE (tid, fv)), fieldType (tid), fieldValue (fv),
fieldMeta (sMD_Default), fieldNum (++num), signingField (true) fieldMeta (sMD_Default), fieldNum (++num), signingField (true), jsonName (nullptr)
{ {
// call with the map mutex // call with the map mutex
fieldName = beast::lexicalCast <std::string> (tid) + "/" + fieldName = beast::lexicalCast <std::string> (tid) + "/" +
beast::lexicalCast <std::string> (fv); beast::lexicalCast <std::string> (fv);
codeToField[fieldCode] = this; codeToField[fieldCode] = this;
rawJsonName = getName ();
jsonName = Json::StaticString (rawJsonName.c_str ());
assert ((fv != 1) || ((tid != STI_ARRAY) && (tid != STI_OBJECT))); assert ((fv != 1) || ((tid != STI_ARRAY) && (tid != STI_OBJECT)));
} }

View File

@@ -73,6 +73,11 @@ public:
int fieldMeta; int fieldMeta;
int fieldNum; int fieldNum;
bool signingField; bool signingField;
std::string rawJsonName;
Json::StaticString jsonName;
SField(SField const&) = delete;
SField& operator=(SField const&) = delete;
SField (int fc, SerializedTypeID tid, int fv, const char* fn) SField (int fc, SerializedTypeID tid, int fv, const char* fn)
: fieldCode (fc) : fieldCode (fc)
@@ -81,6 +86,8 @@ public:
, fieldName (fn) , fieldName (fn)
, fieldMeta (sMD_Default) , fieldMeta (sMD_Default)
, signingField (true) , signingField (true)
, rawJsonName (getName ())
, jsonName (rawJsonName.c_str ())
{ {
StaticScopedLockType sl (getMutex ()); StaticScopedLockType sl (getMutex ());
@@ -96,6 +103,8 @@ public:
, fieldName (fn) , fieldName (fn)
, fieldMeta (sMD_Default) , fieldMeta (sMD_Default)
, signingField (true) , signingField (true)
, rawJsonName (getName ())
, jsonName (rawJsonName.c_str ())
{ {
StaticScopedLockType sl (getMutex ()); StaticScopedLockType sl (getMutex ());
@@ -110,6 +119,8 @@ public:
, fieldValue (0) , fieldValue (0)
, fieldMeta (sMD_Never) , fieldMeta (sMD_Never)
, signingField (true) , signingField (true)
, rawJsonName (getName ())
, jsonName (rawJsonName.c_str ())
{ {
StaticScopedLockType sl (getMutex ()); StaticScopedLockType sl (getMutex ());
fieldNum = ++num; fieldNum = ++num;
@@ -134,6 +145,11 @@ public:
return !fieldName.empty (); return !fieldName.empty ();
} }
Json::StaticString const& getJsonName () const
{
return jsonName;
}
bool isGeneric () const bool isGeneric () const
{ {
return fieldCode == 0; return fieldCode == 0;

View File

@@ -123,9 +123,9 @@ STAmount::STAmount (SField::ref n, const Json::Value& v)
"', issuer='" << v["issuer"].asString () << "', issuer='" << v["issuer"].asString () <<
"')"; "')";
value = v["value"]; value = v[jss::value];
currency = v["currency"]; currency = v[jss::currency];
issuer = v["issuer"]; issuer = v[jss::issuer];
} }
else if (v.isArray ()) else if (v.isArray ())
{ {
@@ -1131,9 +1131,9 @@ void STAmount::setJson (Json::Value& elem) const
{ {
// It is an error for currency or issuer not to be specified for valid json. // It is an error for currency or issuer not to be specified for valid json.
elem["value"] = getText (); elem[jss::value] = getText ();
elem["currency"] = getHumanCurrency (); elem[jss::currency] = getHumanCurrency ();
elem["issuer"] = RippleAddress::createHumanAccountID (mIssuer); elem[jss::issuer] = RippleAddress::createHumanAccountID (mIssuer);
} }
else else
{ {

View File

@@ -1080,7 +1080,7 @@ Json::Value STObject::getJson (int options) const
if (!it.getFName ().hasName ()) if (!it.getFName ().hasName ())
ret[beast::lexicalCast <std::string> (index)] = it.getJson (options); ret[beast::lexicalCast <std::string> (index)] = it.getJson (options);
else else
ret[it.getName ()] = it.getJson (options); ret[it.getJsonName ()] = it.getJson (options);
} }
} }
return ret; return ret;

View File

@@ -505,17 +505,17 @@ Json::Value STPath::getJson (int) const
Json::Value elem (Json::objectValue); Json::Value elem (Json::objectValue);
int iType = it.getNodeType (); int iType = it.getNodeType ();
elem["type"] = iType; elem[jss::type] = iType;
elem["type_hex"] = strHex (iType); elem[jss::type_hex] = strHex (iType);
if (iType & STPathElement::typeAccount) if (iType & STPathElement::typeAccount)
elem["account"] = RippleAddress::createHumanAccountID (it.getAccountID ()); elem[jss::account] = RippleAddress::createHumanAccountID (it.getAccountID ());
if (iType & STPathElement::typeCurrency) if (iType & STPathElement::typeCurrency)
elem["currency"] = STAmount::createHumanCurrency (it.getCurrency ()); elem[jss::currency] = STAmount::createHumanCurrency (it.getCurrency ());
if (iType & STPathElement::typeIssuer) if (iType & STPathElement::typeIssuer)
elem["issuer"] = RippleAddress::createHumanAccountID (it.getIssuerID ()); elem[jss::issuer] = RippleAddress::createHumanAccountID (it.getIssuerID ());
ret.append (elem); ret.append (elem);
} }

View File

@@ -120,6 +120,10 @@ public:
{ {
return fName->fieldName; return fName->fieldName;
} }
Json::StaticString const& getJsonName () const
{
return fName->getJsonName ();
}
virtual SerializedTypeID getSType () const virtual SerializedTypeID getSType () const
{ {

View File

@@ -44,6 +44,7 @@
#include "../ripple/sslutil/ripple_sslutil.h" #include "../ripple/sslutil/ripple_sslutil.h"
#include "../ripple_rpc/api/ErrorCodes.h" #include "../ripple_rpc/api/ErrorCodes.h"
#include "../ripple/common/jsonrpc_fields.h"
// VFALCO TODO fix these warnings! // VFALCO TODO fix these warnings!
#if BEAST_MSVC #if BEAST_MSVC

View File

@@ -46,6 +46,7 @@
// still uses the unity style inclusion. // still uses the unity style inclusion.
// //
#include "../ripple_rpc/api/ErrorCodes.h" #include "../ripple_rpc/api/ErrorCodes.h"
#include "../ripple/common/jsonrpc_fields.h"
#include "basics/HTTPRequest.cpp" #include "basics/HTTPRequest.cpp"
#include "basics/HTTPClient.cpp" #include "basics/HTTPClient.cpp"

View File

@@ -39,8 +39,8 @@ Json::Value JSONRPCError (int code, const std::string& message)
{ {
Json::Value error (Json::objectValue); Json::Value error (Json::objectValue);
error["code"] = Json::Value (code); error[jss::code] = Json::Value (code);
error["message"] = Json::Value (message); error[jss::message] = Json::Value (message);
return error; return error;
} }
@@ -297,9 +297,9 @@ bool HTTPAuthorized (const std::map<std::string, std::string>& mapHeaders)
std::string JSONRPCRequest (const std::string& strMethod, const Json::Value& params, const Json::Value& id) std::string JSONRPCRequest (const std::string& strMethod, const Json::Value& params, const Json::Value& id)
{ {
Json::Value request; Json::Value request;
request["method"] = strMethod; request[jss::method] = strMethod;
request["params"] = params; request[jss::params] = params;
request["id"] = id; request[jss::id] = id;
Json::FastWriter writer; Json::FastWriter writer;
return writer.write (request) + "\n"; return writer.write (request) + "\n";
} }
@@ -307,7 +307,7 @@ std::string JSONRPCRequest (const std::string& strMethod, const Json::Value& par
std::string JSONRPCReply (const Json::Value& result, const Json::Value& error, const Json::Value& id) std::string JSONRPCReply (const Json::Value& result, const Json::Value& error, const Json::Value& id)
{ {
Json::Value reply (Json::objectValue); Json::Value reply (Json::objectValue);
reply["result"] = result; reply[jss::result] = result;
//reply["error"]=error; //reply["error"]=error;
//reply["id"]=id; //reply["id"]=id;
Json::FastWriter writer; Json::FastWriter writer;
@@ -318,7 +318,7 @@ void ErrorReply (std::ostream& stream, const Json::Value& objError, const Json::
{ {
// Send error reply from json-rpc error object // Send error reply from json-rpc error object
int nStatus = 500; int nStatus = 500;
int code = objError["code"].asInt (); int code = objError[jss::code].asInt ();
if (code == -32600) nStatus = 400; if (code == -32600) nStatus = 400;
else if (code == -32601) nStatus = 404; else if (code == -32601) nStatus = 404;

View File

@@ -36,12 +36,12 @@ Json::Value RPCHandler::doAccountLines (Json::Value params, Resource::Charge& lo
if (!lpLedger) if (!lpLedger)
return jvResult; return jvResult;
if (!params.isMember ("account")) if (!params.isMember (jss::account))
return RPC::missing_field_error ("account"); return RPC::missing_field_error ("account");
std::string strIdent = params["account"].asString (); std::string strIdent = params[jss::account].asString ();
bool bIndex = params.isMember ("account_index"); bool bIndex = params.isMember (jss::account_index);
int iIndex = bIndex ? params["account_index"].asUInt () : 0; int iIndex = bIndex ? params[jss::account_index].asUInt () : 0;
RippleAddress raAccount; RippleAddress raAccount;
@@ -50,18 +50,18 @@ Json::Value RPCHandler::doAccountLines (Json::Value params, Resource::Charge& lo
if (!jvResult.empty ()) if (!jvResult.empty ())
return jvResult; return jvResult;
std::string strPeer = params.isMember ("peer") ? params["peer"].asString () : ""; std::string strPeer = params.isMember (jss::peer) ? params[jss::peer].asString () : "";
bool bPeerIndex = params.isMember ("peer_index"); bool bPeerIndex = params.isMember (jss::peer_index);
int iPeerIndex = bIndex ? params["peer_index"].asUInt () : 0; int iPeerIndex = bIndex ? params[jss::peer_index].asUInt () : 0;
RippleAddress raPeer; RippleAddress raPeer;
if (!strPeer.empty ()) if (!strPeer.empty ())
{ {
jvResult["peer"] = raAccount.humanAccountID (); jvResult[jss::peer] = raAccount.humanAccountID ();
if (bPeerIndex) if (bPeerIndex)
jvResult["peer_index"] = iPeerIndex; jvResult[jss::peer_index] = iPeerIndex;
jvResult = RPC::accountFromString (lpLedger, raPeer, bPeerIndex, strPeer, iPeerIndex, false, *mNetOps); jvResult = RPC::accountFromString (lpLedger, raPeer, bPeerIndex, strPeer, iPeerIndex, false, *mNetOps);
@@ -73,8 +73,8 @@ Json::Value RPCHandler::doAccountLines (Json::Value params, Resource::Charge& lo
{ {
AccountItems rippleLines (raAccount.getAccountID (), lpLedger, AccountItem::pointer (new RippleState ())); AccountItems rippleLines (raAccount.getAccountID (), lpLedger, AccountItem::pointer (new RippleState ()));
jvResult["account"] = raAccount.humanAccountID (); jvResult[jss::account] = raAccount.humanAccountID ();
Json::Value& jsonLines = (jvResult["lines"] = Json::arrayValue); Json::Value& jsonLines = (jvResult[jss::lines] = Json::arrayValue);
BOOST_FOREACH (AccountItem::ref item, rippleLines.getItems ()) BOOST_FOREACH (AccountItem::ref item, rippleLines.getItems ())
@@ -89,23 +89,23 @@ Json::Value RPCHandler::doAccountLines (Json::Value params, Resource::Charge& lo
Json::Value& jPeer = jsonLines.append (Json::objectValue); Json::Value& jPeer = jsonLines.append (Json::objectValue);
jPeer["account"] = RippleAddress::createHumanAccountID (line->getAccountIDPeer ()); jPeer[jss::account] = RippleAddress::createHumanAccountID (line->getAccountIDPeer ());
// Amount reported is positive if current account holds other account's IOUs. // Amount reported is positive if current account holds other account's IOUs.
// Amount reported is negative if other account holds current account's IOUs. // Amount reported is negative if other account holds current account's IOUs.
jPeer["balance"] = saBalance.getText (); jPeer[jss::balance] = saBalance.getText ();
jPeer["currency"] = saBalance.getHumanCurrency (); jPeer[jss::currency] = saBalance.getHumanCurrency ();
jPeer["limit"] = saLimit.getText (); jPeer[jss::limit] = saLimit.getText ();
jPeer["limit_peer"] = saLimitPeer.getText (); jPeer[jss::limit_peer] = saLimitPeer.getText ();
jPeer["quality_in"] = static_cast<Json::UInt> (line->getQualityIn ()); jPeer[jss::quality_in] = static_cast<Json::UInt> (line->getQualityIn ());
jPeer["quality_out"] = static_cast<Json::UInt> (line->getQualityOut ()); jPeer[jss::quality_out] = static_cast<Json::UInt> (line->getQualityOut ());
if (line->getAuth()) if (line->getAuth())
jPeer["authorized"] = true; jPeer[jss::authorized] = true;
if (line->getAuthPeer()) if (line->getAuthPeer())
jPeer["peer_authorized"] = true; jPeer[jss::peer_authorized] = true;
if (line->getNoRipple()) if (line->getNoRipple())
jPeer["no_ripple"] = true; jPeer[jss::no_ripple] = true;
if (line->getNoRipplePeer()) if (line->getNoRipplePeer())
jPeer["no_ripple_peer"] = true; jPeer[jss::no_ripple_peer] = true;
} }
} }

View File

@@ -25,10 +25,10 @@ static void offerAdder (Json::Value& jvLines, SLE::ref offer)
if (offer->getType () == ltOFFER) if (offer->getType () == ltOFFER)
{ {
Json::Value& obj = jvLines.append (Json::objectValue); Json::Value& obj = jvLines.append (Json::objectValue);
offer->getFieldAmount (sfTakerPays).setJson (obj["taker_pays"]); offer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
offer->getFieldAmount (sfTakerGets).setJson (obj["taker_gets"]); offer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
obj["seq"] = offer->getFieldU32 (sfSequence); obj[jss::seq] = offer->getFieldU32 (sfSequence);
obj["flags"] = offer->getFieldU32 (sfFlags); obj[jss::flags] = offer->getFieldU32 (sfFlags);
} }
} }
@@ -48,12 +48,12 @@ Json::Value RPCHandler::doAccountOffers (Json::Value params, Resource::Charge& l
if (!lpLedger) if (!lpLedger)
return jvResult; return jvResult;
if (!params.isMember ("account")) if (!params.isMember (jss::account))
return RPC::missing_field_error ("account"); return RPC::missing_field_error ("account");
std::string strIdent = params["account"].asString (); std::string strIdent = params[jss::account].asString ();
bool bIndex = params.isMember ("account_index"); bool bIndex = params.isMember (jss::account_index);
int iIndex = bIndex ? params["account_index"].asUInt () : 0; int iIndex = bIndex ? params[jss::account_index].asUInt () : 0;
RippleAddress raAccount; RippleAddress raAccount;
@@ -64,15 +64,15 @@ Json::Value RPCHandler::doAccountOffers (Json::Value params, Resource::Charge& l
// Get info on account. // Get info on account.
jvResult["account"] = raAccount.humanAccountID (); jvResult[jss::account] = raAccount.humanAccountID ();
if (bIndex) if (bIndex)
jvResult["account_index"] = iIndex; jvResult[jss::account_index] = iIndex;
if (!lpLedger->hasAccount (raAccount)) if (!lpLedger->hasAccount (raAccount))
return rpcError (rpcACT_NOT_FOUND); return rpcError (rpcACT_NOT_FOUND);
Json::Value& jvsOffers = (jvResult["offers"] = Json::arrayValue); Json::Value& jvsOffers = (jvResult[jss::offers] = Json::arrayValue);
lpLedger->visitAccountItems (raAccount.getAccountID (), BIND_TYPE (&offerAdder, boost::ref (jvsOffers), P_1)); lpLedger->visitAccountItems (raAccount.getAccountID (), BIND_TYPE (&offerAdder, boost::ref (jvsOffers), P_1));
loadType = Resource::feeMediumBurdenRPC; loadType = Resource::feeMediumBurdenRPC;

View File

@@ -34,7 +34,7 @@ Json::Value RPCHandler::doAccountTx (Json::Value params, Resource::Charge& loadT
masterLockHolder.unlock (); masterLockHolder.unlock ();
RippleAddress raAccount; RippleAddress raAccount;
int limit = params.isMember ("limit") ? params["limit"].asUInt () : -1; int limit = params.isMember (jss::limit) ? params[jss::limit].asUInt () : -1;
bool bBinary = params.isMember ("binary") && params["binary"].asBool (); bool bBinary = params.isMember ("binary") && params["binary"].asBool ();
bool bForward = params.isMember ("forward") && params["forward"].asBool (); bool bForward = params.isMember ("forward") && params["forward"].asBool ();
std::uint32_t uLedgerMin; std::uint32_t uLedgerMin;
@@ -84,9 +84,9 @@ Json::Value RPCHandler::doAccountTx (Json::Value params, Resource::Charge& loadT
Json::Value resumeToken; Json::Value resumeToken;
if (params.isMember("marker")) if (params.isMember(jss::marker))
{ {
resumeToken = params["marker"]; resumeToken = params[jss::marker];
} }
#ifndef BEAST_DEBUG #ifndef BEAST_DEBUG
@@ -113,7 +113,7 @@ Json::Value RPCHandler::doAccountTx (Json::Value params, Resource::Charge& loadT
jvObj["tx_blob"] = std::get<0> (*it); jvObj["tx_blob"] = std::get<0> (*it);
jvObj["meta"] = std::get<1> (*it); jvObj["meta"] = std::get<1> (*it);
jvObj["ledger_index"] = uLedgerIndex; jvObj["ledger_index"] = uLedgerIndex;
jvObj["validated"] = bValidated && uValidatedMin <= uLedgerIndex && uValidatedMax >= uLedgerIndex; jvObj[jss::validated] = bValidated && uValidatedMin <= uLedgerIndex && uValidatedMax >= uLedgerIndex;
} }
} }
@@ -127,26 +127,26 @@ Json::Value RPCHandler::doAccountTx (Json::Value params, Resource::Charge& loadT
Json::Value& jvObj = jvTxns.append (Json::objectValue); Json::Value& jvObj = jvTxns.append (Json::objectValue);
if (it->first) if (it->first)
jvObj["tx"] = it->first->getJson (1); jvObj[jss::tx] = it->first->getJson (1);
if (it->second) if (it->second)
{ {
std::uint32_t uLedgerIndex = it->second->getLgrSeq (); std::uint32_t uLedgerIndex = it->second->getLgrSeq ();
jvObj["meta"] = it->second->getJson (0); jvObj[jss::meta] = it->second->getJson (0);
jvObj["validated"] = bValidated && uValidatedMin <= uLedgerIndex && uValidatedMax >= uLedgerIndex; jvObj[jss::validated] = bValidated && uValidatedMin <= uLedgerIndex && uValidatedMax >= uLedgerIndex;
} }
} }
} }
//Add information about the original query //Add information about the original query
ret["ledger_index_min"] = uLedgerMin; ret[jss::ledger_index_min] = uLedgerMin;
ret["ledger_index_max"] = uLedgerMax; ret[jss::ledger_index_max] = uLedgerMax;
if (params.isMember ("limit")) if (params.isMember (jss::limit))
ret["limit"] = limit; ret[jss::limit] = limit;
if (!resumeToken.isNull()) if (!resumeToken.isNull())
ret["marker"] = resumeToken; ret[jss::marker] = resumeToken;
return ret; return ret;
#ifndef BEAST_DEBUG #ifndef BEAST_DEBUG

View File

@@ -54,7 +54,7 @@ Json::Value RPCHandler::doSubmit (Json::Value params, Resource::Charge& loadType
} }
catch (std::exception& e) catch (std::exception& e)
{ {
jvResult["error"] = "invalidTransaction"; jvResult[jss::error] = "invalidTransaction";
jvResult["error_exception"] = e.what (); jvResult["error_exception"] = e.what ();
return jvResult; return jvResult;
@@ -68,7 +68,7 @@ Json::Value RPCHandler::doSubmit (Json::Value params, Resource::Charge& loadType
} }
catch (std::exception& e) catch (std::exception& e)
{ {
jvResult["error"] = "internalTransaction"; jvResult[jss::error] = "internalTransaction";
jvResult["error_exception"] = e.what (); jvResult["error_exception"] = e.what ();
return jvResult; return jvResult;
@@ -81,8 +81,8 @@ Json::Value RPCHandler::doSubmit (Json::Value params, Resource::Charge& loadType
} }
catch (std::exception& e) catch (std::exception& e)
{ {
jvResult["error"] = "internalSubmit"; jvResult[jss::error] = "internalSubmit";
jvResult["error_exception"] = e.what (); jvResult[jss::error_exception] = e.what ();
return jvResult; return jvResult;
} }
@@ -90,8 +90,8 @@ Json::Value RPCHandler::doSubmit (Json::Value params, Resource::Charge& loadType
try try
{ {
jvResult["tx_json"] = tpTrans->getJson (0); jvResult[jss::tx_json] = tpTrans->getJson (0);
jvResult["tx_blob"] = strHex (tpTrans->getSTransaction ()->getSerializer ().peekData ()); jvResult[jss::tx_blob] = strHex (tpTrans->getSTransaction ()->getSerializer ().peekData ());
if (temUNCERTAIN != tpTrans->getResult ()) if (temUNCERTAIN != tpTrans->getResult ())
{ {
@@ -100,17 +100,17 @@ Json::Value RPCHandler::doSubmit (Json::Value params, Resource::Charge& loadType
transResultInfo (tpTrans->getResult (), sToken, sHuman); transResultInfo (tpTrans->getResult (), sToken, sHuman);
jvResult["engine_result"] = sToken; jvResult[jss::engine_result] = sToken;
jvResult["engine_result_code"] = tpTrans->getResult (); jvResult[jss::engine_result_code] = tpTrans->getResult ();
jvResult["engine_result_message"] = sHuman; jvResult[jss::engine_result_message] = sHuman;
} }
return jvResult; return jvResult;
} }
catch (std::exception& e) catch (std::exception& e)
{ {
jvResult["error"] = "internalJson"; jvResult[jss::error] = "internalJson";
jvResult["error_exception"] = e.what (); jvResult[jss::error_exception] = e.what ();
return jvResult; return jvResult;
} }

View File

@@ -27,8 +27,8 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
InfoSub::pointer ispSub; InfoSub::pointer ispSub;
Json::Value jvResult (Json::objectValue); Json::Value jvResult (Json::objectValue);
std::uint32_t uLedgerIndex = params.isMember ("ledger_index") && params["ledger_index"].isNumeric () std::uint32_t uLedgerIndex = params.isMember (jss::ledger_index) && params[jss::ledger_index].isNumeric ()
? params["ledger_index"].asUInt () ? params[jss::ledger_index].asUInt ()
: 0; : 0;
if (!mInfoSub && !params.isMember ("url")) if (!mInfoSub && !params.isMember ("url"))
@@ -120,12 +120,12 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
} }
else else
{ {
jvResult["error"] = "unknownStream"; jvResult[jss::error] = "unknownStream";
} }
} }
else else
{ {
jvResult["error"] = "malformedStream"; jvResult[jss::error] = "malformedStream";
} }
} }
} }
@@ -148,7 +148,7 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
if (usnaAccoundIds.empty ()) if (usnaAccoundIds.empty ())
{ {
jvResult["error"] = "malformedAccount"; jvResult[jss::error] = "malformedAccount";
} }
else else
{ {
@@ -171,7 +171,7 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
if (usnaAccoundIds.empty ()) if (usnaAccoundIds.empty ())
{ {
jvResult["error"] = "malformedAccount"; jvResult[jss::error] = "malformedAccount";
} }
else else
{ {
@@ -197,10 +197,10 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
Json::Value& jvSubRequest = *it; Json::Value& jvSubRequest = *it;
if (!jvSubRequest.isObject () if (!jvSubRequest.isObject ()
|| !jvSubRequest.isMember ("taker_pays") || !jvSubRequest.isMember (jss::taker_pays)
|| !jvSubRequest.isMember ("taker_gets") || !jvSubRequest.isMember (jss::taker_gets)
|| !jvSubRequest["taker_pays"].isObject () || !jvSubRequest[jss::taker_pays].isObject ()
|| !jvSubRequest["taker_gets"].isObject ()) || !jvSubRequest[jss::taker_gets].isObject ())
return rpcError (rpcINVALID_PARAMS); return rpcError (rpcINVALID_PARAMS);
// VFALCO TODO Use RippleAsset here // VFALCO TODO Use RippleAsset here
@@ -214,21 +214,21 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
bool bSnapshot = (jvSubRequest.isMember ("snapshot") && jvSubRequest["snapshot"].asBool ()) bool bSnapshot = (jvSubRequest.isMember ("snapshot") && jvSubRequest["snapshot"].asBool ())
|| (jvSubRequest.isMember ("state_now") && jvSubRequest["state_now"].asBool ()); // DEPRECATED || (jvSubRequest.isMember ("state_now") && jvSubRequest["state_now"].asBool ()); // DEPRECATED
Json::Value taker_pays = jvSubRequest["taker_pays"]; Json::Value taker_pays = jvSubRequest[jss::taker_pays];
Json::Value taker_gets = jvSubRequest["taker_gets"]; Json::Value taker_gets = jvSubRequest[jss::taker_gets];
// Parse mandatory currency. // Parse mandatory currency.
if (!taker_pays.isMember ("currency") if (!taker_pays.isMember (jss::currency)
|| !STAmount::currencyFromString (pay_currency, taker_pays["currency"].asString ())) || !STAmount::currencyFromString (pay_currency, taker_pays[jss::currency].asString ()))
{ {
WriteLog (lsINFO, RPCHandler) << "Bad taker_pays currency."; WriteLog (lsINFO, RPCHandler) << "Bad taker_pays currency.";
return rpcError (rpcSRC_CUR_MALFORMED); return rpcError (rpcSRC_CUR_MALFORMED);
} }
// Parse optional issuer. // Parse optional issuer.
else if (((taker_pays.isMember ("issuer")) else if (((taker_pays.isMember (jss::issuer))
&& (!taker_pays["issuer"].isString () && (!taker_pays[jss::issuer].isString ()
|| !STAmount::issuerFromString (pay_issuer, taker_pays["issuer"].asString ()))) || !STAmount::issuerFromString (pay_issuer, taker_pays[jss::issuer].asString ())))
// Don't allow illegal issuers. // Don't allow illegal issuers.
|| (!pay_currency != !pay_issuer) || (!pay_currency != !pay_issuer)
|| ACCOUNT_ONE == pay_issuer) || ACCOUNT_ONE == pay_issuer)
@@ -239,17 +239,17 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
} }
// Parse mandatory currency. // Parse mandatory currency.
if (!taker_gets.isMember ("currency") if (!taker_gets.isMember (jss::currency)
|| !STAmount::currencyFromString (get_currency, taker_gets["currency"].asString ())) || !STAmount::currencyFromString (get_currency, taker_gets[jss::currency].asString ()))
{ {
WriteLog (lsINFO, RPCHandler) << "Bad taker_pays currency."; WriteLog (lsINFO, RPCHandler) << "Bad taker_pays currency.";
return rpcError (rpcSRC_CUR_MALFORMED); return rpcError (rpcSRC_CUR_MALFORMED);
} }
// Parse optional issuer. // Parse optional issuer.
else if (((taker_gets.isMember ("issuer")) else if (((taker_gets.isMember (jss::issuer))
&& (!taker_gets["issuer"].isString () && (!taker_gets[jss::issuer].isString ()
|| !STAmount::issuerFromString (get_issuer, taker_gets["issuer"].asString ()))) || !STAmount::issuerFromString (get_issuer, taker_gets[jss::issuer].asString ())))
// Don't allow illegal issuers. // Don't allow illegal issuers.
|| (!get_currency != !get_issuer) || (!get_currency != !get_issuer)
|| ACCOUNT_ONE == get_issuer) || ACCOUNT_ONE == get_issuer)
@@ -311,11 +311,11 @@ Json::Value RPCHandler::doSubscribe (Json::Value params, Resource::Charge& loadT
mNetOps->getBookPage (lpLedger, pay_currency, pay_issuer, get_currency, get_issuer, raTakerID.getAccountID (), false, 0, jvMarker, jvBids); mNetOps->getBookPage (lpLedger, pay_currency, pay_issuer, get_currency, get_issuer, raTakerID.getAccountID (), false, 0, jvMarker, jvBids);
if (jvBids.isMember ("offers")) jvResult["bids"] = jvBids["offers"]; if (jvBids.isMember (jss::offers)) jvResult[jss::bids] = jvBids[jss::offers];
mNetOps->getBookPage (lpLedger, get_currency, get_issuer, pay_currency, pay_issuer, raTakerID.getAccountID (), false, 0, jvMarker, jvAsks); mNetOps->getBookPage (lpLedger, get_currency, get_issuer, pay_currency, pay_issuer, raTakerID.getAccountID (), false, 0, jvMarker, jvAsks);
if (jvAsks.isMember ("offers")) jvResult["asks"] = jvAsks["offers"]; if (jvAsks.isMember (jss::offers)) jvResult[jss::asks] = jvAsks[jss::offers];
} }
else else
{ {

View File

@@ -27,12 +27,12 @@ Json::Value RPCHandler::doTx (Json::Value params, Resource::Charge& loadType, Ap
{ {
masterLockHolder.unlock (); masterLockHolder.unlock ();
if (!params.isMember ("transaction")) if (!params.isMember (jss::transaction))
return rpcError (rpcINVALID_PARAMS); return rpcError (rpcINVALID_PARAMS);
bool binary = params.isMember ("binary") && params["binary"].asBool (); bool binary = params.isMember (jss::binary) && params[jss::binary].asBool ();
std::string strTransaction = params["transaction"].asString (); std::string strTransaction = params[jss::transaction].asString ();
if (Transaction::isHexTxID (strTransaction)) if (Transaction::isHexTxID (strTransaction))
{ {
@@ -46,7 +46,7 @@ Json::Value RPCHandler::doTx (Json::Value params, Resource::Charge& loadType, Ap
#ifdef READY_FOR_NEW_TX_FORMAT #ifdef READY_FOR_NEW_TX_FORMAT
Json::Value ret; Json::Value ret;
ret["transaction"] = txn->getJson (0, binary); ret[jss::transaction] = txn->getJson (0, binary);
#else #else
Json::Value ret = txn->getJson (0, binary); Json::Value ret = txn->getJson (0, binary);
#endif #endif
@@ -65,7 +65,7 @@ Json::Value RPCHandler::doTx (Json::Value params, Resource::Charge& loadType, Ap
if (lgr->getMetaHex (txid, meta)) if (lgr->getMetaHex (txid, meta))
{ {
ret["meta"] = meta; ret[jss::meta] = meta;
okay = true; okay = true;
} }
} }
@@ -76,12 +76,12 @@ Json::Value RPCHandler::doTx (Json::Value params, Resource::Charge& loadType, Ap
if (lgr->getTransactionMeta (txid, set)) if (lgr->getTransactionMeta (txid, set))
{ {
okay = true; okay = true;
ret["meta"] = set->getJson (0); ret[jss::meta] = set->getJson (0);
} }
} }
if (okay) if (okay)
ret["validated"] = mNetOps->isValidated (lgr); ret[jss::validated] = mNetOps->isValidated (lgr);
} }
} }