From 2116ce700dfee8c1735cd4456fcced19169ee414 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 30 Jan 2012 18:00:27 -0800 Subject: [PATCH] Implementations. --- LedgerAcquire.cpp | 56 ++++++++++++++++++++++++++++++++++++----------- LedgerAcquire.h | 8 +++---- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/LedgerAcquire.cpp b/LedgerAcquire.cpp index 033d5eeba..1ad99cad5 100644 --- a/LedgerAcquire.cpp +++ b/LedgerAcquire.cpp @@ -40,35 +40,65 @@ void LedgerAcquire::trigger(bool timer) // WRITEME } -void LedgerAcquire::peerHas(Peer::pointer) +void LedgerAcquire::peerHas(Peer::pointer ptr) { - // WRITEME + boost::recursive_mutex::scoped_lock sl(mLock); + std::list >::iterator it=mPeers.begin(); + while(it!=mPeers.end()) + { + Peer::pointer pr=it->lock(); + if(!pr) // we have a dead entry, remove it + it=mPeers.erase(it); + else + { + if(pr==ptr) return; // we already have this peer + ++it; + } + } + mPeers.push_back(ptr); } -void LedgerAcquire::badPeer(Peer::pointer) +void LedgerAcquire::badPeer(Peer::pointer ptr) { - // WRITEME + boost::recursive_mutex::scoped_lock sl(mLock); + std::list >::iterator it=mPeers.begin(); + while(it!=mPeers.end()) + { + Peer::pointer pr=it->lock(); + if(!pr) // we have a dead entry, remove it + it=mPeers.erase(it); + else + { + if(pr==ptr) + { // We found a pointer to the bad peer + mPeers.erase(it); + return; + } + ++it; + } + } } -bool LedgerAcquire::takeBase(std::vector data) +bool LedgerAcquire::takeBase(const std::vector& data) +{ // Return value: true=normal, false=bad data + if(mHaveBase) return true; + // WRITEME + return true; +} + +bool LedgerAcquire::takeTxNode(const std::list& hashes, const std::list >& data) { // WRITEME return true; } -bool LedgerAcquire::takeTxNode(std::list hashes, std::list > data) +bool LedgerAcquire::takeAsNode(const std::list& hashes, const std::list >& data) { // WRITEME return true; } -bool LedgerAcquire::takeAsNode(std::list hashes, std::list > data) -{ - // WRITEME - return true; -} - -bool LedgerAcquire::takeTx(std::list hashes, std::list > data) +bool LedgerAcquire::takeTx(const std::list& hashes, const std::list >& data) { // WRITEME return true; diff --git a/LedgerAcquire.h b/LedgerAcquire.h index f2a4f5eb7..f40a301f7 100644 --- a/LedgerAcquire.h +++ b/LedgerAcquire.h @@ -44,10 +44,10 @@ public: void peerHas(Peer::pointer); void badPeer(Peer::pointer); - bool takeBase(std::vector data); - bool takeTxNode(std::list hashes, std::list > data); - bool takeAsNode(std::list hashes, std::list > data); - bool takeTx(std::list hashes, std::list > data); + bool takeBase(const std::vector& data); + bool takeTxNode(const std::list& hashes, const std::list >& data); + bool takeAsNode(const std::list& hashes, const std::list >& data); + bool takeTx(const std::list& hashes, const std::list >& data); }; class LedgerAcquireMaster