Pathfinding now verifies source and destination accounts exist.

This commit is contained in:
Arthur Britto
2013-02-12 16:05:03 -08:00
parent 61c84eba2e
commit 7e271ce509

View File

@@ -193,9 +193,31 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax
% RippleAddress::createHumanAccountID(mSrcIssuerID) % RippleAddress::createHumanAccountID(mSrcIssuerID)
); );
if (mLedger) if (!mLedger)
{ {
cLog(lsDEBUG) << boost::str(boost::format("findPaths< no ledger"));
return false;
}
LedgerEntrySet lesActive(mLedger); LedgerEntrySet lesActive(mLedger);
SLE::pointer sleSrc = lesActive.entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(mSrcAccountID));
if (!sleSrc)
{
cLog(lsDEBUG) << boost::str(boost::format("findPaths< no source"));
return false;
}
SLE::pointer sleDst = lesActive.entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(mDstAccountID));
if (!sleDst)
{
cLog(lsDEBUG) << boost::str(boost::format("findPaths< no dest"));
return false;
}
std::vector<STPath> vspResults; std::vector<STPath> vspResults;
std::queue<STPath> qspExplore; // Path stubs to explore. std::queue<STPath> qspExplore; // Path stubs to explore.
@@ -359,13 +381,13 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax
// Create new paths for each outbound account not already in the path. // Create new paths for each outbound account not already in the path.
AccountItems rippleLines(speEnd.mAccountID, mLedger, AccountItem::pointer(new RippleState())); AccountItems rippleLines(speEnd.mAccountID, mLedger, AccountItem::pointer(new RippleState()));
SLE::pointer sleSrc = lesActive.entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(speEnd.mAccountID)); SLE::pointer sleEnd = lesActive.entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(speEnd.mAccountID));
tLog(sleSrc, lsDEBUG) tLog(sleEnd, lsDEBUG)
<< boost::str(boost::format("findPaths: account without root: %s") << boost::str(boost::format("findPaths: account without root: %s")
% RippleAddress::createHumanAccountID(speEnd.mAccountID)); % RippleAddress::createHumanAccountID(speEnd.mAccountID));
bool bRequireAuth = isSetBit(sleSrc->getFieldU32(sfFlags), lsfRequireAuth); bool bRequireAuth = isSetBit(sleEnd->getFieldU32(sfFlags), lsfRequireAuth);
BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems()) BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems())
{ {
@@ -532,11 +554,6 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax
cLog(lsDEBUG) << boost::str(boost::format("findPaths: RESULTS: non-defaults filtered away")); cLog(lsDEBUG) << boost::str(boost::format("findPaths: RESULTS: non-defaults filtered away"));
} }
} }
}
else
{
cLog(lsDEBUG) << boost::str(boost::format("findPaths: no ledger"));
}
cLog(lsDEBUG) << boost::str(boost::format("findPaths< bFound=%d") % bFound); cLog(lsDEBUG) << boost::str(boost::format("findPaths< bFound=%d") % bFound);