NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
certificate-cache-ttl.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
25 
26 namespace ndn {
27 
28 CertificateCacheTtl::CertificateCacheTtl(boost::asio::io_service& io,
29  const time::seconds& defaultTtl/* = time::seconds(3600)*/)
30  : m_defaultTtl(defaultTtl)
31  , m_scheduler(io)
32 {
33 }
34 
36 {
37 }
38 
39 void
40 CertificateCacheTtl::insertCertificate(shared_ptr<const IdentityCertificate> certificate)
41 {
42  m_scheduler.scheduleEvent(time::seconds(0), [this, certificate] { this->insert(certificate); });
43 }
44 
45 shared_ptr<const IdentityCertificate>
47 {
48  Cache::iterator it = m_cache.find(certificateName);
49  if (it != m_cache.end())
50  return it->second.first;
51  else
52  return shared_ptr<IdentityCertificate>();
53 }
54 
55 void
57 {
58  m_scheduler.scheduleEvent(time::seconds(0), [this] { this->removeAll(); });
59 }
60 
61 size_t
63 {
64  return m_cache.size();
65 }
66 
67 void
68 CertificateCacheTtl::insert(shared_ptr<const IdentityCertificate> certificate)
69 {
70  time::milliseconds expire = (certificate->getFreshnessPeriod() >= time::seconds::zero() ?
71  certificate->getFreshnessPeriod() : m_defaultTtl);
72 
73  Name index = certificate->getName().getPrefix(-1);
74 
75  Cache::iterator it = m_cache.find(index);
76  if (it != m_cache.end())
77  m_scheduler.cancelEvent(it->second.second);
78 
79  EventId eventId = m_scheduler.scheduleEvent(expire,
80  bind(&CertificateCacheTtl::remove,
81  this, certificate->getName()));
82 
83  m_cache[index] = std::make_pair(certificate, eventId);
84 }
85 
86 void
87 CertificateCacheTtl::remove(const Name& certificateName)
88 {
89  Name name = certificateName.getPrefix(-1);
90  Cache::iterator it = m_cache.find(name);
91  if (it != m_cache.end())
92  m_cache.erase(it);
93 }
94 
95 void
96 CertificateCacheTtl::removeAll()
97 {
98  for(Cache::iterator it = m_cache.begin(); it != m_cache.end(); it++)
99  m_scheduler.cancelEvent(it->second.second);
100 
101  m_cache.clear();
102 }
103 
104 } // namespace ndn
PartialName getPrefix(ssize_t nComponents) const
Extract a prefix (PartialName) of the name, containing first nComponents components.
Definition: name.hpp:249
Copyright (c) 2011-2015 Regents of the University of California.
virtual void insertCertificate(shared_ptr< const IdentityCertificate > certificate)
EventId scheduleEvent(const time::nanoseconds &after, const Event &event)
Schedule one time event after the specified delay.
Definition: scheduler.cpp:85
void cancelEvent(const EventId &eventId)
Cancel scheduled event.
Definition: scheduler.cpp:106
Table::const_iterator iterator
Definition: cs-internal.hpp:41
std::shared_ptr< ns3::EventId > EventId
Definition: scheduler.hpp:39
Name abstraction to represent an absolute name.
Definition: name.hpp:46
virtual shared_ptr< const IdentityCertificate > getCertificate(const Name &certificateNameWithoutVersion)
CertificateCacheTtl(boost::asio::io_service &io, const time::seconds &defaultTtl=time::seconds(3600))