/* */ #ifndef D_LPD_MESSAGE_DISPATCHER_H #define D_LPD_MESSAGE_DISPATCHER_H #include "common.h" #include #include #include "TimerA2.h" namespace aria2 { class SocketCore; class LpdMessageDispatcher { private: std::shared_ptr socket_; std::string infoHash_; uint16_t port_; std::string multicastAddress_; uint16_t multicastPort_; Timer timer_; std::chrono::seconds interval_; std::string request_; public: LpdMessageDispatcher(const std::string& infoHash, uint16_t port, const std::string& multicastAddr, uint16_t multicastPort, std::chrono::seconds interval = 5_min); ~LpdMessageDispatcher(); // No throw bool init(const std::string& localAddr, unsigned char ttl, unsigned char loop); // Returns true if timer_ reached announce interval, which is by // default 5mins. bool isAnnounceReady() const; // Sends LPD message. If message is sent returns true. Otherwise // returns false. bool sendMessage(); // Reset timer_ to the current time. void resetAnnounceTimer(); const std::string& getInfoHash() const { return infoHash_; } uint16_t getPort() const { return port_; } }; namespace bittorrent { std::string createLpdRequest(const std::string& multicastAddress, uint16_t multicastPort, const std::string& infoHash, uint16_t port); } // namespace bittorrent } // namespace aria2 #endif // D_LPD_MESSAGE_DISPATCHER_H