/* */ #ifndef D_DHT_MESSAGE_RECEIVER_H #define D_DHT_MESSAGE_RECEIVER_H #include "common.h" #include #include namespace aria2 { class DHTMessageTracker; class DHTMessage; class DHTMessageFactory; class DHTRoutingTable; class DHTUnknownMessage; class DHTMessageReceiver { private: std::shared_ptr tracker_; DHTMessageFactory* factory_; DHTRoutingTable* routingTable_; std::unique_ptr handleUnknownMessage(const unsigned char* data, size_t length, const std::string& remoteAddr, uint16_t remotePort); void onMessageReceived(DHTMessage* message); public: DHTMessageReceiver(const std::shared_ptr& tracker); std::unique_ptr receiveMessage (const std::string& remoteAddr, uint16_t remotePort, unsigned char *data, size_t length); void handleTimeout(); const std::shared_ptr& getMessageTracker() const { return tracker_; } void setMessageFactory(DHTMessageFactory* factory); void setRoutingTable(DHTRoutingTable* routingTable); }; } // namespace aria2 #endif // D_DHT_MESSAGE_RECEIVER_H