diff --git a/src/cpp/ripple/HTTPRequest.cpp b/src/cpp/ripple/HTTPRequest.cpp index f5d0dc1c8..b4420a243 100644 --- a/src/cpp/ripple/HTTPRequest.cpp +++ b/src/cpp/ripple/HTTPRequest.cpp @@ -7,6 +7,8 @@ #include "Log.h" SETUP_LOG(); +// Logic to handle incoming HTTP reqests + void HTTPRequest::reset() { vHeaders.clear(); diff --git a/src/cpp/ripple/HTTPRequest.h b/src/cpp/ripple/HTTPRequest.h index 596ce8924..1ad3081f0 100644 --- a/src/cpp/ripple/HTTPRequest.h +++ b/src/cpp/ripple/HTTPRequest.h @@ -16,7 +16,7 @@ enum HTTPRequestAction }; class HTTPRequest -{ // an HTTP request in progress +{ // an HTTP request we are handling from a client protected: enum state @@ -58,4 +58,4 @@ public: int getDataSize() { return iDataSize; } }; -#endif \ No newline at end of file +#endif diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index aa8b16d57..75bac9ba4 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -954,6 +954,40 @@ int Ledger::getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerI return currentLedgerIndex - desiredLedgerIndex - 1; } +uint256 Ledger::getLedgerHash(uint32 ledgerIndex) +{ // return the hash of the specified ledger, 0 if not available + + // easy cases + if (ledgerIndex > mLedgerSeq) + return uint256(); + if (ledgerIndex == mLedgerSeq) + return getHash(); + if (ledgerIndex == (mLedgerSeq - 1)) + return mParentHash; + + // within 255 + int offset = getLedgerHashOffset(ledgerIndex, mLedgerSeq); + if (offset != -1) + { + SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); + if (hashIndex) + return hashIndex->getFieldV256(sfHashes).peekValue().at(offset); + else + assert(false); + } + + if ((ledgerIndex & 0xff) != 0) + return uint256(); + + SLE::pointer hashIndex = getSLE(getLedgerHashIndex(ledgerIndex)); + if (hashIndex) + return hashIndex->getFieldV256(sfHashes).peekValue().at(getLedgerHashOffset(ledgerIndex, mLedgerSeq)); + else + assert(false); + + return uint256(); +} + uint256 Ledger::getBookBase(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID) { @@ -1112,7 +1146,6 @@ void Ledger::updateSkipList() if (!skipList) { skipList = boost::make_shared(ltLEDGER_HASHES, hash); - skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); } else hashes = skipList->getFieldV256(sfHashes).peekValue(); @@ -1135,7 +1168,6 @@ void Ledger::updateSkipList() if (!skipList) { skipList = boost::make_shared(ltLEDGER_HASHES, hash); - skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); } else hashes = skipList->getFieldV256(sfHashes).peekValue(); diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 741177b05..b9cf05892 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -198,6 +198,7 @@ public: static uint256 getLedgerHashIndex(uint32 desiredLedgerIndex); static int getLedgerHashOffset(uint32 desiredLedgerIndex); static int getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerIndex); + uint256 getLedgerHash(uint32 ledgerIndex); static uint256 getLedgerFeatureIndex(); static uint256 getLedgerFeeIndex(); diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index cca4ba8c0..c1c36bb7b 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -96,7 +96,7 @@ static bool LEFInit() ; DECLARE_LEF(LedgerHashes, ltLEDGER_HASHES) - << SOElement(sfFirstLedgerSequence, SOE_OPTIONAL) + << SOElement(sfFirstLedgerSequence, SOE_OPTIONAL) // Remove if we do a ledger restart << SOElement(sfLastLedgerSequence, SOE_OPTIONAL) << SOElement(sfHashes, SOE_REQUIRED) ; diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index 8d68fff13..d1b6f4b18 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -540,6 +540,7 @@ bool SHAMap::delItem(const uint256& id) SHAMapItem::pointer item = onlyBelow(node.get()); if (item) { + returnNode(node, true); eraseChildren(node); #ifdef ST_DEBUG std::cerr << "Making item node " << *node << std::endl; diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index cc8a932b7..57ef55200 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -56,7 +56,7 @@ FIELD(BondAmount, UINT32, 23) FIELD(LoadFee, UINT32, 24) FIELD(OfferSequence, UINT32, 25) - FIELD(FirstLedgerSequence, UINT32, 26) + FIELD(FirstLedgerSequence, UINT32, 26) // Deprecated: do not use FIELD(LastLedgerSequence, UINT32, 27) FIELD(TransactionIndex, UINT32, 28) FIELD(OperationLimit, UINT32, 29)