NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
ndn::Data Class Reference

Represents a Data packet. More...

#include <data.hpp>

Inheritance diagram for ndn::Data:
Collaboration diagram for ndn::Data:

Classes

class  Error
 

Public Member Functions

 Data (const Name &name=Name())
 Construct an unsigned Data packet with given name and empty Content. More...
 
 Data (const Block &wire)
 Construct a Data packet by decoding from wire. More...
 
template<encoding::Tag TAG>
size_t wireEncode (EncodingImpl< TAG > &encoder, bool wantUnsignedPortionOnly=false) const
 Prepend wire encoding to encoder. More...
 
const BlockwireEncode (EncodingBuffer &encoder, span< const uint8_t > signature) const
 Finalize Data packet encoding with the specified signature. More...
 
const BlockwireEncode () const
 Encode into a Block. More...
 
void wireDecode (const Block &wire)
 Decode from wire. More...
 
bool hasWire () const noexcept
 Check if this instance has cached wire encoding. More...
 
const NamegetFullName () const
 Get full name including implicit digest. More...
 
const NamegetName () const noexcept
 Get name. More...
 
DatasetName (const Name &name)
 Set name. More...
 
const MetaInfogetMetaInfo () const noexcept
 Get MetaInfo. More...
 
DatasetMetaInfo (const MetaInfo &metaInfo)
 Set MetaInfo. More...
 
bool hasContent () const noexcept
 Return whether this Data has a Content element. More...
 
const BlockgetContent () const noexcept
 Get the Content element. More...
 
DatasetContent (const Block &block)
 Set Content from a Block. More...
 
DatasetContent (span< const uint8_t > value)
 Set Content by copying from a contiguous sequence of bytes. More...
 
DatasetContent (const uint8_t *value, size_t length)
 Set Content by copying from a raw buffer. More...
 
DatasetContent (ConstBufferPtr value)
 Set Content from a shared buffer. More...
 
DataunsetContent ()
 Remove the Content element. More...
 
const SignatureInfogetSignatureInfo () const noexcept
 Get SignatureInfo. More...
 
DatasetSignatureInfo (const SignatureInfo &info)
 Set SignatureInfo. More...
 
const BlockgetSignatureValue () const noexcept
 Get SignatureValue. More...
 
DatasetSignatureValue (ConstBufferPtr value)
 Set SignatureValue. More...
 
InputBuffers extractSignedRanges () const
 Extract ranges of Data covered by the signature. More...
 
uint32_t getContentType () const
 
DatasetContentType (uint32_t type)
 
time::milliseconds getFreshnessPeriod () const
 
DatasetFreshnessPeriod (time::milliseconds freshnessPeriod)
 
const optional< name::Component > & getFinalBlock () const
 
DatasetFinalBlock (optional< name::Component > finalBlockId)
 
int32_t getSignatureType () const noexcept
 Get SignatureType. More...
 
optional< KeyLocatorgetKeyLocator () const noexcept
 Get KeyLocator. More...
 
- Public Member Functions inherited from ndn::PacketBase
uint64_t getCongestionMark () const
 get the value of the CongestionMark tag More...
 
void setCongestionMark (uint64_t mark)
 set the CongestionMark tag to the specified value More...
 
- Public Member Functions inherited from ndn::TagHost
template<typename T >
shared_ptr< T > getTag () const
 get a tag item More...
 
template<typename T >
void setTag (shared_ptr< T > tag) const
 set a tag item More...
 
template<typename T >
void removeTag () const
 remove tag item More...
 

Protected Member Functions

void resetWire ()
 Clear wire encoding and cached FullName. More...
 

Detailed Description

Represents a Data packet.

See also
https://named-data.net/doc/NDN-packet-spec/0.3/data.html

Definition at line 37 of file data.hpp.

Constructor & Destructor Documentation

◆ Data() [1/2]

ndn::Data::Data ( const Name name = Name())
explicit

Construct an unsigned Data packet with given name and empty Content.

Warning
In certain contexts that use Data::shared_from_this(), Data must be created using std::make_shared. Otherwise, shared_from_this() may trigger undefined behavior. One example where this is necessary is storing Data into a subclass of InMemoryStorage.

Definition at line 34 of file data.cpp.

◆ Data() [2/2]

ndn::Data::Data ( const Block wire)
explicit

Construct a Data packet by decoding from wire.

Parameters
wireTLV block of type tlv::Data; may be signed or unsigned.
Warning
In certain contexts that use Data::shared_from_this(), Data must be created using std::make_shared. Otherwise, shared_from_this() may trigger undefined behavior. One example where this is necessary is storing Data into a subclass of InMemoryStorage.

Definition at line 39 of file data.cpp.

References wireDecode().

Member Function Documentation

◆ wireEncode() [1/3]

template<encoding::Tag TAG>
size_t ndn::Data::wireEncode ( EncodingImpl< TAG > &  encoder,
bool  wantUnsignedPortionOnly = false 
) const

Prepend wire encoding to encoder.

Parameters
encoderEncodingEstimator or EncodingBuffer instance.
wantUnsignedPortionOnlyIf true, prepend only Name, MetaInfo, Content, and SignatureInfo to encoder, but omit SignatureValue and the outermost TLV Type and Length of the Data element. This is intended to be used with wireEncode(EncodingBuffer&, span<const uint8_t>) const.
Exceptions
ErrorSignature is not present and wantUnsignedPortionOnly is false.

Definition at line 46 of file data.cpp.

References ndn::SignatureInfo::Data, ndn::tlv::Data, hasContent(), NDN_THROW, ndn::encoding::prependBlock(), ndn::MetaInfo::wireEncode(), ndn::SignatureInfo::wireEncode(), and ndn::Name::wireEncode().

Referenced by ndn::Face::Impl::putData(), ndn::util::DummyClientFace::receive(), ndn::security::v2::KeyChain::sign(), and ndn::security::SafeBag::wireEncode().

◆ wireEncode() [2/3]

const Block & ndn::Data::wireEncode ( EncodingBuffer &  encoder,
span< const uint8_t >  signature 
) const

Finalize Data packet encoding with the specified signature.

Parameters
encoderEncodingBuffer containing Name, MetaInfo, Content, and SignatureInfo, but without SignatureValue and the outermost Type-Length of the Data element.
signatureRaw signature bytes, without TLV Type and Length; this will become the TLV-VALUE of the SignatureValue element added to the packet.

This method is intended to be used in concert with wireEncode(encoder, true), e.g.:

Data data;
...
EncodingBuffer encoder;
data.wireEncode(encoder, true);
...
auto signature = create_signature_over_signed_portion(encoder.data(), encoder.size());
data.wireEncode(encoder, signature);

Definition at line 94 of file data.cpp.

References ndn::tlv::Data, ndn::tlv::SignatureValue, ndn::Block::size(), and wireDecode().

◆ wireEncode() [3/3]

const Block & ndn::Data::wireEncode ( ) const

Encode into a Block.

Precondition
Data must be signed.

Definition at line 109 of file data.cpp.

References ndn::Block::hasWire(), and wireDecode().

Referenced by extractSignedRanges().

◆ wireDecode()

◆ hasWire()

bool ndn::Data::hasWire ( ) const
inlinenoexcept

Check if this instance has cached wire encoding.

Definition at line 111 of file data.hpp.

References getFullName().

◆ getFullName()

const Name & ndn::Data::getFullName ( ) const

Get full name including implicit digest.

Precondition
hasWire() == true; i.e. wireEncode() must have been called
Exceptions
ErrorData has no wire encoding

Definition at line 207 of file data.cpp.

References ndn::Name::appendImplicitSha256Digest(), ndn::util::Sha256::computeDigest(), ndn::Name::empty(), ndn::Block::hasWire(), and NDN_THROW.

Referenced by nfd::cs::compareDataWithData(), nfd::cs::compareQueryWithData(), hasWire(), ndn::InMemoryStorage::insert(), and ndn::Interest::matchesData().

◆ getName()

const Name& ndn::Data::getName ( ) const
inlinenoexcept

Get name.

Definition at line 127 of file data.hpp.

References setName().

Referenced by ndn::security::v2::KeyChain::addCertificate(), nfd::fw::Strategy::afterContentStoreHit(), nfd::fw::SelfLearningStrategy::afterReceiveData(), nfd::fw::Strategy::afterReceiveData(), nfd::fw::SelfLearningStrategy::afterReceiveNack(), nfd::fw::asf::AsfStrategy::beforeSatisfyInterest(), nfd::fw::AccessStrategy::beforeSatisfyInterest(), nfd::fw::Strategy::beforeSatisfyInterest(), ndn::security::v2::Certificate::Certificate(), ndn::security::v2::ValidationPolicySimpleHierarchy::checkPolicy(), ndn::security::v2::validator_config::ValidationPolicyConfig::checkPolicy(), nfd::cs::compareDataWithData(), nfd::cs::compareQueryWithData(), ndn::security::v2::CertificateFetcherFromNetwork::dataCallback(), ndn::security::v2::CertificateBundleFetcher::doFetch(), nfd::pit::Pit::findAllDataMatches(), ndn::security::v2::Certificate::getIdentity(), ndn::security::v2::Certificate::getIssuerId(), ndn::security::v2::Certificate::getKeyId(), ndn::security::v2::Certificate::getKeyName(), ndn::security::v2::KeyChain::importSafeBag(), nfd::cs::Cs::insert(), ndn::security::v2::CertificateCache::insert(), ndn::security::v2::KeyChain::makeCertificate(), ndn::Interest::matchesData(), ndn::MetadataObject::MetadataObject(), nfd::Forwarder::onDataUnsolicited(), nfd::Forwarder::onIncomingData(), nfd::Forwarder::onOutgoingData(), ndn::security::v2::operator<<(), ndn::operator<<(), ndn::operator==(), ndn::Face::Impl::putData(), ndn::mgmt::Dispatcher::removeTopPrefix(), nfd::fw::Strategy::satisfyInterest(), ndn::security::v2::KeyChain::setDefaultCertificate(), ndn::util::NotificationSubscriberBase::stop(), ndn::util::SegmentFetcher::stop(), ndn::security::v2::Validator::validate(), and ndn::security::v2::DataValidationState::~DataValidationState().

◆ setName()

Data & ndn::Data::setName ( const Name name)

Set name.

Returns
a reference to this Data, to allow chaining

Definition at line 228 of file data.cpp.

References resetWire().

Referenced by getName(), and ndn::security::v2::parseLocatorUri().

◆ getMetaInfo()

const MetaInfo& ndn::Data::getMetaInfo ( ) const
inlinenoexcept

Get MetaInfo.

Definition at line 141 of file data.hpp.

References setMetaInfo().

Referenced by ndn::operator<<(), and ndn::operator==().

◆ setMetaInfo()

Data & ndn::Data::setMetaInfo ( const MetaInfo metaInfo)

Set MetaInfo.

Returns
a reference to this Data, to allow chaining

Definition at line 238 of file data.cpp.

References resetWire().

Referenced by getMetaInfo().

◆ hasContent()

bool ndn::Data::hasContent ( ) const
inlinenoexcept

Return whether this Data has a Content element.

Definition at line 156 of file data.hpp.

Referenced by ndn::operator<<(), and wireEncode().

◆ getContent()

◆ setContent() [1/4]

Data & ndn::Data::setContent ( const Block block)

Set Content from a Block.

Parameters
blockTLV block to be used as Content; must be valid
Returns
a reference to this Data, to allow chaining

If the block's TLV-TYPE is tlv::Content, it will be used directly as this Data's Content element. Otherwise, the block will be nested into a Content element.

Definition at line 246 of file data.cpp.

References ndn::tlv::Content, ndn::Block::encode(), ndn::Block::isValid(), NDN_THROW, resetWire(), and ndn::Block::type().

Referenced by getContent(), ndn::Link::Link(), ndn::MetadataObject::makeData(), ndn::security::v2::parseLocatorUri(), and setContent().

◆ setContent() [2/4]

Data & ndn::Data::setContent ( span< const uint8_t >  value)

Set Content by copying from a contiguous sequence of bytes.

Parameters
valuebuffer with the TLV-VALUE of the content
Returns
a reference to this Data, to allow chaining

Definition at line 264 of file data.cpp.

References ndn::tlv::Content, ndn::encoding::makeBinaryBlock(), and resetWire().

◆ setContent() [3/4]

Data & ndn::Data::setContent ( const uint8_t *  value,
size_t  length 
)

Set Content by copying from a raw buffer.

Parameters
valuebuffer with the TLV-VALUE of the content; may be nullptr if length is zero
lengthsize of the buffer
Returns
a reference to this Data, to allow chaining
Deprecated:
Use setContent(span<const uint8_t>)

Definition at line 272 of file data.cpp.

References NDN_THROW, and setContent().

◆ setContent() [4/4]

Data & ndn::Data::setContent ( ConstBufferPtr  value)

Set Content from a shared buffer.

Parameters
valuebuffer with the TLV-VALUE of the content; must not be nullptr
Returns
a reference to this Data, to allow chaining

Definition at line 282 of file data.cpp.

References ndn::tlv::Content, nonstd::optional_lite::std11::move(), NDN_THROW, and resetWire().

◆ unsetContent()

Data & ndn::Data::unsetContent ( )

Remove the Content element.

Returns
a reference to this Data, to allow chaining
Postcondition
hasContent() == false

Definition at line 294 of file data.cpp.

References resetWire().

Referenced by getContent().

◆ getSignatureInfo()

◆ setSignatureInfo()

Data & ndn::Data::setSignatureInfo ( const SignatureInfo info)

Set SignatureInfo.

This is a low-level function that should not normally be called directly by applications. Instead, provide a SignatureInfo to the SigningInfo object passed to KeyChain::sign().

Returns
a reference to this Data, to allow chaining
Warning
SignatureInfo is overwritten when the packet is signed via KeyChain::sign().
See also
SigningInfo

Definition at line 302 of file data.cpp.

References info, and resetWire().

Referenced by getSignatureInfo(), and ndn::security::v2::KeyChain::sign().

◆ getSignatureValue()

const Block& ndn::Data::getSignatureValue ( ) const
inlinenoexcept

Get SignatureValue.

Definition at line 249 of file data.hpp.

References extractSignedRanges(), and setSignatureValue().

Referenced by ndn::operator<<(), ndn::operator==(), and ndn::security::parse().

◆ setSignatureValue()

Data & ndn::Data::setSignatureValue ( ConstBufferPtr  value)

Set SignatureValue.

Parameters
valuebuffer containing the TLV-VALUE of the SignatureValue; must not be nullptr

This is a low-level function that should not normally be called directly by applications. Instead, use KeyChain::sign() to sign the packet.

Returns
a reference to this Data, to allow chaining
Warning
SignatureValue is overwritten when the packet is signed via KeyChain::sign().

Definition at line 310 of file data.cpp.

References nonstd::optional_lite::std11::move(), NDN_THROW, resetWire(), and ndn::tlv::SignatureValue.

Referenced by getSignatureValue().

◆ extractSignedRanges()

InputBuffers ndn::Data::extractSignedRanges ( ) const

Extract ranges of Data covered by the signature.

Exceptions
ErrorData cannot be encoded or is missing ranges necessary for signing
Warning
The returned pointers will be invalidated if wireDecode() or wireEncode() are called.

Definition at line 322 of file data.cpp.

References bufs, ndn::Block::find(), ndn::tlv::SignatureValue, ndn::Block::value_begin(), and wireEncode().

Referenced by getSignatureValue(), and ndn::security::parse().

◆ getContentType()

uint32_t ndn::Data::getContentType ( ) const
inline

◆ setContentType()

Data & ndn::Data::setContentType ( uint32_t  type)

◆ getFreshnessPeriod()

◆ setFreshnessPeriod()

◆ getFinalBlock()

const optional<name::Component>& ndn::Data::getFinalBlock ( ) const
inline

◆ setFinalBlock()

Data & ndn::Data::setFinalBlock ( optional< name::Component finalBlockId)

◆ getSignatureType()

int32_t ndn::Data::getSignatureType ( ) const
inlinenoexcept

Get SignatureType.

Returns
tlv::SignatureTypeValue, or -1 to indicate the signature is invalid

Definition at line 306 of file data.hpp.

Referenced by ndn::security::v2::validator_config::ValidationPolicyConfig::checkPolicy(), ndn::security::v2::operator<<(), and ndn::operator<<().

◆ getKeyLocator()

optional<KeyLocator> ndn::Data::getKeyLocator ( ) const
inlinenoexcept

◆ resetWire()

void ndn::Data::resetWire ( )
protected

Clear wire encoding and cached FullName.

Note
This does not clear the SignatureValue.

Definition at line 221 of file data.cpp.

References ndn::Name::clear(), and ndn::Block::reset().

Referenced by getKeyLocator(), setContent(), setContentType(), setFinalBlock(), setFreshnessPeriod(), setMetaInfo(), setName(), setSignatureInfo(), setSignatureValue(), and unsetContent().


The documentation for this class was generated from the following files: