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);
  }
}
示例#2
0
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());
    }
  }
}
示例#3
0
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;
}