diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 4d4920f746..9a7ef20742 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -141,6 +141,22 @@ bool LedgerMaster::haveLedger(uint32 seq) return mCompleteLedgers.hasValue(seq); } +bool LedgerMaster::getValidatedRange(uint32& minVal, uint32& maxVal) +{ + boost::recursive_mutex::scoped_lock sl(mLock); + if (!mValidLedger) + return false; + maxVal = mValidLedger->getLedgerSeq(); + if (maxVal == 0) + return false; + minVal = mCompleteLedgers.prevMissing(maxVal); + if (minVal == RangeSet::RangeSetAbsent) + minVal = 0; + else + ++minVal; + return true; +} + void LedgerMaster::asyncAccept(Ledger::pointer ledger) { uint32 seq = ledger->getLedgerSeq(); diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index d2dc0c2d57..6c9d87122b 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -143,6 +143,7 @@ public: bool haveLedgerRange(uint32 from, uint32 to); bool haveLedger(uint32 seq); + bool getValidatedRange(uint32& minVal, uint32& maxVal); void resumeAcquiring(); diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 3047aa1391..55fe7de453 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -175,6 +175,7 @@ public: bool isValidated(uint32 seq); bool isValidated(uint32 seq, const uint256& hash); bool isValidated(Ledger::ref l) { return isValidated(l->getLedgerSeq(), l->getHash()); } + bool getValidatedRange(uint32& minVal, uint32& maxVal) { return mLedgerMaster->getValidatedRange(minVal, maxVal); } SerializedValidation::ref getLastValidation() { return mLastValidation; } void setLastValidation(SerializedValidation::ref v) { mLastValidation = v; }