/* */ #ifndef D_DEFAULT_BT_MESSAGE_FACTORY_H #define D_DEFAULT_BT_MESSAGE_FACTORY_H #include "BtMessageFactory.h" #include "Command.h" namespace aria2 { class DownloadContext; class PieceStorage; class PeerStorage; class Peer; class AbstractBtMessage; class BtMessageDispatcher; class BtRequestFactory; class PeerConnection; class ExtensionMessageFactory; class DHTNode; class DHTRoutingTable; class DHTTaskQueue; class DHTTaskFactory; class DefaultBtMessageFactory : public BtMessageFactory { private: cuid_t cuid_; DownloadContext* downloadContext_; PieceStorage* pieceStorage_; PeerStorage* peerStorage_; std::shared_ptr peer_; bool dhtEnabled_; BtMessageDispatcher* dispatcher_; BtRequestFactory* requestFactory_; PeerConnection* peerConnection_; std::shared_ptr extensionMessageFactory_; DHTNode* localNode_; DHTRoutingTable* routingTable_; DHTTaskQueue* taskQueue_; DHTTaskFactory* taskFactory_; bool metadataGetMode_; void setCommonProperty(AbstractBtMessage* msg); public: DefaultBtMessageFactory(); virtual std::unique_ptr createBtMessage(const unsigned char* msg, size_t msgLength); virtual std::unique_ptr createHandshakeMessage(const unsigned char* msg, size_t msgLength); virtual std::unique_ptr createHandshakeMessage(const unsigned char* infoHash, const unsigned char* peerId); virtual std::unique_ptr createRequestMessage(const std::shared_ptr& piece, size_t blockIndex); virtual std::unique_ptr createCancelMessage(size_t index, int32_t begin, int32_t length); virtual std::unique_ptr createPieceMessage(size_t index, int32_t begin, int32_t length); virtual std::unique_ptr createHaveMessage(size_t index); virtual std::unique_ptr createChokeMessage(); virtual std::unique_ptr createUnchokeMessage(); virtual std::unique_ptr createInterestedMessage(); virtual std::unique_ptr createNotInterestedMessage(); virtual std::unique_ptr createBitfieldMessage(); virtual std::unique_ptr createKeepAliveMessage(); virtual std::unique_ptr createHaveAllMessage(); virtual std::unique_ptr createHaveNoneMessage(); virtual std::unique_ptr createRejectMessage(size_t index, int32_t begin, int32_t length); virtual std::unique_ptr createAllowedFastMessage (size_t index); virtual std::unique_ptr createPortMessage(uint16_t port); virtual std::unique_ptr createBtExtendedMessage(const std::shared_ptr& msg); void setPeer(const std::shared_ptr& peer); void setDownloadContext(DownloadContext* downloadContext); void setPieceStorage(PieceStorage* pieceStorage); void setPeerStorage(PeerStorage* peerStorage); void setCuid(cuid_t cuid) { cuid_ = cuid; } void setDHTEnabled(bool enabled) { dhtEnabled_ = enabled; } void setBtMessageDispatcher (BtMessageDispatcher* dispatcher); void setBtRequestFactory(BtRequestFactory* factory); void setPeerConnection(PeerConnection* connection); void setExtensionMessageFactory (const std::shared_ptr& factory); void setLocalNode(DHTNode* localNode); void setRoutingTable(DHTRoutingTable* routingTable); void setTaskQueue(DHTTaskQueue* taskQueue); void setTaskFactory(DHTTaskFactory* taskFactory); void enableMetadataGetMode() { metadataGetMode_ = true; } }; } // namespace aria2 #endif // D_DEFAULT_BT_MESSAGE_FACTORY_H