From a05a2c71818f67b4f31cb482e7ff726ce282e88c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 30 Jan 2013 01:28:06 -0800 Subject: [PATCH] Make RPC ledger_header work. --- src/cpp/ripple/CallRPC.cpp | 21 ++++++++++++++++++++- src/cpp/ripple/CallRPC.h | 1 + src/cpp/ripple/Ledger.cpp | 12 ++++++------ src/cpp/ripple/RPCHandler.cpp | 7 ++++++- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 13f3e7ff4f..6db317cca5 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -229,6 +229,25 @@ Json::Value RPCParser::parseLedger(const Json::Value& jvParams) return jvRequest; } +// ledger_header | +Json::Value RPCParser::parseLedgerId(const Json::Value& jvParams) +{ + Json::Value jvRequest(Json::objectValue); + + std::string strLedger = jvParams[0u].asString(); + + if (strLedger.length() > 32) + { + jvRequest["ledger_hash"] = strLedger; + } + else + { + jvRequest["ledger_index"] = lexical_cast_s(strLedger); + } + + return jvRequest; +} + #if ENABLE_INSECURE // login Json::Value RPCParser::parseLogin(const Json::Value& jvParams) @@ -484,7 +503,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "ledger_closed", &RPCParser::parseAsIs, 0, 0 }, { "ledger_current", &RPCParser::parseAsIs, 0, 0 }, // { "ledger_entry", &RPCParser::parseLedgerEntry, -1, -1 }, -// { "ledger_header", &RPCParser::parseLedgerHeader, -1, -1 }, + { "ledger_header", &RPCParser::parseLedgerId, 1, 1 }, { "log_level", &RPCParser::parseLogLevel, 0, 2 }, { "logrotate", &RPCParser::parseAsIs, 0, 0 }, // { "nickname_info", &RPCParser::parseNicknameInfo, 1, 1 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 7f8d2ebe6b..5a5aae7a09 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -23,6 +23,7 @@ protected: Json::Value parseEvented(const Json::Value& jvParams); Json::Value parseGetCounts(const Json::Value& jvParams); Json::Value parseLedger(const Json::Value& jvParams); + Json::Value parseLedgerId(const Json::Value& jvParams); Json::Value parseInternal(const Json::Value& jvParams); #if ENABLE_INSECURE Json::Value parseLogin(const Json::Value& jvParams); diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 11f2b2d774..ad6296ea34 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -663,14 +663,14 @@ Json::Value Ledger::getJson(int options) { Json::Value ledger(Json::objectValue); - bool full = (options & LEDGER_JSON_FULL) != 0; + bool bFull = isSetBit(options, LEDGER_JSON_FULL); boost::recursive_mutex::scoped_lock sl(mLock); ledger["parentHash"] = mParentHash.GetHex(); ledger["seqNum"] = boost::lexical_cast(mLedgerSeq); - if(mClosed || full) + if (mClosed || bFull) { if (mClosed) ledger["closed"] = true; @@ -693,14 +693,14 @@ Json::Value Ledger::getJson(int options) else ledger["closed"] = false; - if (mTransactionMap && (full || ((options & LEDGER_JSON_DUMP_TXRP) != 0))) + if (mTransactionMap && (bFull || ((options & LEDGER_JSON_DUMP_TXRP) != 0))) { Json::Value txns(Json::arrayValue); SHAMapTreeNode::TNType type; for (SHAMapItem::pointer item = mTransactionMap->peekFirstItem(type); !!item; item = mTransactionMap->peekNextItem(item->getTag(), type)) { - if (full) + if (bFull) { if (type == SHAMapTreeNode::tnTRANSACTION_NM) { @@ -733,13 +733,13 @@ Json::Value Ledger::getJson(int options) ledger["transactions"] = txns; } - if (mAccountStateMap && (full || ((options & LEDGER_JSON_DUMP_STATE) != 0))) + if (mAccountStateMap && (bFull || ((options & LEDGER_JSON_DUMP_STATE) != 0))) { Json::Value state(Json::arrayValue); for (SHAMapItem::pointer item = mAccountStateMap->peekFirstItem(); !!item; item = mAccountStateMap->peekNextItem(item->getTag())) { - if (full) + if (bFull) { SerializerIterator sit(item->peekSerializer()); SerializedLedgerEntry sle(sit, item->getTag()); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index ed5640c4a3..9ed70600da 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2076,6 +2076,7 @@ Json::Value RPCHandler::lookupLedger(Json::Value jvRequest, Ledger::pointer& lpL // { // ledger_hash : // ledger_index : +// ... // } Json::Value RPCHandler::doLedgerEntry(Json::Value jvRequest) { @@ -2299,9 +2300,13 @@ Json::Value RPCHandler::doLedgerHeader(Json::Value jvRequest) jvResult["ledger_data"] = strHex(s.peekData()); if (mRole == ADMIN) + { + // As admin, they can trust us, so we provide this information. + lpLedger->setClosed(); // XXX Hack to get info. lpLedger->addJson(jvResult, 0); + } - return jvRequest; + return jvResult; } boost::unordered_set RPCHandler::parseAccountIds(const Json::Value& jvArray)