From be1ca396c58e65088363302180d5e4d066e6774b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 14 Aug 2013 12:57:55 -0700 Subject: [PATCH] Handle sequence numbers better in peer messages. --- .../ripple_app/consensus/ripple_LedgerConsensus.cpp | 6 +++++- modules/ripple_app/ledger/LedgerMaster.cpp | 4 ++-- modules/ripple_app/peers/ripple_Peer.cpp | 12 +++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/ripple_app/consensus/ripple_LedgerConsensus.cpp b/modules/ripple_app/consensus/ripple_LedgerConsensus.cpp index 3ed693d17..e2845c508 100644 --- a/modules/ripple_app/consensus/ripple_LedgerConsensus.cpp +++ b/modules/ripple_app/consensus/ripple_LedgerConsensus.cpp @@ -413,7 +413,11 @@ void LedgerConsensus::statusChange (protocol::NodeEvent event, Ledger& ledger) s.set_ledgerhash (hash.begin (), hash.size ()); uint32 uMin, uMax; - getApp().getOPs ().getFullValidatedRange (uMin, uMax); + if (!getApp().getOPs ().getFullValidatedRange (uMin, uMax)) + { + uMin = 0; + uMax = 0; + } s.set_firstseq (uMin); s.set_lastseq (uMax); diff --git a/modules/ripple_app/ledger/LedgerMaster.cpp b/modules/ripple_app/ledger/LedgerMaster.cpp index 37a809a87..f470c91dc 100644 --- a/modules/ripple_app/ledger/LedgerMaster.cpp +++ b/modules/ripple_app/ledger/LedgerMaster.cpp @@ -250,7 +250,7 @@ bool LedgerMaster::getFullValidatedRange (uint32& minVal, uint32& maxVal) minVal = mCompleteLedgers.prevMissing (maxVal); if (minVal == RangeSet::absent) - minVal = 0; + minVal = maxVal; else ++minVal; @@ -272,7 +272,7 @@ bool LedgerMaster::getValidatedRange (uint32& minVal, uint32& maxVal) minVal = mCompleteLedgers.prevMissing (maxVal); if (minVal == RangeSet::absent) - minVal = 0; + minVal = maxVal; else ++minVal; diff --git a/modules/ripple_app/peers/ripple_Peer.cpp b/modules/ripple_app/peers/ripple_Peer.cpp index 5d4c74598..6aa4496b0 100644 --- a/modules/ripple_app/peers/ripple_Peer.cpp +++ b/modules/ripple_app/peers/ripple_Peer.cpp @@ -1798,11 +1798,17 @@ void PeerImp::recvStatus (protocol::TMStatusChange& packet) } else mPreviousLedgerHash.zero (); - if (packet.has_firstseq ()) + if (packet.has_firstseq () && packet.has_lastseq()) + { mMinLedger = packet.firstseq (); - - if (packet.has_lastseq ()) mMaxLedger = packet.lastseq (); + + // Work around some servers that report sequences incorrectly + if (mMinLedger == 0) + mMaxLedger = 0; + if (mMaxLedger == 0) + mMinLedger = 0; + } } void PeerImp::recvGetLedger (protocol::TMGetLedger& packet, Application::ScopedLockType& masterLockHolder)