From 678eb3d8e296e9cc91f61119e2383cb54393ec94 Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Fri, 5 Jul 2024 18:20:32 -0400 Subject: [PATCH] [WIP] Find everywhere Json is written to the log * Get rid of operator<<(std::ostream&, const Value& root), and fix everything that breaks. --- include/xrpl/json/json_writer.h | 4 +- include/xrpl/json/to_string.h | 6 +- include/xrpl/protocol/STBase.h | 3 +- include/xrpl/protocol/STValidation.h | 3 +- src/test/app/NFTokenBurn_test.cpp | 4 +- src/test/app/NFTokenDir_test.cpp | 2 +- src/test/app/Oracle_test.cpp | 7 +- src/test/json/json_value_test.cpp | 4 +- src/test/jtx/TestSuite.h | 1 + src/test/jtx/impl/Env.cpp | 2 +- src/test/protocol/STObject_test.cpp | 6 +- src/test/protocol/STTx_test.cpp | 10 +- src/test/rpc/AccountCurrencies_test.cpp | 22 +++-- src/test/rpc/Feature_test.cpp | 18 ++-- src/test/rpc/KeyGeneration_test.cpp | 19 ++-- src/test/rpc/LedgerData_test.cpp | 103 +++++++++++--------- src/test/rpc/LedgerRPC_test.cpp | 51 ++++++---- src/test/rpc/NoRippleCheck_test.cpp | 41 +++++--- src/xrpld/app/ledger/Ledger.cpp | 2 +- src/xrpld/app/ledger/LedgerHistory.cpp | 62 ++++++------ src/xrpld/app/main/Application.cpp | 8 +- src/xrpld/app/main/LoadManager.cpp | 10 +- src/xrpld/app/misc/NetworkOPs.cpp | 5 +- src/xrpld/app/paths/Pathfinder.cpp | 42 ++++---- src/xrpld/app/paths/detail/PaySteps.cpp | 6 +- src/xrpld/app/rdb/backend/detail/Node.cpp | 5 +- src/xrpld/app/tx/detail/Transactor.cpp | 2 +- src/xrpld/ledger/detail/ApplyStateTable.cpp | 3 +- src/xrpld/net/detail/RPCCall.cpp | 10 +- src/xrpld/net/detail/RPCSub.cpp | 2 +- src/xrpld/rpc/detail/RPCHandler.cpp | 36 ++++--- src/xrpld/rpc/detail/ServerHandler.cpp | 21 ++-- src/xrpld/rpc/detail/TransactionSign.cpp | 11 ++- 33 files changed, 299 insertions(+), 232 deletions(-) diff --git a/include/xrpl/json/json_writer.h b/include/xrpl/json/json_writer.h index 86a5ecd984a..d46fb98770b 100644 --- a/include/xrpl/json/json_writer.h +++ b/include/xrpl/json/json_writer.h @@ -210,8 +210,8 @@ valueToQuotedString(const char* value); /// \brief Output using the StyledStreamWriter. /// \see Json::operator>>() -std::ostream& -operator<<(std::ostream&, const Value& root); +// std::ostream& +// operator<<(std::ostream&, const Value& root); //------------------------------------------------------------------------------ diff --git a/include/xrpl/json/to_string.h b/include/xrpl/json/to_string.h index 5f692a415e0..3afafdffc50 100644 --- a/include/xrpl/json/to_string.h +++ b/include/xrpl/json/to_string.h @@ -35,9 +35,9 @@ to_string(Value const&); std::string pretty(Value const&); -/** Output using the StyledStreamWriter. @see Json::operator>>(). */ -std::ostream& -operator<<(std::ostream&, const Value& root); +///** Output using the StyledStreamWriter. @see Json::operator>>(). */ +// std::ostream& +// operator<<(std::ostream&, const Value& root); } // namespace Json diff --git a/include/xrpl/protocol/STBase.h b/include/xrpl/protocol/STBase.h index 097341384f3..3690e34b2d4 100644 --- a/include/xrpl/protocol/STBase.h +++ b/include/xrpl/protocol/STBase.h @@ -155,7 +155,8 @@ class STBase virtual std::string getText() const; - virtual Json::Value getJson(JsonOptions /*options*/) const; + virtual Json::Value getJson( + JsonOptions = JsonOptions::none /*options*/) const; virtual void add(Serializer& s) const; diff --git a/include/xrpl/protocol/STValidation.h b/include/xrpl/protocol/STValidation.h index 32c60026fcd..ae0328b0341 100644 --- a/include/xrpl/protocol/STValidation.h +++ b/include/xrpl/protocol/STValidation.h @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -172,7 +173,7 @@ STValidation::STValidation( if (checkSignature && !isValid()) { JLOG(debugLog().error()) << "Invalid signature in validation: " - << getJson(JsonOptions::none); + << to_string(getJson(JsonOptions::none)); Throw("Invalid signature in validation"); } diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index a56f0a45674..ccc69496f18 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -414,7 +414,7 @@ class NFTokenBurnBaseUtil_test : public beast::unit_test::suite Json::Value jrr = env.rpc( "json", "ledger_data", - boost::lexical_cast(jvParams)); + boost::lexical_cast(to_string(jvParams))); Json::Value& state = jrr[jss::result][jss::state]; @@ -461,7 +461,7 @@ class NFTokenBurnBaseUtil_test : public beast::unit_test::suite Json::Value jrr = env.rpc( "json", "ledger_data", - boost::lexical_cast(jvParams)); + boost::lexical_cast(to_string(jvParams))); Json::Value& state = jrr[jss::result][jss::state]; diff --git a/src/test/app/NFTokenDir_test.cpp b/src/test/app/NFTokenDir_test.cpp index 23e4c671526..e01226c1db0 100644 --- a/src/test/app/NFTokenDir_test.cpp +++ b/src/test/app/NFTokenDir_test.cpp @@ -48,7 +48,7 @@ class NFTokenDir_test : public beast::unit_test::suite Json::Value jrr = env.rpc( "json", "ledger_data", - boost::lexical_cast(jvParams)); + boost::lexical_cast(to_string(jvParams))); // Iterate the state and print all NFTokenPages. if (!jrr.isMember(jss::result) || diff --git a/src/test/app/Oracle_test.cpp b/src/test/app/Oracle_test.cpp index 44eeb1c9f98..eee944ea4a0 100644 --- a/src/test/app/Oracle_test.cpp +++ b/src/test/app/Oracle_test.cpp @@ -18,6 +18,7 @@ //============================================================================== #include +#include #include namespace ripple { @@ -482,10 +483,8 @@ struct Oracle_test : public beast::unit_test::suite jvParams[field] = value; jvParams[jss::binary] = false; jvParams[jss::type] = jss::oracle; - Json::Value jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams)); + Json::Value jrr = + env.rpc("json", "ledger_data", to_string(jvParams)); BEAST_EXPECT(jrr[jss::result][jss::state].size() == 2); }; verifyLedgerData(jss::ledger_index, index); diff --git a/src/test/json/json_value_test.cpp b/src/test/json/json_value_test.cpp index dacc22cc014..a91ae490ddc 100644 --- a/src/test/json/json_value_test.cpp +++ b/src/test/json/json_value_test.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -834,7 +835,8 @@ struct json_value_test : beast::unit_test::suite BEAST_EXPECT(r.parse(s, j)); { std::stringstream ss; - ss << j; + // UNDO + ss << pretty(j); BEAST_EXPECT(countLines(ss.str()) > 1); } { diff --git a/src/test/jtx/TestSuite.h b/src/test/jtx/TestSuite.h index 22b8fb7e53b..3628f8c323a 100644 --- a/src/test/jtx/TestSuite.h +++ b/src/test/jtx/TestSuite.h @@ -21,6 +21,7 @@ #define RIPPLE_BASICS_TESTSUITE_H_INCLUDED #include +#include #include namespace ripple { diff --git a/src/test/jtx/impl/Env.cpp b/src/test/jtx/impl/Env.cpp index c87b1260244..5b973a1d75b 100644 --- a/src/test/jtx/impl/Env.cpp +++ b/src/test/jtx/impl/Env.cpp @@ -359,7 +359,7 @@ Env::sign_and_submit(JTx const& jt, Json::Value params) if (params.isNull()) { // Use the command line interface - auto const jv = boost::lexical_cast(jt.jv); + auto const jv = boost::lexical_cast(to_string(jt.jv)); jr = rpc("submit", passphrase, jv); } else diff --git a/src/test/protocol/STObject_test.cpp b/src/test/protocol/STObject_test.cpp index 071a5f4f63c..ff0e45f5855 100644 --- a/src/test/protocol/STObject_test.cpp +++ b/src/test/protocol/STObject_test.cpp @@ -311,8 +311,10 @@ class STObject_test : public beast::unit_test::suite if (object1.getSerializer() == object2.getSerializer()) { - log << "O1: " << object1.getJson(JsonOptions::none) << '\n' - << "O2: " << object2.getJson(JsonOptions::none) << std::endl; + log << "O1: " << to_string(object1.getJson(JsonOptions::none)) + << '\n' + << "O2: " << to_string(object2.getJson(JsonOptions::none)) + << std::endl; fail("STObject error 4"); } else diff --git a/src/test/protocol/STTx_test.cpp b/src/test/protocol/STTx_test.cpp index 54037eaa5ba..38d1e775c5c 100644 --- a/src/test/protocol/STTx_test.cpp +++ b/src/test/protocol/STTx_test.cpp @@ -1645,8 +1645,9 @@ class STTx_test : public beast::unit_test::suite if (copy != j) { - log << "j=" << j.getJson(JsonOptions::none) << '\n' - << "copy=" << copy.getJson(JsonOptions::none) << std::endl; + log << "j=" << to_string(j.getJson(JsonOptions::none)) << '\n' + << "copy=" << to_string(copy.getJson(JsonOptions::none)) + << std::endl; fail("Transaction fails serialize/deserialize test"); } else @@ -1660,8 +1661,9 @@ class STTx_test : public beast::unit_test::suite if (STObject(j) != parsed.object) { - log << "ORIG: " << j.getJson(JsonOptions::none) << '\n' - << "BUILT " << parsed.object->getJson(JsonOptions::none) + log << "ORIG: " << to_string(j.getJson(JsonOptions::none)) << '\n' + << "BUILT " + << to_string(parsed.object->getJson(JsonOptions::none)) << std::endl; fail("Built a different transaction"); } diff --git a/src/test/rpc/AccountCurrencies_test.cpp b/src/test/rpc/AccountCurrencies_test.cpp index 7d16ca48a93..dc939ed5c99 100644 --- a/src/test/rpc/AccountCurrencies_test.cpp +++ b/src/test/rpc/AccountCurrencies_test.cpp @@ -44,7 +44,8 @@ class AccountCurrencies_test : public beast::unit_test::suite auto const result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "invalidParams"); BEAST_EXPECT(result[jss::error_message] == "ledgerHashNotString"); } @@ -108,7 +109,8 @@ class AccountCurrencies_test : public beast::unit_test::suite auto const result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "actMalformed"); BEAST_EXPECT(result[jss::error_message] == "Account malformed."); } @@ -120,7 +122,8 @@ class AccountCurrencies_test : public beast::unit_test::suite auto const result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "actMalformed"); BEAST_EXPECT(result[jss::error_message] == "Account malformed."); } @@ -131,7 +134,8 @@ class AccountCurrencies_test : public beast::unit_test::suite auto const result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "actNotFound"); BEAST_EXPECT(result[jss::error_message] == "Account not found."); } @@ -162,7 +166,7 @@ class AccountCurrencies_test : public beast::unit_test::suite auto result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; auto arrayCheck = [&result]( @@ -190,7 +194,7 @@ class AccountCurrencies_test : public beast::unit_test::suite result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies)); BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies)); @@ -204,7 +208,7 @@ class AccountCurrencies_test : public beast::unit_test::suite result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies)); BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrencies)); // clear the freeze @@ -216,7 +220,7 @@ class AccountCurrencies_test : public beast::unit_test::suite result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; decltype(gwCurrencies) gwCurrenciesNoUSA( gwCurrencies.begin() + 1, gwCurrencies.end()); BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrenciesNoUSA)); @@ -229,7 +233,7 @@ class AccountCurrencies_test : public beast::unit_test::suite result = env.rpc( "json", "account_currencies", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(arrayCheck(jss::receive_currencies, gwCurrencies)); BEAST_EXPECT(arrayCheck(jss::send_currencies, gwCurrenciesNoUSA)); } diff --git a/src/test/rpc/Feature_test.cpp b/src/test/rpc/Feature_test.cpp index 12d4b27745c..298c6015b74 100644 --- a/src/test/rpc/Feature_test.cpp +++ b/src/test/rpc/Feature_test.cpp @@ -306,10 +306,8 @@ class Feature_test : public beast::unit_test::suite params[jss::feature] = "1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCD" "EF"; - auto const result = env.rpc( - "json", - "feature", - boost::lexical_cast(params))[jss::result]; + auto const result = + env.rpc("json", "feature", to_string(params))[jss::result]; BEAST_EXPECTS( result[jss::error] == "badFeature", result.toStyledString()); BEAST_EXPECT( @@ -323,10 +321,8 @@ class Feature_test : public beast::unit_test::suite "A7"; // invalid param params[jss::vetoed] = true; - auto const result = env.rpc( - "json", - "feature", - boost::lexical_cast(params))[jss::result]; + auto const result = + env.rpc("json", "feature", to_string(params))[jss::result]; BEAST_EXPECTS( result[jss::error] == "noPermission", result[jss::error].asString()); @@ -341,10 +337,8 @@ class Feature_test : public beast::unit_test::suite "37"; Json::Value params; params[jss::feature] = feature; - auto const result = env.rpc( - "json", - "feature", - boost::lexical_cast(params))[jss::result]; + auto const result = + env.rpc("json", "feature", to_string(params))[jss::result]; BEAST_EXPECT(result.isMember(feature)); auto const amendmentResult = result[feature]; BEAST_EXPECT(amendmentResult[jss::enabled].asBool() == false); diff --git a/src/test/rpc/KeyGeneration_test.cpp b/src/test/rpc/KeyGeneration_test.cpp index e136bb04beb..2abf02fefc8 100644 --- a/src/test/rpc/KeyGeneration_test.cpp +++ b/src/test/rpc/KeyGeneration_test.cpp @@ -111,8 +111,8 @@ class WalletPropose_test : public ripple::TestSuite BEAST_EXPECT(result.isMember(jss::key_type)); expectEquals( - result[jss::key_type], - params.isMember(jss::key_type) ? params[jss::key_type] + to_string(result[jss::key_type]), + params.isMember(jss::key_type) ? to_string(params[jss::key_type]) : "secp256k1"); BEAST_EXPECT(!result.isMember(jss::warning)); @@ -130,14 +130,15 @@ class WalletPropose_test : public ripple::TestSuite Json::Value result = walletPropose(params); BEAST_EXPECT(!contains_error(result)); - expectEquals(result[jss::account_id], s.account_id); - expectEquals(result[jss::master_seed], s.master_seed); - expectEquals(result[jss::master_seed_hex], s.master_seed_hex); - expectEquals(result[jss::public_key], s.public_key); - expectEquals(result[jss::public_key_hex], s.public_key_hex); + expectEquals(to_string(result[jss::account_id]), s.account_id); + expectEquals(to_string(result[jss::master_seed]), s.master_seed); expectEquals( - result[jss::key_type], - params.isMember(jss::key_type) ? params[jss::key_type] + to_string(result[jss::master_seed_hex]), s.master_seed_hex); + expectEquals(to_string(result[jss::public_key]), s.public_key); + expectEquals(to_string(result[jss::public_key_hex]), s.public_key_hex); + expectEquals( + to_string(result[jss::key_type]), + params.isMember(jss::key_type) ? to_string(params[jss::key_type]) : "secp256k1"); return result; } diff --git a/src/test/rpc/LedgerData_test.cpp b/src/test/rpc/LedgerData_test.cpp index 1e4f97a935f..4c486f4c685 100644 --- a/src/test/rpc/LedgerData_test.cpp +++ b/src/test/rpc/LedgerData_test.cpp @@ -62,9 +62,7 @@ class LedgerData_test : public beast::unit_test::suite jvParams[jss::binary] = false; { auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT( jrr[jss::ledger_current_index].isIntegral() && jrr[jss::ledger_current_index].asInt() > 0); @@ -77,9 +75,7 @@ class LedgerData_test : public beast::unit_test::suite { jvParams[jss::limit] = max_limit + delta; auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(checkArraySize( jrr[jss::state], (delta > 0 && !asAdmin) ? max_limit : max_limit + delta)); @@ -108,10 +104,8 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::ledger_index] = "current"; jvParams[jss::binary] = true; - auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + auto const jrr = + env.rpc("json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT( jrr[jss::ledger_current_index].isIntegral() && jrr[jss::ledger_current_index].asInt() > 0); @@ -136,9 +130,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::limit] = "0"; // NOT an integer auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::status] == "error"); BEAST_EXPECT( @@ -151,9 +143,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::marker] = "NOT_A_MARKER"; auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::status] == "error"); BEAST_EXPECT( @@ -166,9 +156,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::marker] = 1; auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::status] == "error"); BEAST_EXPECT( @@ -181,9 +169,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::ledger_index] = 10u; auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "lgrNotFound"); BEAST_EXPECT(jrr[jss::status] == "error"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerNotFound"); @@ -212,27 +198,20 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::ledger_index] = "current"; jvParams[jss::binary] = false; - auto jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + auto jrr = + env.rpc("json", "ledger_data", to_string(jvParams))[jss::result]; auto const total_count = jrr[jss::state].size(); // now make request with a limit and loop until we get all jvParams[jss::limit] = 5; - jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + jrr = env.rpc("json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(checkMarker(jrr)); auto running_total = jrr[jss::state].size(); while (jrr.isMember(jss::marker)) { jvParams[jss::marker] = jrr[jss::marker]; jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; running_total += jrr[jss::state].size(); } BEAST_EXPECT(running_total == total_count); @@ -252,9 +231,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::ledger_index] = "closed"; auto jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; if (BEAST_EXPECT(jrr.isMember(jss::ledger))) BEAST_EXPECT( jrr[jss::ledger][jss::ledger_hash] == @@ -266,9 +243,7 @@ class LedgerData_test : public beast::unit_test::suite jvParams[jss::ledger_index] = "closed"; jvParams[jss::binary] = true; auto jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; if (BEAST_EXPECT(jrr.isMember(jss::ledger))) { auto data = @@ -287,9 +262,7 @@ class LedgerData_test : public beast::unit_test::suite Json::Value jvParams; jvParams[jss::binary] = true; auto jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(!jrr[jss::ledger].isMember(jss::ledger_data)); } @@ -318,9 +291,7 @@ class LedgerData_test : public beast::unit_test::suite jvParams[jss::ledger_index] = "current"; jvParams[jss::type] = type; return env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; }; // Assert that state is an empty array. @@ -501,9 +472,45 @@ class LedgerData_test : public beast::unit_test::suite jvParams[jss::ledger_index] = "current"; jvParams[jss::type] = "misspelling"; auto const jrr = env.rpc( - "json", - "ledger_data", - boost::lexical_cast(jvParams))[jss::result]; + "json", "ledger_data", to_string(jvParams))[jss::result]; + BEAST_EXPECT(jrr.isMember("error")); + BEAST_EXPECT(jrr["error"] == "invalidParams"); + BEAST_EXPECT(jrr["error_message"] == "Invalid field 'type'."); + } + { // jvParams[jss::type] = "ticket"; + auto const jrr = makeRequest(jss::ticket); + BEAST_EXPECT(checkArraySize(jrr[jss::state], 1)); + for (auto const& j : jrr[jss::state]) + BEAST_EXPECT(j["LedgerEntryType"] == jss::Ticket); + } + + { // jvParams[jss::type] = "escrow"; + auto const jrr = makeRequest(jss::escrow); + BEAST_EXPECT(checkArraySize(jrr[jss::state], 1)); + for (auto const& j : jrr[jss::state]) + BEAST_EXPECT(j["LedgerEntryType"] == jss::Escrow); + } + + { // jvParams[jss::type] = "payment_channel"; + auto const jrr = makeRequest(jss::payment_channel); + BEAST_EXPECT(checkArraySize(jrr[jss::state], 1)); + for (auto const& j : jrr[jss::state]) + BEAST_EXPECT(j["LedgerEntryType"] == jss::PayChannel); + } + + { // jvParams[jss::type] = "deposit_preauth"; + auto const jrr = makeRequest(jss::deposit_preauth); + BEAST_EXPECT(checkArraySize(jrr[jss::state], 2)); + for (auto const& j : jrr[jss::state]) + BEAST_EXPECT(j["LedgerEntryType"] == jss::DepositPreauth); + } + + { // jvParams[jss::type] = "misspelling"; + Json::Value jvParams; + jvParams[jss::ledger_index] = "current"; + jvParams[jss::type] = "misspelling"; + auto const jrr = env.rpc( + "json", "ledger_data", to_string(jvParams))[jss::result]; BEAST_EXPECT(jrr.isMember("error")); BEAST_EXPECT(jrr["error"] == "invalidParams"); BEAST_EXPECT(jrr["error_message"] == "Invalid field 'type'."); diff --git a/src/test/rpc/LedgerRPC_test.cpp b/src/test/rpc/LedgerRPC_test.cpp index ebc6297fe41..4ae02962249 100644 --- a/src/test/rpc/LedgerRPC_test.cpp +++ b/src/test/rpc/LedgerRPC_test.cpp @@ -2468,7 +2468,8 @@ class LedgerRPC_test : public beast::unit_test::suite auto jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "5"); @@ -2477,7 +2478,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "5"); @@ -2486,7 +2488,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "6"); @@ -2495,7 +2498,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerIndexMalformed"); @@ -2504,7 +2508,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "4"); @@ -2514,7 +2519,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "lgrNotFound"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerNotFound"); } @@ -2529,7 +2535,8 @@ class LedgerRPC_test : public beast::unit_test::suite auto jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "3"); @@ -2539,7 +2546,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerHashMalformed"); @@ -2548,7 +2556,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerHashNotString"); @@ -2559,7 +2568,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerHashMalformed"); @@ -2570,7 +2580,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "lgrNotFound"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerNotFound"); } @@ -2582,7 +2593,8 @@ class LedgerRPC_test : public beast::unit_test::suite auto jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "5"); @@ -2592,7 +2604,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "5"); @@ -2601,7 +2614,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); BEAST_EXPECT(jrr[jss::ledger][jss::ledger_index] == "6"); BEAST_EXPECT(jrr.isMember(jss::ledger_current_index)); @@ -2611,7 +2625,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "invalidParams"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerIndexMalformed"); @@ -2622,7 +2637,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr.isMember(jss::ledger)); if (i < 6) BEAST_EXPECT(jrr.isMember(jss::ledger_hash)); @@ -2635,7 +2651,8 @@ class LedgerRPC_test : public beast::unit_test::suite jrr = env.rpc( "json", "ledger", - boost::lexical_cast(jvParams))[jss::result]; + boost::lexical_cast( + to_string(jvParams)))[jss::result]; BEAST_EXPECT(jrr[jss::error] == "lgrNotFound"); BEAST_EXPECT(jrr[jss::error_message] == "ledgerNotFound"); } diff --git a/src/test/rpc/NoRippleCheck_test.cpp b/src/test/rpc/NoRippleCheck_test.cpp index 4551365029f..3f1c9e94307 100644 --- a/src/test/rpc/NoRippleCheck_test.cpp +++ b/src/test/rpc/NoRippleCheck_test.cpp @@ -59,7 +59,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "invalidParams"); BEAST_EXPECT(result[jss::error_message] == "Missing field 'role'."); } @@ -92,7 +94,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "invalidParams"); BEAST_EXPECT(result[jss::error_message] == "Invalid field 'role'."); } @@ -105,7 +109,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "invalidParams"); BEAST_EXPECT( result[jss::error_message] == @@ -120,7 +126,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "invalidParams"); BEAST_EXPECT(result[jss::error_message] == "ledgerHashNotString"); } @@ -133,7 +141,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "actNotFound"); BEAST_EXPECT(result[jss::error_message] == "Account not found."); } @@ -147,7 +157,9 @@ class NoRippleCheck_test : public beast::unit_test::suite auto const result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast( + to_string(params)))[jss::result]; BEAST_EXPECT(result[jss::error] == "actMalformed"); BEAST_EXPECT(result[jss::error_message] == "Account malformed."); } @@ -185,7 +197,8 @@ class NoRippleCheck_test : public beast::unit_test::suite auto result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast(to_string(params)))[jss::result]; auto const pa = result["problems"]; if (!BEAST_EXPECT(pa.isArray())) @@ -222,7 +235,8 @@ class NoRippleCheck_test : public beast::unit_test::suite result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast(to_string(params)))[jss::result]; if (!BEAST_EXPECT(result[jss::transactions].isArray())) return; @@ -344,7 +358,8 @@ class NoRippleCheckLimits_test : public beast::unit_test::suite auto result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + // UNDO + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(result["problems"].size() == 301); @@ -353,7 +368,7 @@ class NoRippleCheckLimits_test : public beast::unit_test::suite result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(result["problems"].size() == (admin ? 10 : 11)); // at minimum @@ -361,7 +376,7 @@ class NoRippleCheckLimits_test : public beast::unit_test::suite result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(result["problems"].size() == 11); // at max @@ -369,7 +384,7 @@ class NoRippleCheckLimits_test : public beast::unit_test::suite result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(result["problems"].size() == 401); // at max+1 @@ -377,7 +392,7 @@ class NoRippleCheckLimits_test : public beast::unit_test::suite result = env.rpc( "json", "noripple_check", - boost::lexical_cast(params))[jss::result]; + boost::lexical_cast(to_string(params)))[jss::result]; BEAST_EXPECT(result["problems"].size() == (admin ? 402 : 401)); } diff --git a/src/xrpld/app/ledger/Ledger.cpp b/src/xrpld/app/ledger/Ledger.cpp index 90e77c1e3d0..5ed165a86ea 100644 --- a/src/xrpld/app/ledger/Ledger.cpp +++ b/src/xrpld/app/ledger/Ledger.cpp @@ -874,7 +874,7 @@ Ledger::assertSensible(beast::Journal ledgerJ) const j[jss::accountTreeHash] = to_string(info_.accountHash); j[jss::transTreeHash] = to_string(info_.txHash); - JLOG(ledgerJ.fatal()) << "ledger is not sensible" << j; + JLOG(ledgerJ.fatal()) << "ledger is not sensible" << to_string(j); UNREACHABLE("ripple::Ledger::assertSensible : ledger is not sensible"); diff --git a/src/xrpld/app/ledger/LedgerHistory.cpp b/src/xrpld/app/ledger/LedgerHistory.cpp index ed0b11723b0..db6bfa593d8 100644 --- a/src/xrpld/app/ledger/LedgerHistory.cpp +++ b/src/xrpld/app/ledger/LedgerHistory.cpp @@ -168,7 +168,7 @@ log_one( { JLOG(j.debug()) << "MISMATCH on TX " << tx << ": " << msg << " is missing this transaction:\n" - << metaData->getJson(JsonOptions::none); + << to_string(metaData->getJson(JsonOptions::none)); } else { @@ -256,45 +256,51 @@ log_metadata_difference( { JLOG(j.debug()) << "MISMATCH on TX " << tx << ": Different result, index and nodes!"; - JLOG(j.debug()) << " Built:\n" - << builtMetaData->getJson(JsonOptions::none); - JLOG(j.debug()) << " Valid:\n" - << validMetaData->getJson(JsonOptions::none); + JLOG(j.debug()) + << " Built:\n" + << to_string(builtMetaData->getJson(JsonOptions::none)); + JLOG(j.debug()) + << " Valid:\n" + << to_string(validMetaData->getJson(JsonOptions::none)); } else if (result_diff) { JLOG(j.debug()) << "MISMATCH on TX " << tx << ": Different result and nodes!"; JLOG(j.debug()) - << " Built:" << " Result: " << builtMetaData->getResult() - << " Nodes:\n" - << builtNodes.getJson(JsonOptions::none); + << " Built:" + << " Result: " << builtMetaData->getResult() << " Nodes:\n" + << to_string(builtNodes.getJson(JsonOptions::none)); JLOG(j.debug()) - << " Valid:" << " Result: " << validMetaData->getResult() - << " Nodes:\n" - << validNodes.getJson(JsonOptions::none); + << " Valid:" + << " Result: " << validMetaData->getResult() << " Nodes:\n" + << to_string(validNodes.getJson(JsonOptions::none)); } else if (index_diff) { JLOG(j.debug()) << "MISMATCH on TX " << tx << ": Different index and nodes!"; JLOG(j.debug()) - << " Built:" << " Index: " << builtMetaData->getIndex() - << " Nodes:\n" - << builtNodes.getJson(JsonOptions::none); + << " Built:" + << " Index: " << builtMetaData->getIndex() << " Nodes:\n" + << to_string(builtNodes.getJson(JsonOptions::none)); JLOG(j.debug()) - << " Valid:" << " Index: " << validMetaData->getIndex() - << " Nodes:\n" - << validNodes.getJson(JsonOptions::none); + << " Valid:" + << " Index: " << validMetaData->getIndex() << " Nodes:\n" + << to_string(validNodes.getJson(JsonOptions::none)); } else // nodes_diff { JLOG(j.debug()) << "MISMATCH on TX " << tx << ": Different nodes!"; - JLOG(j.debug()) << " Built:" << " Nodes:\n" - << builtNodes.getJson(JsonOptions::none); - JLOG(j.debug()) << " Valid:" << " Nodes:\n" - << validNodes.getJson(JsonOptions::none); + JLOG(j.debug()) + << " Built:" + << " Nodes:\n" + << to_string(builtNodes.getJson(JsonOptions::none)); + JLOG(j.debug()) + << " Valid:" + << " Nodes:\n" + << to_string(validNodes.getJson(JsonOptions::none)); } } @@ -305,14 +311,14 @@ log_metadata_difference( { JLOG(j.error()) << "MISMATCH on TX " << tx << ": Metadata Difference. Valid=\n" - << validMetaData->getJson(JsonOptions::none); + << to_string(validMetaData->getJson(JsonOptions::none)); } if (builtMetaData) { JLOG(j.error()) << "MISMATCH on TX " << tx << ": Metadata Difference. Built=\n" - << builtMetaData->getJson(JsonOptions::none); + << to_string(builtMetaData->getJson(JsonOptions::none)); } } @@ -363,9 +369,9 @@ LedgerHistory::handleMismatch( if (auto stream = j_.debug()) { - stream << "Built: " << getJson({*builtLedger, {}}); - stream << "Valid: " << getJson({*validLedger, {}}); - stream << "Consensus: " << consensus; + stream << "Built: " << to_string(getJson({*builtLedger, {}})); + stream << "Valid: " << to_string(getJson({*validLedger, {}})); + stream << "Consensus: " << to_string(consensus); } // Determine the mismatch reason, distinguishing Byzantine @@ -408,8 +414,8 @@ LedgerHistory::handleMismatch( JLOG(j_.error()) << "MISMATCH with " << builtTx.size() << " built and " << validTx.size() << " valid transactions."; - JLOG(j_.error()) << "built\n" << getJson({*builtLedger, {}}); - JLOG(j_.error()) << "valid\n" << getJson({*validLedger, {}}); + JLOG(j_.error()) << "built\n" << to_string(getJson({*builtLedger, {}})); + JLOG(j_.error()) << "valid\n" << to_string(getJson({*validLedger, {}})); // Log all differences between built and valid ledgers auto b = builtTx.begin(); diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index bcacdbc3757..8dcd743b1a5 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -65,6 +65,7 @@ #include #include #include +#include #include #include #include @@ -1492,7 +1493,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) if (!config_->quiet()) { JLOG(m_journal.fatal()) - << "Startup RPC: " << jvCommand << std::endl; + << "Startup RPC: " << to_string(jvCommand) << std::endl; } Resource::Charge loadType = Resource::feeReferenceRPC; @@ -1515,7 +1516,8 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) if (!config_->quiet()) { - JLOG(m_journal.fatal()) << "Result: " << jvResult << std::endl; + JLOG(m_journal.fatal()) + << "Result: " << to_string(jvResult) << std::endl; } } @@ -1759,7 +1761,7 @@ ApplicationImp::getLastFullLedger() stream << "Failed on ledger"; Json::Value p; addJson(p, {*ledger, nullptr, LedgerFill::full}); - stream << p; + stream << to_string(p); } return {}; diff --git a/src/xrpld/app/main/LoadManager.cpp b/src/xrpld/app/main/LoadManager.cpp index 01b96a3d26c..90ec614ede3 100644 --- a/src/xrpld/app/main/LoadManager.cpp +++ b/src/xrpld/app/main/LoadManager.cpp @@ -143,7 +143,8 @@ LoadManager::run() << " seconds."; if (app_.getJobQueue().isOverloaded()) { - JLOG(journal_.warn()) << app_.getJobQueue().getJson(0); + JLOG(journal_.warn()) + << to_string(app_.getJobQueue().getJson(0)); } } else @@ -152,7 +153,8 @@ LoadManager::run() << "Deadlock detected. Deadlocked time: " << timeSpentDeadlocked.count() << "s"; JLOG(journal_.fatal()) - << "JobQueue: " << app_.getJobQueue().getJson(0); + << "JobQueue: " + << to_string(app_.getJobQueue().getJson(0)); } } @@ -166,7 +168,7 @@ LoadManager::run() << "LogicError: Deadlock detected. Deadlocked time: " << timeSpentDeadlocked.count() << "s"; JLOG(journal_.fatal()) - << "JobQueue: " << app_.getJobQueue().getJson(0); + << "JobQueue: " << to_string(app_.getJobQueue().getJson(0)); LogicError("Deadlock detected"); } } @@ -177,7 +179,7 @@ LoadManager::run() if (app_.getJobQueue().isOverloaded()) { JLOG(journal_.info()) << "Raising local fee (JQ overload): " - << app_.getJobQueue().getJson(0); + << to_string(app_.getJobQueue().getJson(0)); change = app_.getFeeTrack().raiseLocalFee(); } else diff --git a/src/xrpld/app/misc/NetworkOPs.cpp b/src/xrpld/app/misc/NetworkOPs.cpp index 996a1fdf748..4d9c0d59ebe 100644 --- a/src/xrpld/app/misc/NetworkOPs.cpp +++ b/src/xrpld/app/misc/NetworkOPs.cpp @@ -1741,7 +1741,7 @@ NetworkOPsImp::checkLastClosedLedger( JLOG(m_journal.warn()) << "We are not running on the consensus ledger"; JLOG(m_journal.info()) << "Our LCL: " << ourClosed->info().hash - << getJson({*ourClosed, {}}); + << to_string(getJson({*ourClosed, {}})); JLOG(m_journal.info()) << "Net LCL " << closedLedger; if ((mMode == OperatingMode::TRACKING) || (mMode == OperatingMode::FULL)) @@ -2926,7 +2926,8 @@ NetworkOPsImp::pubLedger(std::shared_ptr const& lpAccepted) // Don't lock since pubAcceptedTransaction is locking. for (auto const& accTx : *alpAccepted) { - JLOG(m_journal.trace()) << "pubAccepted: " << accTx->getJson(); + JLOG(m_journal.trace()) + << "pubAccepted: " << to_string(accTx->getJson()); pubValidatedTransaction( lpAccepted, *accTx, accTx == *(--alpAccepted->end())); } diff --git a/src/xrpld/app/paths/Pathfinder.cpp b/src/xrpld/app/paths/Pathfinder.cpp index 5864357aec4..c6eaa240737 100644 --- a/src/xrpld/app/paths/Pathfinder.cpp +++ b/src/xrpld/app/paths/Pathfinder.cpp @@ -404,7 +404,7 @@ Pathfinder::getPathLiquidity( catch (std::exception const& e) { JLOG(j_.info()) << "checkpath: exception (" << e.what() << ") " - << path.getJson(JsonOptions::none); + << to_string(path.getJson(JsonOptions::none)); return tefEXCEPTION; } } @@ -526,12 +526,14 @@ Pathfinder::rankPaths( { JLOG(j_.debug()) << "findPaths: dropping : " << transToken(resultCode) - << ": " << currentPath.getJson(JsonOptions::none); + << ": " + << to_string(currentPath.getJson(JsonOptions::none)); } else { - JLOG(j_.debug()) << "findPaths: quality: " << uQuality << ": " - << currentPath.getJson(JsonOptions::none); + JLOG(j_.debug()) + << "findPaths: quality: " << uQuality << ": " + << to_string(currentPath.getJson(JsonOptions::none)); rankedPaths.push_back( {uQuality, currentPath.size(), liquidity, i}); @@ -673,13 +675,14 @@ Pathfinder::getBestPaths( { // We found an extra path that can move the whole amount. fullLiquidityPath = (startsWithIssuer ? removeIssuer(path) : path); - JLOG(j_.debug()) << "Found extra full path: " - << fullLiquidityPath.getJson(JsonOptions::none); + JLOG(j_.debug()) + << "Found extra full path: " + << to_string(fullLiquidityPath.getJson(JsonOptions::none)); } else { JLOG(j_.debug()) << "Skipping a non-filling path: " - << path.getJson(JsonOptions::none); + << to_string(path.getJson(JsonOptions::none)); } } @@ -694,7 +697,7 @@ Pathfinder::getBestPaths( else { JLOG(j_.debug()) << "findPaths: RESULTS: " - << bestPaths.getJson(JsonOptions::none); + << to_string(bestPaths.getJson(JsonOptions::none)); } return bestPaths; } @@ -961,7 +964,7 @@ Pathfinder::addLink( JLOG(j_.trace()) << "addLink< flags=" << addFlags << " onXRP=" << bOnXRP << " completePaths size=" << mCompletePaths.size(); - JLOG(j_.trace()) << currentPath.getJson(JsonOptions::none); + JLOG(j_.trace()) << to_string(currentPath.getJson(JsonOptions::none)); if (addFlags & afADD_ACCOUNTS) { @@ -970,8 +973,9 @@ Pathfinder::addLink( { if (mDstAmount.native() && !currentPath.empty()) { // non-default path to XRP destination - JLOG(j_.trace()) << "complete path found ax: " - << currentPath.getJson(JsonOptions::none); + JLOG(j_.trace()) + << "complete path found ax: " + << to_string(currentPath.getJson(JsonOptions::none)); addUniquePath(mCompletePaths, currentPath); } } @@ -1045,8 +1049,8 @@ Pathfinder::addLink( { JLOG(j_.trace()) << "complete path found ae: " - << currentPath.getJson( - JsonOptions::none); + << to_string(currentPath.getJson( + JsonOptions::none)); addUniquePath( mCompletePaths, currentPath); } @@ -1171,9 +1175,9 @@ Pathfinder::addLink( { // destination is XRP, add account and path is // complete - JLOG(j_.trace()) - << "complete path found bx: " - << currentPath.getJson(JsonOptions::none); + JLOG(j_.trace()) << "complete path found bx: " + << to_string(currentPath.getJson( + JsonOptions::none)); addUniquePath(mCompletePaths, newPath); } else @@ -1220,9 +1224,9 @@ Pathfinder::addLink( book.out.currency == mDstAmount.getCurrency()) { // with the destination account, this path is // complete - JLOG(j_.trace()) - << "complete path found ba: " - << currentPath.getJson(JsonOptions::none); + JLOG(j_.trace()) << "complete path found ba: " + << to_string(currentPath.getJson( + JsonOptions::none)); addUniquePath(mCompletePaths, newPath); } else diff --git a/src/xrpld/app/paths/detail/PaySteps.cpp b/src/xrpld/app/paths/detail/PaySteps.cpp index b73b1ac8acc..ac6e0410ab1 100644 --- a/src/xrpld/app/paths/detail/PaySteps.cpp +++ b/src/xrpld/app/paths/detail/PaySteps.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -556,8 +557,9 @@ toStrands( if (ter != tesSUCCESS) { lastFailTer = ter; - JLOG(j.trace()) << "failed to add path: ter: " << ter - << "path: " << p.getJson(JsonOptions::none); + JLOG(j.trace()) + << "failed to add path: ter: " << ter + << "path: " << to_string(p.getJson(JsonOptions::none)); if (isTemMalformed(ter)) return {ter, std::vector{}}; } diff --git a/src/xrpld/app/rdb/backend/detail/Node.cpp b/src/xrpld/app/rdb/backend/detail/Node.cpp index 493e277bfcd..6bc833cfeb6 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.cpp +++ b/src/xrpld/app/rdb/backend/detail/Node.cpp @@ -201,7 +201,7 @@ saveValidatedLedger( if (!ledger->info().accountHash.isNonZero()) { - JLOG(j.fatal()) << "AH is zero: " << getJson({*ledger, {}}); + JLOG(j.fatal()) << "AH is zero: " << to_string(getJson({*ledger, {}})); UNREACHABLE("ripple::detail::saveValidatedLedger : zero account hash"); } @@ -329,7 +329,8 @@ saveValidatedLedger( // accounts. But otherwise... JLOG(j.warn()) << "Transaction in ledger " << seq << " affects no accounts"; - JLOG(j.warn()) << sleTxn->getJson(JsonOptions::none); + JLOG(j.warn()) + << to_string(sleTxn->getJson(JsonOptions::none)); } *db diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index 9d3e9e39460..cd0ef0de3f9 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -930,7 +930,7 @@ Transactor::operator()() { JLOG(j_.fatal()) << "Transaction serdes mismatch"; JLOG(j_.info()) << to_string(ctx_.tx.getJson(JsonOptions::none)); - JLOG(j_.fatal()) << s2.getJson(JsonOptions::none); + JLOG(j_.fatal()) << to_string(s2.getJson(JsonOptions::none)); UNREACHABLE( "ripple::Transactor::operator() : transaction serdes mismatch"); } diff --git a/src/xrpld/ledger/detail/ApplyStateTable.cpp b/src/xrpld/ledger/detail/ApplyStateTable.cpp index 2c76b9b587d..b8d9d8a5c5a 100644 --- a/src/xrpld/ledger/detail/ApplyStateTable.cpp +++ b/src/xrpld/ledger/detail/ApplyStateTable.cpp @@ -274,7 +274,8 @@ ApplyStateTable::apply( // VFALCO For diagnostics do we want to show // metadata even when the base view is open? - JLOG(j.trace()) << "metadata " << meta.getJson(JsonOptions::none); + JLOG(j.trace()) << "metadata " + << to_string(meta.getJson(JsonOptions::none)); metadata = meta; } diff --git a/src/xrpld/net/detail/RPCCall.cpp b/src/xrpld/net/detail/RPCCall.cpp index c91005a66db..d0fc62c80b1 100644 --- a/src/xrpld/net/detail/RPCCall.cpp +++ b/src/xrpld/net/detail/RPCCall.cpp @@ -522,8 +522,8 @@ class RPCParser Json::Reader reader; Json::Value jvRequest; - JLOG(j_.trace()) << "RPC method: " << jvParams[0u]; - JLOG(j_.trace()) << "RPC json: " << jvParams[1u]; + JLOG(j_.trace()) << "RPC method: " << to_string(jvParams[0u]); + JLOG(j_.trace()) << "RPC json: " << to_string(jvParams[1u]); if (reader.parse(jvParams[1u].asString(), jvRequest)) { @@ -894,7 +894,7 @@ class RPCParser Json::Value jvRequest{Json::objectValue}; bool bLedger = 2 == jvParams.size(); - JLOG(j_.trace()) << "RPC json: " << jvParams[0u]; + JLOG(j_.trace()) << "RPC json: " << to_string(jvParams[0u]); if (reader.parse(jvParams[0u].asString(), jvRequest)) { @@ -1186,7 +1186,7 @@ class RPCParser if (auto stream = j_.trace()) { stream << "Method: '" << strMethod << "'"; - stream << "Params: " << jvParams; + stream << "Params: " << to_string(jvParams); } struct Command @@ -1454,7 +1454,7 @@ rpcCmdToJson( else if (jvRequest.isArray()) std::for_each(jvRequest.begin(), jvRequest.end(), insert_api_version); - JLOG(j.trace()) << "RPC Request: " << jvRequest << std::endl; + JLOG(j.trace()) << "RPC Request: " << to_string(jvRequest) << std::endl; return jvRequest; } diff --git a/src/xrpld/net/detail/RPCSub.cpp b/src/xrpld/net/detail/RPCSub.cpp index 13bdf9119b4..17c6beda537 100644 --- a/src/xrpld/net/detail/RPCSub.cpp +++ b/src/xrpld/net/detail/RPCSub.cpp @@ -86,7 +86,7 @@ class RPCSubImp : public RPCSub } auto jm = broadcast ? j_.debug() : j_.info(); - JLOG(jm) << "RPCCall::fromNetwork push: " << jvObj; + JLOG(jm) << "RPCCall::fromNetwork push: " << to_string(jvObj); mDeque.push_back(std::make_pair(mSeq++, jvObj)); diff --git a/src/xrpld/rpc/detail/RPCHandler.cpp b/src/xrpld/rpc/detail/RPCHandler.cpp index 19b33709c83..b52100598fd 100644 --- a/src/xrpld/rpc/detail/RPCHandler.cpp +++ b/src/xrpld/rpc/detail/RPCHandler.cpp @@ -158,7 +158,7 @@ fillHandler(JsonContext& context, Handler const*& result) : context.params[jss::method].asString(); JLOG(context.j.trace()) << "COMMAND:" << strCommand; - JLOG(context.j.trace()) << "REQUEST:" << context.params; + JLOG(context.j.trace()) << "REQUEST:" << to_string(context.params); auto handler = getHandler( context.apiVersion, context.app.config().BETA_RPC_API, strCommand); @@ -230,30 +230,28 @@ doCommand(RPC::JsonContext& context, Json::Value& result) return error; } - if (auto method = handler->valueMethod_) - { + auto const extra = [&context]() { + using namespace std::string_literals; if (!context.headers.user.empty() || !context.headers.forwardedFor.empty()) { - JLOG(context.j.debug()) - << "start command: " << handler->name_ - << ", user: " << context.headers.user - << ", forwarded for: " << context.headers.forwardedFor; + return ", user: "s + std::string(context.headers.user) + + ", forwarded for: "s + + std::string(context.headers.forwardedFor); + } + return ""s; + }(); + if (auto method = handler->valueMethod_) + { + JLOG(context.j.debug()) << "start command: " << handler->name_ << extra + << to_string(context.params); - auto ret = callMethod(context, method, handler->name_, result); + auto ret = callMethod(context, method, handler->name_, result); - JLOG(context.j.debug()) - << "finish command: " << handler->name_ - << ", user: " << context.headers.user - << ", forwarded for: " << context.headers.forwardedFor; + JLOG(context.j.debug()) << "finish command: " << handler->name_ << extra + << to_string(context.params); - return ret; - } - else - { - auto ret = callMethod(context, method, handler->name_, result); - return ret; - } + return ret; } return rpcUNKNOWN_COMMAND; diff --git a/src/xrpld/rpc/detail/ServerHandler.cpp b/src/xrpld/rpc/detail/ServerHandler.cpp index e5b7d9e3270..1276d7eb805 100644 --- a/src/xrpld/rpc/detail/ServerHandler.cpp +++ b/src/xrpld/rpc/detail/ServerHandler.cpp @@ -353,14 +353,15 @@ ServerHandler::onWSMessage( sb.commit(boost::asio::buffer_copy( sb.prepare(n), boost::asio::buffer(p, n))); }); - JLOG(m_journal.trace()) << "Websocket sending '" << jvResult << "'"; + JLOG(m_journal.trace()) + << "Websocket sending '" << to_string(jvResult) << "'"; session->send( std::make_shared>(std::move(sb))); session->complete(); return; } - JLOG(m_journal.trace()) << "Websocket received '" << jv << "'"; + JLOG(m_journal.trace()) << "Websocket received '" << to_string(jv) << "'"; auto const postResult = m_jobQueue.postCoro( jtCLIENT_WEBSOCKET, @@ -417,7 +418,7 @@ logDuration( << std::chrono::duration_cast( duration) .count() - << " microseconds. request = " << request; + << " microseconds. request = " << to_string(request); } Json::Value @@ -874,12 +875,12 @@ ServerHandler::processRequest( user.remove_suffix(user.size()); } - JLOG(m_journal.debug()) << "Query: " << strMethod << params; + JLOG(m_journal.debug()) << "Query: " << strMethod << to_string(params); // Provide the JSON-RPC method as the field "command" in the request. params[jss::command] = strMethod; JLOG(m_journal.trace()) - << "doRpcCommand:" << strMethod << ":" << params; + << "doRpcCommand:" << strMethod << ":" << to_string(params); Resource::Charge loadType = Resource::feeReferenceRPC; @@ -929,8 +930,9 @@ ServerHandler::processRequest( result["code"] = result[jss::error_code]; result["message"] = result[jss::error_message]; result.removeMember(jss::error_message); - JLOG(m_journal.debug()) << "rpcError: " << result[jss::error] - << ": " << result[jss::error_message]; + JLOG(m_journal.debug()) + << "rpcError: " << to_string(result[jss::error]) << ": " + << to_string(result[jss::error_message]); r[jss::error] = std::move(result); } else @@ -962,8 +964,9 @@ ServerHandler::processRequest( result[jss::status] = jss::error; result[jss::request] = rq; - JLOG(m_journal.debug()) << "rpcError: " << result[jss::error] - << ": " << result[jss::error_message]; + JLOG(m_journal.debug()) + << "rpcError: " << to_string(result[jss::error]) << ": " + << to_string(result[jss::error_message]); } else { diff --git a/src/xrpld/rpc/detail/TransactionSign.cpp b/src/xrpld/rpc/detail/TransactionSign.cpp index d8e4758ddd3..c1289902ee7 100644 --- a/src/xrpld/rpc/detail/TransactionSign.cpp +++ b/src/xrpld/rpc/detail/TransactionSign.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -275,7 +276,7 @@ checkPayment( auto j = app.journal("RPCHandler"); JLOG(j.debug()) << "transactionSign: build_path: " - << result.getJson(JsonOptions::none); + << to_string(result.getJson(JsonOptions::none)); if (!result.empty()) tx_json[jss::Paths] = result.getJson(JsonOptions::none); @@ -899,7 +900,7 @@ transactionSign( using namespace detail; auto j = app.journal("RPCHandler"); - JLOG(j.debug()) << "transactionSign: " << jvRequest; + JLOG(j.debug()) << "transactionSign: " << to_string(jvRequest); // Add and amend fields based on the transaction type. SigningForParams signForParams; @@ -935,7 +936,7 @@ transactionSubmit( auto const& ledger = app.openLedger().current(); auto j = app.journal("RPCHandler"); - JLOG(j.debug()) << "transactionSubmit: " << jvRequest; + JLOG(j.debug()) << "transactionSubmit: " << to_string(jvRequest); // Add and amend fields based on the transaction type. SigningForParams signForParams; @@ -1062,7 +1063,7 @@ transactionSignFor( { auto const& ledger = app.openLedger().current(); auto j = app.journal("RPCHandler"); - JLOG(j.debug()) << "transactionSignFor: " << jvRequest; + JLOG(j.debug()) << "transactionSignFor: " << to_string(jvRequest); // Verify presence of the signer's account field. const char accountField[] = "account"; @@ -1173,7 +1174,7 @@ transactionSubmitMultiSigned( { auto const& ledger = app.openLedger().current(); auto j = app.journal("RPCHandler"); - JLOG(j.debug()) << "transactionSubmitMultiSigned: " << jvRequest; + JLOG(j.debug()) << "transactionSubmitMultiSigned: " << to_string(jvRequest); // When multi-signing, the "Sequence" and "SigningPubKey" fields must // be passed in by the caller.