/* */ #include "BtUnchokeMessage.h" #include "PeerMessageUtil.h" #include "DlAbortEx.h" #include "message.h" BtUnchokeMessageHandle BtUnchokeMessage::create(const unsigned char* data, int32_t dataLength) { if(dataLength != 1) { throw new DlAbortEx(EX_INVALID_PAYLOAD_SIZE, "unchoke", dataLength, 1); } int8_t id = PeerMessageUtil::getId(data); if(id != ID) { throw new DlAbortEx(EX_INVALID_BT_MESSAGE_ID, id, "unchoke", ID); } BtUnchokeMessageHandle message = new BtUnchokeMessage(); return message; } void BtUnchokeMessage::doReceivedAction() { peer->peerChoking = false; } bool BtUnchokeMessage::sendPredicate() const { return peer->amChoking; } int32_t BtUnchokeMessage::MESSAGE_LENGTH = 5; const unsigned char* BtUnchokeMessage::getMessage() { if(!msg) { /** * len --- 1, 4bytes * id --- 1, 1byte * total: 5bytes */ msg = new unsigned char[MESSAGE_LENGTH]; PeerMessageUtil::createPeerMessageString(msg, MESSAGE_LENGTH, 1, ID); } return msg; } int32_t BtUnchokeMessage::getMessageLength() { return MESSAGE_LENGTH; } void BtUnchokeMessage::onSendComplete() { peer->amChoking = false; } string BtUnchokeMessage::toString() const { return "unchoke"; }