/* */ #ifndef _D_DHT_MESSAGE_FACTORY_IMPL_H_ #define _D_DHT_MESSAGE_FACTORY_IMPL_H_ #include "DHTMessageFactory.h" namespace aria2 { class DHTConnection; class DHTMessageDispatcher; class DHTRoutingTable; class DHTPeerAnnounceStorage; class DHTTokenTracker; class Logger; class Data; class DHTMessage; class DHTAbstractMessage; class DHTMessageFactoryImpl:public DHTMessageFactory { private: SharedHandle _localNode; WeakHandle _connection; WeakHandle _dispatcher; WeakHandle _routingTable; WeakHandle _peerAnnounceStorage; WeakHandle _tokenTracker; Logger* _logger; // search node in routingTable. If it is not found, create new one. SharedHandle getRemoteNode(const unsigned char* id, const std::string& ipaddr, uint16_t port) const; void validateID(const Data* id) const; void validateIDMatch(const unsigned char* expected, const unsigned char* actual) const; void validatePort(const Data* i) const; std::deque > extractNodes(const unsigned char* src, size_t length); void setCommonProperty(const SharedHandle& m); public: DHTMessageFactoryImpl(); virtual ~DHTMessageFactoryImpl(); virtual SharedHandle createQueryMessage(const Dictionary* d, const std::string& ipaddr, uint16_t port); virtual SharedHandle createResponseMessage(const std::string& messageType, const Dictionary* d, const SharedHandle& remoteNode); virtual SharedHandle createPingMessage(const SharedHandle& remoteNode, const std::string& transactionID = ""); virtual SharedHandle createPingReplyMessage(const SharedHandle& remoteNode, const unsigned char* id, const std::string& transactionID); virtual SharedHandle createFindNodeMessage(const SharedHandle& remoteNode, const unsigned char* targetNodeID, const std::string& transactionID = ""); SharedHandle createFindNodeReplyMessage(const SharedHandle& remoteNode, const Dictionary* d, const std::string& transactionID); virtual SharedHandle createFindNodeReplyMessage(const SharedHandle& remoteNode, const std::deque >& closestKNodes, const std::string& transactionID); virtual SharedHandle createGetPeersMessage(const SharedHandle& remoteNode, const unsigned char* infoHash, const std::string& transactionID = ""); virtual SharedHandle createGetPeersReplyMessage(const SharedHandle& remoteNode, const std::deque >& closestKNodes, const std::string& token, const std::string& transactionID); SharedHandle createGetPeersReplyMessageWithNodes(const SharedHandle& remoteNode, const Dictionary* d, const std::string& transactionID); virtual SharedHandle createGetPeersReplyMessage(const SharedHandle& remoteNode, const std::deque >& peers, const std::string& token, const std::string& transactionID); SharedHandle createGetPeersReplyMessageWithValues(const SharedHandle& remoteNode, const Dictionary* d, const std::string& transactionID); virtual SharedHandle createAnnouncePeerMessage(const SharedHandle& remoteNode, const unsigned char* infoHash, uint16_t tcpPort, const std::string& token, const std::string& transactionID = ""); virtual SharedHandle createAnnouncePeerReplyMessage(const SharedHandle& remoteNode, const std::string& transactionID); virtual SharedHandle createUnknownMessage(const unsigned char* data, size_t length, const std::string& ipaddr, uint16_t port); void setRoutingTable(const WeakHandle& routingTable); void setConnection(const WeakHandle& connection); void setMessageDispatcher(const WeakHandle& dispatcher); void setPeerAnnounceStorage(const WeakHandle& storage); void setTokenTracker(const WeakHandle& tokenTracker); void setLocalNode(const SharedHandle& localNode); }; } // namespace aria2 #endif // _D_DHT_MESSAGE_FACTORY_IMPL_H_