/* */ #include "ChokeMessage.h" #include "PeerInteraction.h" #include "message.h" #include "PeerMessageUtil.h" #include "DlAbortEx.h" ChokeMessage* ChokeMessage::create(const char* data, int dataLength) { if(dataLength != 1) { throw new DlAbortEx("invalid payload size for %s, size = %d. It should be %d", "choke", dataLength, 1); } int id = PeerMessageUtil::getId(data); if(id != ID) { throw new DlAbortEx("invalid ID=%d for %s. It should be %d.", id, "choke", ID); } ChokeMessage* chokeMessage = new ChokeMessage(); return chokeMessage; } void ChokeMessage::receivedAction() { peer->peerChoking = true; peerInteraction->onChoked(); } bool ChokeMessage::sendPredicate() const { return !peer->amChoking; } const char* ChokeMessage::getMessage() { if(!inProgress) { /** * len --- 1, 4bytes * id --- 0, 1byte * total: 5bytes */ PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 1, ID); } return msg; } int ChokeMessage::getMessageLength() { return sizeof(msg); } void ChokeMessage::onSendComplete() { peer->amChoking = true; peerInteraction->rejectAllPieceMessageInQueue(); } string ChokeMessage::toString() const { return "choke"; }