mirror of
https://github.com/aria2/aria2.git
synced 2025-02-26 08:22:11 +00:00
In aria2, one piece is downloaded from several peers, so when hash check failed for that piece, it cannot determine which peer(s) sent bad data. So, we ignore peer who sent last block of data in random minutes. We use randomized timeout because all peers get waken up at the almost same time.
113 lines
2.2 KiB
C++
113 lines
2.2 KiB
C++
#ifndef D_MOCK_PEER_STORAGE_H
|
|
#define D_MOCK_PEER_STORAGE_H
|
|
|
|
#include "PeerStorage.h"
|
|
|
|
#include <algorithm>
|
|
|
|
#include "Peer.h"
|
|
|
|
namespace aria2 {
|
|
|
|
class MockPeerStorage : public PeerStorage {
|
|
private:
|
|
TransferStat stat;
|
|
std::deque<SharedHandle<Peer> > peers;
|
|
std::deque<SharedHandle<Peer> > droppedPeers;
|
|
std::vector<SharedHandle<Peer> > activePeers;
|
|
int numChokeExecuted_;
|
|
public:
|
|
MockPeerStorage():numChokeExecuted_(0) {}
|
|
virtual ~MockPeerStorage() {}
|
|
|
|
virtual bool addPeer(const SharedHandle<Peer>& peer) {
|
|
peers.push_back(peer);
|
|
return true;
|
|
}
|
|
|
|
virtual void addPeer(const std::vector<SharedHandle<Peer> >& peers) {
|
|
std::copy(peers.begin(), peers.end(), back_inserter(this->peers));
|
|
}
|
|
|
|
virtual const std::deque<SharedHandle<Peer> >& getPeers() {
|
|
return peers;
|
|
}
|
|
|
|
virtual size_t countPeer() const
|
|
{
|
|
return peers.size();
|
|
}
|
|
|
|
virtual const std::deque<SharedHandle<Peer> >& getDroppedPeers() {
|
|
return droppedPeers;
|
|
}
|
|
|
|
void addDroppedPeer(const SharedHandle<Peer>& peer) {
|
|
droppedPeers.push_back(peer);
|
|
}
|
|
|
|
virtual SharedHandle<Peer> getUnusedPeer() {
|
|
return SharedHandle<Peer>();
|
|
}
|
|
|
|
virtual bool isPeerAvailable() {
|
|
return false;
|
|
}
|
|
|
|
void setActivePeers(const std::vector<SharedHandle<Peer> >& activePeers)
|
|
{
|
|
this->activePeers = activePeers;
|
|
}
|
|
|
|
virtual void getActivePeers(std::vector<SharedHandle<Peer> >& peers) {
|
|
peers.insert(peers.end(), activePeers.begin(), activePeers.end());
|
|
}
|
|
|
|
virtual TransferStat calculateStat() {
|
|
return stat;
|
|
}
|
|
|
|
void setStat(const TransferStat& stat) {
|
|
this->stat = stat;
|
|
}
|
|
|
|
virtual bool isBadPeer(const std::string& ipaddr)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual void addBadPeer(const std::string& ipaddr)
|
|
{
|
|
}
|
|
|
|
virtual void returnPeer(const SharedHandle<Peer>& peer)
|
|
{
|
|
}
|
|
|
|
virtual bool chokeRoundIntervalElapsed()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual void executeChoke()
|
|
{
|
|
++numChokeExecuted_;
|
|
}
|
|
|
|
virtual void updateTransferStatFor(const SharedHandle<Peer>& peer) {}
|
|
|
|
virtual TransferStat getTransferStatFor(const SharedHandle<Peer>& peer)
|
|
{
|
|
return TransferStat();
|
|
}
|
|
|
|
int getNumChokeExecuted() const
|
|
{
|
|
return numChokeExecuted_;
|
|
}
|
|
};
|
|
|
|
#endif // D_MOCK_PEER_STORAGE_H
|
|
|
|
} // namespace aria2
|