void SelectorHelper::applySelectors(Interest& interest, Context* context) { int minSuffix = -1; context->getContextOption(MIN_SUFFIX_COMP_S, minSuffix); if (minSuffix >= 0) { interest.setMinSuffixComponents(minSuffix); } int maxSuffix = -1; context->getContextOption(MAX_SUFFIX_COMP_S, maxSuffix); if (maxSuffix >= 0) { interest.setMaxSuffixComponents(maxSuffix); } Exclude exclusion; context->getContextOption(EXCLUDE_S, exclusion); if (!exclusion.empty()) { interest.setExclude(exclusion); } bool mustBeFresh = false; context->getContextOption(MUST_BE_FRESH_S, mustBeFresh); if (mustBeFresh) { interest.setMustBeFresh(mustBeFresh); } int child = -10; context->getContextOption(RIGHTMOST_CHILD_S, child); if (child != -10) { interest.setChildSelector(child); } KeyLocator keyLocator; context->getContextOption(KEYLOCATOR_S, keyLocator); if (!keyLocator.empty()) { interest.setPublisherPublicKeyLocator(keyLocator); } }
TEST_F(TestLink, EncodeDecodeInterestWithLink) { Link link1; link1.setName(Name("test")); link1.addDelegation(10, Name("/test1")); link1.addDelegation(20, Name("/test2")); link1.addDelegation(100, Name("/test3")); keyChain_->sign(link1, certificateName_); Interest interestA; interestA.setName(Name("/Test/Encode/Decode/With/Link")); interestA.setChildSelector(1); interestA.setInterestLifetimeMilliseconds(10000); interestA.setLinkWireEncoding(link1.wireEncode()); Blob interestEncoding = interestA.wireEncode(); Interest interestB; interestB.wireDecode(interestEncoding); ASSERT_EQ(interestA.getName(), interestB.getName()); Link* link2 = interestB.getLink(); ASSERT_TRUE(link2) << "Interest link object not specified"; const DelegationSet& delegations = link2->getDelegations(); for (size_t i = 0; i < delegations.size(); ++i) { if (i == 0) { ASSERT_EQ(10, delegations.get(i).getPreference()); ASSERT_EQ(Name("/test1"), delegations.get(i).getName()); } if (i == 1) { ASSERT_EQ(20, delegations.get(i).getPreference()); ASSERT_EQ(Name("/test2"), delegations.get(i).getName()); } if (i == 2) { ASSERT_EQ(100, delegations.get(i).getPreference()); ASSERT_EQ(Name("/test3"), delegations.get(i).getName()); } } }
ssize_t RepoStorage::deleteData(const Interest& interest) { Interest interestDelete = interest; interestDelete.setChildSelector(0); //to disable the child selector in delete handle int64_t count = 0; bool hasError = false; std::pair<int64_t,ndn::Name> idName = m_index.find(interestDelete); while (idName.first != 0) { bool resultDb = m_storage.erase(idName.first); bool resultIndex = m_index.erase(idName.second); //full name if (resultDb && resultIndex) count++; else hasError = true; idName = m_index.find(interestDelete); } if (hasError) return -1; else return count; }