/* */ #include "Peer.h" Peer* Peer::nullPeer = new Peer("", 0, 0, 0); void Peer::updateBitfield(int index, int operation) { if(operation == 1) { bitfield->setBit(index); } else if(operation == 0) { bitfield->unsetBit(index); } } #define THRESHOLD 1024*1024*2 bool Peer::shouldChoke() const { if(bitfield->countBlock()*0.7 < bitfield->countMissingBlock()) { return false; } if(peerDownload <= pieceLength*10) { return false; } // we are always optimistic. if(amInterested && peerInterested) { return false; } if(amChocking) { return !(peerDownload+pieceLength*5 < peerUpload); } else { return peerDownload >= peerUpload+pieceLength*5; } } bool Peer::hasPiece(int index) const { return bitfield->isBitSet(index); } bool Peer::isSeeder() const { return bitfield->isAllBitSet(); }