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 NDN_THROW(
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);
111 EncodingEstimator estimator;
114 EncodingBuffer buffer(estimatedSize, 0);
146 for (++element; element != m_wire.
elements_end(); ++element) {
147 switch (element->type()) {
149 if (lastElement >= 2) {
157 if (lastElement >= 3) {
160 m_content = *element;
165 if (lastElement >= 4) {
173 if (lastElement >= 5) {
197 if (m_fullName.
empty()) {
199 NDN_THROW(
Error(
"Cannot compute full name because Data has no wire encoding (not signed)"));
227 m_metaInfo = metaInfo;
235 const_cast<Block&
>(m_content).encode();
275 m_signature = signature;
323 os <<
"Name: " << data.
getName() <<
"\n";
Data & setContentType(uint32_t type)
void wireDecode(const Block &wire)
Decode from wire in NDN Packet Format v0.2 or v0.3.
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.
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 Signature & getSignature() const
Get Signature.
size_t value_size() const noexcept
Return the size of TLV-VALUE, aka TLV-LENGTH.
void resetWire()
Clear wire encoding and cached FullName.
size_t wireEncode(EncodingImpl< TAG > &encoder) const
Fast encoding or block size estimation.
Represents a TLV element of NDN packet format.
const Block & getValue() const
Get SignatureValue.
const MetaInfo & getMetaInfo() const
Get MetaInfo.
bool hasWire() const noexcept
Check if the Block contains a fully encoded wire representation.
size_t size() const
Return the size of the encoded wire, i.e.
a concept check for TLV abstraction with .wireEncode method
Data & setSignatureValue(const Block &value)
Set SignatureValue.
void setValue(const Block &value)
Set SignatureValue.
void reset() noexcept
Reset the Block to a default-constructed state.
Block makeBinaryBlock(uint32_t type, const uint8_t *value, size_t length)
Create a TLV block copying TLV-VALUE from raw buffer.
Represents an absolute name.
const Block & wireEncode() const
Encode to a Block.
tlv::SignatureTypeValue getType() const
Get SignatureType.
void parse() const
Parse TLV-VALUE into sub-elements.
uint32_t type() const
Return the TLV-TYPE of the Block.
const Name & getName() const
Get name.
const Block & getInfo() const
Get SignatureInfo as wire format.
Data & setFreshnessPeriod(time::milliseconds freshnessPeriod)
Data & setFinalBlock(optional< name::Component > finalBlockId)
const Block & getContent() const
Get Content.
const uint8_t * wire() const
Return a raw pointer to the beginning of the encoded wire.
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)
std::string to_string(const V &v)
element_const_iterator elements_end() const
Equivalent to elements().end()
Data & setMetaInfo(const MetaInfo &metaInfo)
Set MetaInfo.
const Name & getFullName() const
Get full name including implicit digest.
element_const_iterator elements_begin() const
Equivalent to elements().begin()
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
EncodingImpl< EstimatorTag > EncodingEstimator
Holds SignatureInfo and SignatureValue in a Data packet.
shared_ptr< const Buffer > ConstBufferPtr