28 BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Data>));
32 static_assert(std::is_base_of<tlv::Error, Data::Error>::value,
33 "Data::Error must inherit from tlv::Error");
46 template<encoding::Tag TAG>
57 size_t totalLength = 0;
60 if (!wantUnsignedPortionOnly) {
62 BOOST_THROW_EXCEPTION(
Error(
"Requested wire format, but Data has not been signed"));
64 totalLength += encoder.prependBlock(m_signature.
getValue());
68 totalLength += encoder.prependBlock(m_signature.
getInfo());
71 totalLength += encoder.prependBlock(
getContent());
79 if (!wantUnsignedPortionOnly) {
80 totalLength += encoder.prependVarNumber(totalLength);
81 totalLength += encoder.prependVarNumber(
tlv::Data);
87 Data::wireEncode<encoding::EncoderTag>(
EncodingBuffer&,
bool)
const;
95 size_t totalLength = encoder.
size();
96 totalLength += encoder.appendBlock(signatureValue);
98 encoder.prependVarNumber(totalLength);
101 const_cast<Data*>(
this)->wireDecode(encoder.block());
117 const_cast<Data*>(
this)->wireDecode(buffer.block());
136 BOOST_THROW_EXCEPTION(
Error(
"Name element is missing or out of order"));
146 for (++element; element != m_wire.
elements_end(); ++element) {
147 switch (element->type()) {
149 if (lastElement >= 2) {
150 BOOST_THROW_EXCEPTION(
Error(
"MetaInfo element is out of order"));
157 if (lastElement >= 3) {
158 BOOST_THROW_EXCEPTION(
Error(
"Content element is out of order"));
160 m_content = *element;
165 if (lastElement >= 4) {
166 BOOST_THROW_EXCEPTION(
Error(
"SignatureInfo element is out of order"));
173 if (lastElement >= 5) {
174 BOOST_THROW_EXCEPTION(
Error(
"SignatureValue element is out of order"));
182 BOOST_THROW_EXCEPTION(
Error(
"unrecognized element of critical type " +
191 BOOST_THROW_EXCEPTION(
Error(
"SignatureInfo element is missing"));
198 if (m_fullName.
empty()) {
200 BOOST_THROW_EXCEPTION(
Error(
"Cannot compute full name because Data has no wire encoding (not signed)"));
228 m_metaInfo = metaInfo;
236 const_cast<Block&>(m_content).
encode();
276 m_signature = signature;
324 os <<
"Name: " << data.
getName() <<
"\n";
const Block & wireEncode() const
Encode to a Block.
bool hasWire() const
Check if the Block has fully encoded wire.
Data & setContentType(uint32_t type)
Copyright (c) 2011-2015 Regents of the University of California.
const Name & getName() const
Get name.
void wireDecode(const Block &wire)
Decode from wire in NDN Packet Format v0.2 or v0.3.
const Block & getContent() const
Get Content.
Data & setSignature(const Signature &signature)
Set Signature.
constexpr bool isCriticalType(uint32_t type)
Determine whether a TLV-TYPE is "critical" for evolvability purpose.
Data & setName(const Name &name)
Set name.
size_t value_size() const
Get size of TLV-VALUE aka TLV-LENGTH.
Name & appendImplicitSha256Digest(ConstBufferPtr digest)
Append an ImplicitSha256Digest component.
std::ostream & operator<<(std::ostream &os, const Data &data)
void setInfo(const Block &info)
Decode SignatureInfo from wire format.
Data(const Name &name=Name())
Construct an unsigned Data packet with given name and empty Content.
Data & setContent(const Block &block)
Set Content from a block.
const uint8_t * wire() const
Get pointer to encoded wire.
void parse() const
Parse TLV-VALUE into sub elements.
void resetWire()
Clear wire encoding and cached FullName.
Represents a TLV element of NDN packet format.
element_const_iterator elements_begin() const
Equivalent to elements().begin()
tlv::SignatureTypeValue getType() const
Get SignatureType.
a concept check for TLV abstraction with .wireEncode method
size_t size() const
Get size of encoded wire, including Type-Length-Value.
element_const_iterator elements_end() const
Equivalent to elements().end()
Data & setSignatureValue(const Block &value)
Set SignatureValue.
const Signature & getSignature() const
Get Signature.
void setValue(const Block &value)
Set SignatureValue.
Block makeBinaryBlock(uint32_t type, const uint8_t *value, size_t length)
Create a TLV block copying TLV-VALUE from raw buffer.
const Block & getInfo() const
Get SignatureInfo as wire format.
const Block & getValue() const
Get SignatureValue.
void reset()
Reset wire buffer of the element.
Represents an absolute name.
const Name & getFullName() const
Get full name including implicit digest.
Data & setFreshnessPeriod(time::milliseconds freshnessPeriod)
void encode()
Encode sub elements into TLV-VALUE.
Data & setFinalBlock(optional< name::Component > finalBlockId)
const MetaInfo & getMetaInfo() const
Get MetaInfo.
bool empty() const
Check if name is empty.
ConstBufferPtr computeDigest()
Finalize and return the digest based on all previously supplied inputs.
bool operator==(const Data &lhs, const Data &rhs)
size_t wireEncode(EncodingImpl< TAG > &encoder) const
Fast encoding or block size estimation.
std::string to_string(const V &v)
Data & setMetaInfo(const MetaInfo &metaInfo)
Set MetaInfo.
void wireDecode(const Block &wire)
Decode name from wire encoding.
a concept check for TLV abstraction with .wireEncode method
Represents a Data packet.
a concept check for TLV abstraction with .wireDecode method and constructible from Block
void clear()
Remove all components.
EncodingImpl< EncoderTag > EncodingBuffer
uint32_t type() const
Get TLV-TYPE.
EncodingImpl< EstimatorTag > EncodingEstimator
Holds SignatureInfo and SignatureValue in a Data packet.
shared_ptr< const Buffer > ConstBufferPtr