/* */ #include "BtHaveMessage.h" #include "Peer.h" #include "PieceStorage.h" #include "message.h" #include "DlAbortEx.h" namespace aria2 { const char BtHaveMessage::NAME[] = "have"; BtHaveMessage::BtHaveMessage(size_t index):IndexBtMessage(ID, NAME, index) {} BtHaveMessage* BtHaveMessage::create (const unsigned char* data, size_t dataLength) { return IndexBtMessage::create(data, dataLength); } void BtHaveMessage::doReceivedAction() { if(isMetadataGetMode()) { return; } getPeer()->updateBitfield(getIndex(), 1); getPieceStorage()->addPieceStats(getIndex()); if(getPeer()->isSeeder() && getPieceStorage()->downloadFinished()) { throw DL_ABORT_EX(MSG_GOOD_BYE_SEEDER); } } } // namespace aria2