32 #define NDN_LOG_DEBUG_DEPTH(x) NDN_LOG_DEBUG(std::string(state->getDepth() + 1, '>') << " " << x)    33 #define NDN_LOG_TRACE_DEPTH(x) NDN_LOG_TRACE(std::string(state->getDepth() + 1, '>') << " " << x)    37   : m_inner(
std::move(inner))
    39   , m_bundleInterestLifetime(1000)
    41   BOOST_ASSERT(m_inner != 
nullptr);
    47   m_bundleInterestLifetime = time;
    53   return m_bundleInterestLifetime;
    60   m_inner->setCertificateStorage(certStorage);
    65                                   const shared_ptr<ValidationState>& state,
    69   if (dataValidationState == 
nullptr) {
    70     return m_inner->fetch(certRequest, state, continueValidation);
    74   shared_ptr<BundleNameTag> bundleNameTag = state->getTag<
BundleNameTag>();
    75   if (bundleNameTag == 
nullptr) {
    76     const Name& originalDataName = dataValidationState->getOriginalData().getName();
    77     if (originalDataName.
empty()) {
    78       return m_inner->fetch(certRequest, state, continueValidation);
    81     Name bundleNamePrefix = deriveBundleName(originalDataName);
    82     fetchFirstBundleSegment(bundleNamePrefix, certRequest, state, continueValidation);
    85     Name fullBundleName = bundleNameTag->
get();
    86     fetchNextBundleSegment(fullBundleName, fullBundleName.
get(-1).
getSuccessor(),
    87                            certRequest, state, continueValidation);
    92 CertificateBundleFetcher::fetchFirstBundleSegment(
const Name& bundleNamePrefix,
    93                                                   const shared_ptr<CertificateRequest>& certRequest,
    94                                                   const shared_ptr<ValidationState>& state,
   104                            dataCallback(data, 
true, certRequest, state, continueValidation);
   107                            nackCallback(nack, certRequest, state, continueValidation, bundleNamePrefix);
   110                            timeoutCallback(certRequest, state, continueValidation, bundleNamePrefix);
   115 CertificateBundleFetcher::fetchNextBundleSegment(
const Name& fullBundleName, 
const name::Component& segmentNo,
   116                                                  const shared_ptr<CertificateRequest>& certRequest,
   117                                                  const shared_ptr<ValidationState>& state,
   120   shared_ptr<FinalBlockIdTag> finalBlockId = state->getTag<
FinalBlockIdTag>();
   121   if (finalBlockId != 
nullptr && segmentNo > finalBlockId->
get()) {
   122     return m_inner->fetch(certRequest, state, continueValidation);
   131                            dataCallback(data, 
false, certRequest, state, continueValidation);
   134                            nackCallback(nack, certRequest, state, continueValidation, fullBundleName);
   137                            timeoutCallback(certRequest, state, continueValidation, fullBundleName);
   142 CertificateBundleFetcher::dataCallback(
const Data& bundleData,
   143                                        bool isSegmentZeroExpected,
   144                                        const shared_ptr<CertificateRequest>& certRequest,
   145                                        const shared_ptr<ValidationState>& state,
   151   if (!currentSegment.isSegment()) {
   152     return m_inner->fetch(certRequest, state, continueValidation);
   155   if (isSegmentZeroExpected && currentSegment.toSegment() != 0) {
   158                            certRequest, state, continueValidation);
   161     state->setTag(make_shared<BundleNameTag>(bundleData.
getName()));
   164     if (!finalBlockId.
empty()) {
   165       state->setTag(make_shared<FinalBlockIdTag>(finalBlockId));
   169     bundleContent.
parse();
   172     for (
const auto& block : bundleContent.
elements()) {
   177     continueValidation(*cert, state);
   182 CertificateBundleFetcher::nackCallback(
const lp::Nack& nack,
   183                                        const shared_ptr<CertificateRequest>& certRequest,
   184                                        const shared_ptr<ValidationState>& state,
   186                                        const Name& bundleName)
   191   m_inner->fetch(certRequest, state, continueValidation);
   195 CertificateBundleFetcher::timeoutCallback(
const shared_ptr<CertificateRequest>& certRequest,
   196                                           const shared_ptr<ValidationState>& state,
   198                                           const Name& bundleName)
   202   m_inner->fetch(certRequest, state, continueValidation);
   206 CertificateBundleFetcher::deriveBundleName(
const Name& 
name)
   210   Name bundleName = name;
   222   bundleName.
append(
"_BUNDLE");
 time::milliseconds getBundleInterestLifetime() const 
 
Copyright (c) 2011-2015 Regents of the University of California. 
 
The certificate following the certificate format naming convention. 
 
const element_container & elements() const 
Get container of sub elements. 
 
#define NDN_LOG_DEBUG_DEPTH(x)
 
Interest & setMustBeFresh(bool mustBeFresh)
 
boost::posix_time::time_duration milliseconds(long duration)
 
void setBundleInterestLifetime(time::milliseconds time)
Set the lifetime of certificate bundle interest. 
 
CertificateStorage * m_certStorage
 
void cacheUnverifiedCert(Certificate &&cert)
Cache unverified certificate for a period of time (5 minutes) 
 
Represents a TLV element of NDN packet format. 
 
represents an Interest packet 
 
const MetaInfo & getMetaInfo() const 
Get MetaInfo. 
 
std::function< void(const Certificate &cert, const shared_ptr< ValidationState > &state)> ValidationContinuation
 
CertificateBundleFetcher(unique_ptr< CertificateFetcher > inner, Face &face)
 
const Certificate * find(const Name &certPrefix) const 
Get certificate given key name. 
 
Name & appendNumber(uint64_t number)
Append a component with a nonNegativeInteger. 
 
Name & append(const Component &component)
Append a component. 
 
represents a Network Nack 
 
Validation state for a data packet. 
 
Catch-all error for security policy errors that don't fit in other categories. 
 
provides a tag type for simple types 
 
NackReason getReason() const 
 
static Component fromSegment(uint64_t segmentNo)
Create segment number component using NDN naming conventions. 
 
#define NDN_LOG_INIT(name)
declare a log module 
 
bool isSegment() const 
Check if the component is segment number per NDN naming conventions. 
 
const CertificateCache & getUnverifiedCertCache() const 
 
Interest & setChildSelector(int childSelector)
 
Storage for trusted anchors, verified certificate cache, and unverified certificate cache...
 
Provide a communication channel with local or remote NDN forwarder. 
 
void doFetch(const shared_ptr< CertificateRequest > &certRequest, const shared_ptr< ValidationState > &state, const ValidationContinuation &continueValidation) override
Asynchronous certificate fetching implementation. 
 
const Block & get(uint32_t type) const 
Get the first sub element of specified TLV-TYPE. 
 
size_t size() const 
Get number of components. 
 
Represents an absolute name. 
 
const Component & at(ssize_t i) const 
Get the component at the given index. 
 
Fetch certificate bundle from the network. 
 
void parse() const 
Parse TLV-VALUE into sub elements. 
 
Component getSuccessor() const 
 
const Name & getName() const 
Get name. 
 
Component holds a read-only name component value. 
 
Interest & setInterestLifetime(time::milliseconds interestLifetime)
Set Interest's lifetime. 
 
const Block & getContent() const 
Get Content. 
 
bool empty() const 
Check if name is empty. 
 
PartialName getPrefix(ssize_t nComponents) const 
Extract a prefix of the name. 
 
const PendingInterestId * expressInterest(const Interest &interest, const DataCallback &afterSatisfied, const NackCallback &afterNacked, const TimeoutCallback &afterTimeout)
Express Interest. 
 
Represents a Data packet. 
 
const Component & get(ssize_t i) const 
Get the component at the given index. 
 
void setCertificateStorage(CertificateStorage &certStorage) override
Set the storage for this and inner certificate fetcher. 
 
bool isImplicitSha256Digest() const 
Check if the component is ImplicitSha256DigestComponent.