/* */ #include "DHTMessageTrackerEntry.h" #include "DHTNode.h" #include "DHTMessage.h" #include "DHTMessageCallback.h" #include "DHTConstants.h" #include "util.h" #include "wallclock.h" namespace aria2 { DHTMessageTrackerEntry::DHTMessageTrackerEntry(const SharedHandle& sentMessage, time_t timeout, const SharedHandle& callback): targetNode_(sentMessage->getRemoteNode()), transactionID_(sentMessage->getTransactionID()), messageType_(sentMessage->getMessageType()), callback_(callback), dispatchedTime_(global::wallclock), timeout_(timeout) {} DHTMessageTrackerEntry::~DHTMessageTrackerEntry() {} bool DHTMessageTrackerEntry::isTimeout() const { return dispatchedTime_.difference(global::wallclock) >= timeout_; } void DHTMessageTrackerEntry::extendTimeout() {} bool DHTMessageTrackerEntry::match(const std::string& transactionID, const std::string& ipaddr, uint16_t port) const { if(transactionID_ != transactionID || targetNode_->getPort() != port) { return false; } if(targetNode_->getIPAddress() == ipaddr) { return true; } if(util::endsWith(targetNode_->getIPAddress(), ipaddr)) { return targetNode_->getIPAddress() == "::ffff:"+ipaddr; } else if(util::endsWith(ipaddr, targetNode_->getIPAddress())) { return ipaddr == "::ffff:"+targetNode_->getIPAddress(); } return false; } int64_t DHTMessageTrackerEntry::getElapsedMillis() const { return dispatchedTime_.differenceInMillis(global::wallclock); } } // namespace aria2