diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index abc2575145..e31462d63a 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -28,7 +28,7 @@ void TransactionAcquire::trigger(Peer::pointer peer) tmGL->set_ledgerhash(mHash.begin(), mHash.size()); tmGL->set_itype(newcoin::liTS_CANDIDATE); *(tmGL->add_nodeids()) = SHAMapNode().getRawString(); - sendRequest(tmGL); + sendRequest(tmGL, peer); } if (mHaveRoot) { @@ -62,11 +62,13 @@ void TransactionAcquire::trigger(Peer::pointer peer) resetTimer(); } -bool TransactionAcquire::takeNode(const std::list& nodeIDs, +bool TransactionAcquire::takeNodes(const std::list& nodeIDs, const std::list< std::vector >& data, Peer::pointer peer) { - if (mComplete || mFailed) + if (mComplete) return true; + if (mFailed) + return false; std::list::const_iterator nodeIDit = nodeIDs.begin(); std::list< std::vector >::const_iterator nodeDatait = data.begin(); while (nodeIDit != nodeIDs.end()) @@ -170,13 +172,28 @@ bool LedgerConsensus::peerPosition(LedgerProposal::pointer newPosition) bool LedgerConsensus::peerHasSet(Peer::pointer peer, const std::vector& sets) { - // WRITEME + for (std::vector::const_iterator it = sets.begin(), end = sets.end(); it != end; ++it) + { + std::vector< boost::weak_ptr >& set = mPeerData[*it]; + bool found = false; + for (std::vector< boost::weak_ptr >::iterator iit = set.begin(), iend = set.end(); iit != iend; ++iit) + if (iit->lock() == peer) + found = true; + if (!found) + { + set.push_back(peer); + boost::unordered_map::iterator acq = mAcquiring.find(*it); + if (acq != mAcquiring.end()) + acq->second->peerHas(peer); + } + } return true; } bool LedgerConsensus::peerGaveNodes(Peer::pointer peer, const uint256& setHash, const std::list& nodeIDs, const std::list< std::vector >& nodeData) { - // WRITEME - return true; + boost::unordered_map::iterator acq = mAcquiring.find(setHash); + if (acq == mAcquiring.end()) return false; + return acq->second->takeNodes(nodeIDs, nodeData, peer); } diff --git a/src/LedgerConsensus.h b/src/LedgerConsensus.h index 67ef0cd921..8b31f84bab 100644 --- a/src/LedgerConsensus.h +++ b/src/LedgerConsensus.h @@ -34,7 +34,7 @@ public: SHAMap::pointer getMap() { return mMap; } - bool takeNode(const std::list& IDs, const std::list< std::vector >& data, + bool takeNodes(const std::list& IDs, const std::list< std::vector >& data, Peer::pointer); };