summaryrefslogtreecommitdiff
path: root/src/DHTMessageTrackerEntry.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/DHTMessageTrackerEntry.cc')
-rw-r--r--src/DHTMessageTrackerEntry.cc15
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