interest: Match data to Interest regardless of FreshnessPeriod/MustBeFresh
When Data is received from the wire it should match Interest with MustBeFresh even if the Data packet doesn't specify FreshnessPeriod. Refs: #5270 Change-Id: I2ce4d23062f6346ebcd54e2e3e6e5de5a927e516
This commit is contained in:
1 parent
12b8aaa9f2
commit
0af48fb516
5 files changed
+12
-11
No files matched your search
@@ -185,7 +185,7 @@ InMemoryStorage::insert(const Data& data, const time::milliseconds& mustBeFreshP
|
||||
m_freeEntries.pop();
|
||||
m_nPackets++;
|
||||
entry->setData(data);
|
||||
if (m_scheduler != nullptr && mustBeFreshProcessingWindow > ZERO_WINDOW) {
|
||||
if (m_scheduler != nullptr && mustBeFreshProcessingWindow >= ZERO_WINDOW) {
|
||||
entry->scheduleMarkStale(*m_scheduler, mustBeFreshProcessingWindow);
|
||||
}
|
||||
m_cache.insert(entry);
|
||||
|
||||
@@ -134,8 +134,14 @@ public:
|
||||
/** @brief Inserts a Data packet.
|
||||
*
|
||||
* @param data the packet to insert, must be signed and have wire encoding
|
||||
* @param mustBeFreshProcessingWindow Beyond this time period after the data is inserted, the
|
||||
* data can only be used to answer interest without MustBeFresh selector.
|
||||
* @param mustBeFreshProcessingWindow Beyond this time period, the inserted data can
|
||||
* only be used to answer interest without MustBeFresh. The value of
|
||||
* mustBeFreshProcessingWindow is an application decision and it may or may not
|
||||
* correspond to FreshnessPeriod.
|
||||
*
|
||||
* @note InMemoryStorage does not use the inserted data packet's FreshnessPeriod value.
|
||||
* If the packet needs to be marked "stale" after application-defined period of time,
|
||||
* the application must supply proper @p mustBeFreshProcessingWindow value.
|
||||
*
|
||||
* @note Packets are considered duplicate if the name with implicit digest matches.
|
||||
* The new Data packet with the identical name, but a different payload
|
||||
|
||||
@@ -340,11 +340,6 @@ Interest::matchesData(const Data& data) const
|
||||
return false;
|
||||
}
|
||||
|
||||
// check MustBeFresh
|
||||
if (getMustBeFresh() && data.getFreshnessPeriod() <= 0_ms) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -562,8 +562,8 @@ BOOST_AUTO_TEST_CASE(PrefixName_NoCanBePrefix)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MustBeFresh)
|
||||
{
|
||||
insert(1, "/A/1"); // omitted FreshnessPeriod means FreshnessPeriod = 0 ms
|
||||
insert(2, "/A/2", [] (Data& data) { data.setFreshnessPeriod(0_s); });
|
||||
insert(1, "/A/1", nullptr, 0_ms); // omitted FreshnessPeriod means FreshnessPeriod = 0 ms
|
||||
insert(2, "/A/2", [] (Data& data) { data.setFreshnessPeriod(0_s); }, 0_ms);
|
||||
insert(3, "/A/3", [] (Data& data) { data.setFreshnessPeriod(1_s); }, 1_s);
|
||||
insert(4, "/A/4", [] (Data& data) { data.setFreshnessPeriod(1_h); }, 1_h);
|
||||
|
||||
|
||||
@@ -659,7 +659,7 @@ BOOST_AUTO_TEST_CASE(MatchesData)
|
||||
BOOST_CHECK_EQUAL(interest->matchesData(*data), true);
|
||||
|
||||
interest->setMustBeFresh(true);
|
||||
BOOST_CHECK_EQUAL(interest->matchesData(*data), false); // violates MustBeFresh
|
||||
BOOST_CHECK_EQUAL(interest->matchesData(*data), true);
|
||||
|
||||
data->setFreshnessPeriod(1_s);
|
||||
BOOST_CHECK_EQUAL(interest->matchesData(*data), true);
|
||||
|
||||
Reference in new issue
Block a user