30 Lsa::Lsa(
const ndn::Name& originRouter, uint64_t seqNo,
31 ndn::time::system_clock::TimePoint expirationTimePoint)
32 : m_originRouter(originRouter)
34 , m_expirationTimePoint(expirationTimePoint)
38 template<ndn::encoding::Tag TAG>
42 size_t totalLength = 0;
44 totalLength += prependStringBlock(encoder,
53 totalLength += encoder.prependVarNumber(totalLength);
67 ndn::Block baseWire = wire;
70 auto val = baseWire.elements_begin();
72 if (val != baseWire.elements_end() && val->type() == ndn::tlv::Name) {
76 NDN_THROW(
Error(
"OriginRouter: Missing required Name field"));
82 m_seqNo = ndn::readNonNegativeInteger(*val);
86 NDN_THROW(
Error(
"Missing required SequenceNumber field"));
93 NDN_THROW(
Error(
"Missing required ExpirationTime field"));
123 std::string typeString;
125 if (typeString ==
"ADJACENCY") {
128 else if (typeString ==
"COORDINATE") {
131 else if (typeString ==
"NAME") {
143 std::ostringstream os;
145 os <<
" " <<
getType() <<
" LSA:\n"
147 <<
" Sequence Number : " <<
getSeqNo() <<
"\n"
148 <<
" Expires in : " << ndn::time::duration_cast<ndn::time::milliseconds>(duration)
Data abstraction for Lsa Lsa := LSA-TYPE TLV-LENGTH Name SequenceNumber ExpirationTimePoint.
virtual const ndn::Block & wireEncode() const =0
const ndn::Name & getOriginRouter() const
virtual Type getType() const =0
virtual std::string toString() const
uint64_t getSeqNo() const
ndn::time::system_clock::TimePoint m_expirationTimePoint
void wireDecode(const ndn::Block &wire)
const ndn::time::system_clock::TimePoint & getExpirationTimePoint() const
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California,...
std::istream & operator>>(std::istream &is, Lsa::Type &type)
std::ostream & operator<<(std::ostream &os, const Adjacent &adjacent)
NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(Adjacent)