/* */ #include "BtUnchokeMessage.h" #include "Peer.h" #include "SocketBuffer.h" namespace aria2 { const char BtUnchokeMessage::NAME[] = "unchoke"; BtUnchokeMessage::BtUnchokeMessage():ZeroBtMessage(ID, NAME) {} BtUnchokeMessage* BtUnchokeMessage::create (const unsigned char* data, size_t dataLength) { return ZeroBtMessage::create(data, dataLength); } void BtUnchokeMessage::doReceivedAction() { if(isMetadataGetMode()) { return; } getPeer()->peerChoking(false); } bool BtUnchokeMessage::sendPredicate() const { return getPeer()->amChoking(); } namespace { struct ThisProgressUpdate : public ProgressUpdate { ThisProgressUpdate(const std::shared_ptr& peer) : peer(peer) {} virtual void update(size_t length, bool complete) { if(complete) { peer->amChoking(false); } } std::shared_ptr peer; }; } // namespace ProgressUpdate* BtUnchokeMessage::getProgressUpdate() { return new ThisProgressUpdate(getPeer()); } } // namespace aria2