From a8794de98715cea70487a3356b8817de567d1245 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 16 Jul 2013 15:53:56 -0700 Subject: [PATCH] Check the correct account's auth required flag --- src/cpp/ripple/ripple_Pathfinder.cpp | 15 ++++++++++----- src/cpp/ripple/ripple_Pathfinder.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/ripple_Pathfinder.cpp b/src/cpp/ripple/ripple_Pathfinder.cpp index d81091a72e..a2fa47d717 100644 --- a/src/cpp/ripple/ripple_Pathfinder.cpp +++ b/src/cpp/ripple/ripple_Pathfinder.cpp @@ -508,10 +508,12 @@ bool Pathfinder::findPaths (const unsigned int iMaxSteps, const unsigned int iMa else { // save this candidate - int out = getPathsOut (speEnd.mCurrencyID, uPeerID, bRequireAuth, dstCurrency, mDstAccountID); + int out = getPathsOut (speEnd.mCurrencyID, uPeerID, dstCurrency, mDstAccountID); if (out != 0) - candidates.push_back (std::make_pair (out, uPeerID)); + candidates.push_back (std::make_pair (out, uPeerID)); + else + WriteLog(lsTRACE, Pathfinder) << "findPaths: " << RippleAddress::createHumanAccountID(uPeerID) << " has no paths out"; } } @@ -803,7 +805,7 @@ bool Pathfinder::matchesOrigin (const uint160& currency, const uint160& issuer) } int Pathfinder::getPathsOut (const uint160& currencyID, const uint160& accountID, - bool authRequired, bool isDstCurrency, const uint160& dstAccount) + bool isDstCurrency, const uint160& dstAccount) { #ifdef C11X std::pair accountCurrency (currencyID, accountID); @@ -815,6 +817,9 @@ int Pathfinder::getPathsOut (const uint160& currencyID, const uint160& accountID if (it != mPOMap.end ()) return it->second; + int aFlags = mLedger->getSLEi(Ledger::getAccountRootIndex(accountID))->getFieldU32(sfFlags); + bool bAuthRequired = aFlags & lsfRequireAuth; + int count = 0; AccountItems& rippleLines (mRLCache->getRippleLines (accountID)); BOOST_FOREACH (AccountItem::ref item, rippleLines.getItems ()) @@ -826,10 +831,10 @@ int Pathfinder::getPathsOut (const uint160& currencyID, const uint160& accountID else if (!rspEntry->getBalance ().isPositive () && (!rspEntry->getLimitPeer () || -rspEntry->getBalance () >= rspEntry->getLimitPeer () - || (authRequired && !rspEntry->getAuth ()))) + || (bAuthRequired && !rspEntry->getAuth ()))) nothing (); else if (isDstCurrency && (dstAccount == rspEntry->getAccountIDPeer ())) - count += 100; // count a path to the destination extra + count += 10000; // count a path to the destination extra else ++count; } diff --git a/src/cpp/ripple/ripple_Pathfinder.h b/src/cpp/ripple/ripple_Pathfinder.h index a706bcc433..9a5f03ba89 100644 --- a/src/cpp/ripple/ripple_Pathfinder.h +++ b/src/cpp/ripple/ripple_Pathfinder.h @@ -62,7 +62,7 @@ private: bool matchesOrigin (const uint160& currency, const uint160& issuer); int getPathsOut (const uint160& currency, const uint160& accountID, - bool isAuthRequired, bool isDestCurrency, const uint160& dest); + bool isDestCurrency, const uint160& dest); private: uint160 mSrcAccountID;