diff options
Diffstat (limited to 'src/DHTMessageTrackerEntry.cc')
| -rw-r--r-- | src/DHTMessageTrackerEntry.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/DHTMessageTrackerEntry.cc b/src/DHTMessageTrackerEntry.cc index dc7c0ecf..25204e17 100644 --- a/src/DHTMessageTrackerEntry.cc +++ b/src/DHTMessageTrackerEntry.cc @@ -37,6 +37,7 @@ #include "DHTMessage.h" #include "DHTMessageCallback.h" #include "DHTConstants.h" +#include "Util.h" namespace aria2 { @@ -60,8 +61,18 @@ void DHTMessageTrackerEntry::extendTimeout() bool DHTMessageTrackerEntry::match(const std::string& transactionID, const std::string& ipaddr, uint16_t port) const { - return _transactionID == transactionID && - _targetNode->getIPAddress() == ipaddr && _targetNode->getPort() == port; + 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; } SharedHandle<DHTMessageCallback> DHTMessageTrackerEntry::getCallback() const |
