ndn::Link Class Reference

Represents a LinkObject TLV element. More...

#include <ndn-cxx/link.hpp>

+ Inheritance diagram for ndn::Link:
+ Collaboration diagram for ndn::Link:

Classes

class  Error
 

Public Member Functions

 Link ()
 Create an empty Link object. More...
 
 Link (const Block &wire)
 Decode a Link object from a Block. More...
 
 Link (const Name &name, std::initializer_list< Name > delegations={})
 Create a Link object with the given name and delegations. More...
 
bool addDelegation (const Name &name)
 Append a delegation at the end. More...
 
InputBuffers extractSignedRanges () const
 Extract ranges of Data covered by the signature. More...
 
uint64_t getCongestionMark () const
 Get the value of the CongestionMark tag. More...
 
const BlockgetContent () const noexcept
 Get the Content element. More...
 
uint32_t getContentType () const
 
span< const NamegetDelegationList () const
 Get the delegations. More...
 
const optional< name::Component > & getFinalBlock () const
 
time::milliseconds getFreshnessPeriod () const
 
const NamegetFullName () const
 Get full name including implicit digest. More...
 
optional< KeyLocatorgetKeyLocator () const noexcept
 Get the KeyLocator element. More...
 
const MetaInfogetMetaInfo () const noexcept
 Get the MetaInfo element. More...
 
const NamegetName () const noexcept
 Get the data name. More...
 
const SignatureInfogetSignatureInfo () const noexcept
 Get the SignatureInfo element. More...
 
int32_t getSignatureType () const noexcept
 Get the SignatureType. More...
 
const BlockgetSignatureValue () const noexcept
 Get the SignatureValue element. More...
 
template<typename T >
shared_ptr< T > getTag () const
 Get a tag item. More...
 
bool hasContent () const noexcept
 Return whether this Data has a Content element. More...
 
bool hasWire () const noexcept
 Check if this instance has cached wire encoding. More...
 
bool removeDelegation (const Name &name)
 Remove a delegation whose name is name. More...
 
template<typename T >
void removeTag () const
 Remove a tag item. More...
 
void setCongestionMark (uint64_t mark)
 Set the CongestionMark tag to the specified value. More...
 
DatasetContent (const Block &block)
 Set Content from a Block. More...
 
DatasetContent (ConstBufferPtr value)
 Set Content from a shared buffer. More...
 
DatasetContent (span< const uint8_t > value)
 Set Content by copying from a contiguous sequence of bytes. More...
 
DatasetContentType (uint32_t type)
 
void setDelegationList (std::vector< Name > delegations)
 Set the delegations. More...
 
DatasetFinalBlock (optional< name::Component > finalBlockId)
 
DatasetFreshnessPeriod (time::milliseconds freshnessPeriod)
 
DatasetMetaInfo (const MetaInfo &metaInfo)
 Set the MetaInfo element. More...
 
DatasetName (const Name &name)
 Set the data name. More...
 
DatasetSignatureInfo (const SignatureInfo &info)
 Set the SignatureInfo element. More...
 
DatasetSignatureValue (ConstBufferPtr value)
 Set SignatureValue from a shared buffer. More...
 
DatasetSignatureValue (span< const uint8_t > value)
 Set SignatureValue by copying from a contiguous sequence of bytes. More...
 
template<typename T >
void setTag (shared_ptr< T > tag) const
 Set (add or replace) a tag item. More...
 
DataunsetContent ()
 Remove the Content element. More...
 
void wireDecode (const Block &wire)
 Decode from the wire format. More...
 
const BlockwireEncode () const
 Encode into a Block. More...
 
const BlockwireEncode (EncodingBuffer &encoder, span< const uint8_t > signature) const
 Finalize Data packet encoding with the specified signature. More...
 
template<encoding::Tag TAG>
size_t wireEncode (EncodingImpl< TAG > &encoder, bool wantUnsignedPortionOnly=false) const
 Prepend wire encoding to encoder. More...
 

Protected Member Functions

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

Detailed Description

Represents a LinkObject TLV element.

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

Definition at line 33 of file link.hpp.

Constructor & Destructor Documentation

◆ Link() [1/3]

ndn::Link::Link ( )
default

Create an empty Link object.

Note that in certain contexts that use Link::shared_from_this(), Link must be created using make_shared:

shared_ptr<Link> linkObject = make_shared<Link>();

◆ Link() [2/3]

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

Decode a Link object from a Block.

Parameters
wirea TLV block

Note that in certain contexts that use Link::shared_from_this(), Link must be created using make_shared:

shared_ptr<Link> linkObject = make_shared<Link>(block);

Definition at line 35 of file link.cpp.

◆ Link() [3/3]

ndn::Link::Link ( const Name name,
std::initializer_list< Name delegations = {} 
)
explicit

Create a Link object with the given name and delegations.

Parameters
nameA reference to the name of the redirected namespace
delegationsDelegations in payload

Note that in certain contexts that use Link::shared_from_this(), Link must be created using make_shared:

shared_ptr<Link> link = make_shared<Link>(name, delegations);

Definition at line 40 of file link.cpp.

Member Function Documentation

◆ addDelegation()

bool ndn::Link::addDelegation ( const Name name)

Append a delegation at the end.

Parameters
nameDelegation name
Returns
true if delegation is added, false if same name already exists

Definition at line 92 of file link.cpp.

◆ extractSignedRanges()

InputBuffers ndn::Data::extractSignedRanges ( ) const
inherited

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 320 of file data.cpp.

◆ getCongestionMark()

uint64_t ndn::PacketBase::getCongestionMark ( ) const
inherited

Get the value of the CongestionMark tag.

Definition at line 28 of file packet-base.cpp.

◆ getContent()

const Block& ndn::Data::getContent ( ) const
inlinenoexceptinherited

Get the Content element.

If the element is not present (hasContent() == false), an invalid Block will be returned.

The value of the returned Content Block (if valid) can be accessed through

See also
hasContent()
Block::value_bytes(), Block::blockFromValue(), Block::parse()

Definition at line 180 of file data.hpp.

◆ getContentType()

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

Definition at line 285 of file data.hpp.

◆ getDelegationList()

span<const Name> ndn::Link::getDelegationList ( ) const
inline

Get the delegations.

Definition at line 83 of file link.hpp.

◆ getFinalBlock()

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

Definition at line 303 of file data.hpp.

◆ getFreshnessPeriod()

time::milliseconds ndn::Data::getFreshnessPeriod ( ) const
inlineinherited

Definition at line 294 of file data.hpp.

◆ getFullName()

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

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.

◆ getKeyLocator()

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

Get the KeyLocator element.

Definition at line 326 of file data.hpp.

◆ getMetaInfo()

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

Get the MetaInfo element.

Definition at line 145 of file data.hpp.

◆ getName()

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

Get the data name.

Definition at line 129 of file data.hpp.

◆ getSignatureInfo()

const SignatureInfo& ndn::Data::getSignatureInfo ( ) const
inlinenoexceptinherited

Get the SignatureInfo element.

Definition at line 224 of file data.hpp.

◆ getSignatureType()

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

Get the SignatureType.

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

Definition at line 317 of file data.hpp.

◆ getSignatureValue()

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

Get the SignatureValue element.

Definition at line 245 of file data.hpp.

◆ getTag()

template<typename T >
shared_ptr< T > ndn::TagHost::getTag
inherited

Get a tag item.

Template Parameters
Ttype of the tag, which must be a subclass of ndn::Tag
Return values
nullptrif no Tag of type T is stored

Definition at line 67 of file tag-host.hpp.

◆ hasContent()

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

Return whether this Data has a Content element.

Definition at line 161 of file data.hpp.

◆ hasWire()

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

Check if this instance has cached wire encoding.

Definition at line 112 of file data.hpp.

◆ removeDelegation()

bool ndn::Link::removeDelegation ( const Name name)

Remove a delegation whose name is name.

Parameters
nameDelegation name
Returns
true if delegation is removed, otherwise false

Definition at line 104 of file link.cpp.

◆ removeTag()

template<typename T >
void ndn::TagHost::removeTag
inherited

Remove a tag item.

Note
Tag can be removed even on a const tag host instance

Definition at line 94 of file tag-host.hpp.

◆ resetWire()

void ndn::Data::resetWire ( )
protectedinherited

Clear wire encoding and cached FullName.

Note
This does not clear the SignatureValue.

Definition at line 221 of file data.cpp.

◆ setCongestionMark()

void ndn::PacketBase::setCongestionMark ( uint64_t  mark)
inherited

Set the CongestionMark tag to the specified value.

Definition at line 41 of file packet-base.cpp.

◆ setContent() [1/3]

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

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.

◆ setContent() [2/3]

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

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 272 of file data.cpp.

◆ setContent() [3/3]

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

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.

◆ setContentType()

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

Definition at line 334 of file data.cpp.

◆ setDelegationList()

void ndn::Link::setDelegationList ( std::vector< Name delegations)

Set the delegations.

Note
This is more efficient than multiple addDelegation and removeDelegation invocations.

Definition at line 85 of file link.cpp.

◆ setFinalBlock()

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

Definition at line 354 of file data.cpp.

◆ setFreshnessPeriod()

Data & ndn::Data::setFreshnessPeriod ( time::milliseconds  freshnessPeriod)
inherited

Definition at line 344 of file data.cpp.

◆ setMetaInfo()

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

Set the MetaInfo element.

Returns
A reference to this Data, to allow chaining.

Definition at line 238 of file data.cpp.

◆ setName()

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

Set the data name.

Returns
A reference to this Data, to allow chaining.

Definition at line 228 of file data.cpp.

◆ setSignatureInfo()

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

Set the SignatureInfo element.

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 292 of file data.cpp.

◆ setSignatureValue() [1/2]

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

Set SignatureValue from a shared buffer.

Parameters
valuebuffer containing the TLV-VALUE of the SignatureValue; must not be nullptr
Returns
A reference to this Data, to allow chaining.

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

Warning
SignatureValue is overwritten when the packet is signed via KeyChain::sign().

Definition at line 308 of file data.cpp.

◆ setSignatureValue() [2/2]

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

Set SignatureValue by copying from a contiguous sequence of bytes.

Parameters
valuebuffer from which the TLV-VALUE of the SignatureValue will be copied
Returns
A reference to this Data, to allow chaining.

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

Warning
SignatureValue is overwritten when the packet is signed via KeyChain::sign().

Definition at line 300 of file data.cpp.

◆ setTag()

template<typename T >
void ndn::TagHost::setTag ( shared_ptr< T >  tag) const
inherited

Set (add or replace) a tag item.

Template Parameters
Ttype of the tag, which must be a subclass of ndn::Tag
Note
Tag can be set even on a const tag host instance

Definition at line 80 of file tag-host.hpp.

◆ unsetContent()

Data & ndn::Data::unsetContent ( )
inherited

Remove the Content element.

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

Definition at line 284 of file data.cpp.

◆ wireDecode()

void ndn::Link::wireDecode ( const Block wire)

Decode from the wire format.

Parameters
wirea TLV block

Definition at line 61 of file link.cpp.

◆ wireEncode() [1/3]

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

Encode into a Block.

Precondition
Data must be signed.

Definition at line 109 of file data.cpp.

◆ wireEncode() [2/3]

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

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);
Data(const Name &name=Name())
Construct an unsigned Data packet with given name and empty Content.
Definition: data.cpp:34

Definition at line 94 of file data.cpp.

◆ wireEncode() [3/3]

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

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.