23 #include "../encoding/block-helpers.hpp"
24 #include "../util/concepts.hpp"
29 BOOST_CONCEPT_ASSERT((boost::EqualityComparable<ValidityPeriod>));
33 static_assert(std::is_base_of<tlv::Error, ValidityPeriod::Error>::value,
34 "ValidityPeriod::Error must inherit from tlv::Error");
40 using boost::chrono::time_point_cast;
43 :
ValidityPeriod(time::system_clock::TimePoint() + time::nanoseconds(1),
44 time::system_clock::TimePoint())
50 : m_notBefore(time_point_cast<TimePoint::duration>(notBefore + TimePoint::duration(1) -
51 time::system_clock::TimePoint::duration(1)))
52 , m_notAfter(time_point_cast<TimePoint::duration>(notAfter))
61 template<encoding::Tag TAG>
65 size_t totalLength = 0;
70 totalLength += encoder.prependVarNumber(totalLength);
76 ValidityPeriod::wireEncode<encoding::EncoderTag>(EncodingImpl<encoding::EncoderTag>& encoder)
const;
79 ValidityPeriod::wireEncode<encoding::EstimatorTag>(EncodingImpl<encoding::EstimatorTag>& encoder)
const;
93 m_wire = buffer.block();
103 BOOST_THROW_EXCEPTION(
Error(
"The supplied block does not contain wire format"));
110 BOOST_THROW_EXCEPTION(
Error(
"Unexpected TLV type when decoding ValidityPeriod"));
113 BOOST_THROW_EXCEPTION(
Error(
"Does not have two sub-TLVs"));
119 BOOST_THROW_EXCEPTION(
Error(
"Invalid NotBefore or NotAfter field"));
123 m_notBefore = time_point_cast<TimePoint::duration>(
125 m_notAfter = time_point_cast<TimePoint::duration>(
128 catch (
const std::bad_cast&) {
129 BOOST_THROW_EXCEPTION(
Error(
"Invalid date format in NOT-BEFORE or NOT-AFTER field"));
138 m_notBefore = time_point_cast<TimePoint::duration>(notBefore + TimePoint::duration(1) -
139 time::system_clock::TimePoint::duration(1));
140 m_notAfter = time_point_cast<TimePoint::duration>(notAfter);
144 std::pair<time::system_clock::TimePoint, time::system_clock::TimePoint>
147 return std::make_pair(m_notBefore, m_notAfter);
153 return m_notBefore <= now && now <= m_notAfter;
159 return (this->m_notBefore == other.m_notBefore &&
160 this->m_notAfter == other.m_notAfter);
166 return !(*
this == other);
Copyright (c) 2013-2016 Regents of the University of California.
system_clock::TimePoint fromIsoString(const std::string &isoString)
Convert from the ISO string (YYYYMMDDTHHMMSS,fffffffff) representation to the internal time format...
EncodingImpl< EstimatorTag > EncodingEstimator
const element_container & elements() const
Get all subelements.
Class representing a wire element of NDN-TLV packet format.
bool operator==(const ValidityPeriod &other) const
size_t prependStringBlock(EncodingImpl< TAG > &encoder, uint32_t type, const std::string &value)
Helper to prepend TLV block type type with value from a string value.
static const size_t NOT_BEFORE_OFFSET
std::string readString(const Block &block)
Helper to read a string value from a block.
ValidityPeriod & setPeriod(const time::system_clock::TimePoint ¬Before, const time::system_clock::TimePoint ¬After)
Set validity period [notBefore, notAfter].
std::ostream & operator<<(std::ostream &os, CommandInterestValidator::ErrorCode error)
a concept check for TLV abstraction with .wireEncode method
Abstraction of validity period.
std::pair< time::system_clock::TimePoint, time::system_clock::TimePoint > getPeriod() const
Get the stored validity period.
EncodingImpl< EncoderTag > EncodingBuffer
static const size_t ISO_DATETIME_SIZE
bool operator!=(const ValidityPeriod &other) const
const Block & wireEncode() const
Encode ValidityPeriod into TLV block.
size_t elements_size() const
void reset()
Reset wire buffer of the element.
static const size_t NOT_AFTER_OFFSET
std::string toIsoString(const system_clock::TimePoint &timePoint)
Convert to the ISO string representation of the time (YYYYMMDDTHHMMSS,fffffffff)
void parse() const
Parse wire buffer into subblocks.
bool hasWire() const
Check if the Block has fully encoded wire.
bool isValid(const time::system_clock::TimePoint &now=time::system_clock::now()) const
Check if now falls within the validity period.
ValidityPeriod()
Set validity period [UNIX epoch + 1 nanosecond, UNIX epoch] that is always invalid.
void wireDecode(const Block &wire)
Decode ValidityPeriod from TLV block.
a concept check for TLV abstraction with .wireEncode method
a concept check for TLV abstraction with .wireDecode method and constructible from Block ...