face: Invoke NackCallback on all matching Interests
Change-Id: I7fd2b6456f9d3b83dafde4348c90bad9acd500f6
Refs: #3908
diff --git a/src/detail/face-impl.hpp b/src/detail/face-impl.hpp
index 9ce4a69..bb454d1 100644
--- a/src/detail/face-impl.hpp
+++ b/src/detail/face-impl.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -136,7 +136,7 @@
{
for (auto entry = m_pendingInterestTable.begin(); entry != m_pendingInterestTable.end(); ) {
const Interest& pendingInterest = *(*entry)->getInterest();
- if (pendingInterest == nack.getInterest()) {
+ if (nack.getInterest().matchesInterest(pendingInterest)) {
shared_ptr<PendingInterest> matchedEntry = *entry;
entry = m_pendingInterestTable.erase(entry);
matchedEntry->invokeNackCallback(nack);
diff --git a/src/interest.cpp b/src/interest.cpp
index 7f4579f..fa58a33 100644
--- a/src/interest.cpp
+++ b/src/interest.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -212,6 +212,14 @@
return true;
}
+bool
+Interest::matchesInterest(const Interest& other) const
+{
+ /// @todo #3162 match Link field
+ return (this->getName() == other.getName() &&
+ this->getSelectors() == other.getSelectors());
+}
+
template<encoding::Tag TAG>
size_t
Interest::wireEncode(EncodingImpl<TAG>& encoder) const
diff --git a/src/interest.hpp b/src/interest.hpp
index 14ba33e..8d3f29b 100644
--- a/src/interest.hpp
+++ b/src/interest.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -119,8 +119,7 @@
toUri() const;
public: // Link and forwarding hint
-
- /**
+ /**
* @brief Check whether the Interest contains a Link object
* @return True if there is a link object, otherwise false
*/
@@ -210,6 +209,18 @@
bool
matchesData(const Data& data) const;
+ /**
+ * @brief Check if Interest matches @p other interest
+ *
+ * Interest matches @p other if both have the same name, selectors, and link. Other fields
+ * (e.g., Nonce) may be different.
+ *
+ * @todo Implement distinguishing interests by link. The current implementation checks only
+ * name+selectors (Issue #3162).
+ */
+ bool
+ matchesInterest(const Interest& other) const;
+
public: // Name and guiders
const Name&
getName() const