diff --git a/src/Ledger.h b/src/Ledger.h index 93d0d2ff34..41ac04b86e 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -155,6 +155,12 @@ public: static Ledger::pointer loadByIndex(uint32 ledgerIndex); static Ledger::pointer loadByHash(const uint256& ledgerHash); + // next/prev function + SLE::pointer getNextSLE(const uint256& hash); // first node >hash + SLE::pointer getNextSLE(const uint256& hash, const uint256& max); // first node >hash, min + // index calculation functions static uint256 getAccountRootIndex(const uint160& uAccountID); diff --git a/src/LedgerNode.cpp b/src/LedgerNode.cpp index 4704fed722..d7345d1224 100644 --- a/src/LedgerNode.cpp +++ b/src/LedgerNode.cpp @@ -46,6 +46,38 @@ LedgerStateParms Ledger::writeBack(LedgerStateParms parms, SLE::pointer entry) return lepOKAY; } +SLE::pointer Ledger::getNextSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getNextSLE(const uint256& hash, const uint256& max) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() > max)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekPrevItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash, const uint256& min) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() < min)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + SLE::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, LedgerEntryType let ) { diff --git a/src/Peer.cpp b/src/Peer.cpp index eff19b3103..b992823b58 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -326,7 +326,7 @@ void Peer::handle_read_header(const boost::system::error_code& error) { unsigned msg_len = PackedMessage::getLength(mReadbuf); // WRITEME: Compare to maximum message length, abort if too large - if (msg_len>(32*1024*1024)) + if ((msg_len > (32 * 1024 * 1024)) || (msg_len == 0)) { detach("hrh"); return;