/* */ #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) {} 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; } } // namespace aria2