Represents an Interest packet. More...
#include <interest.hpp>
Classes | |
class | Error |
class | Nonce |
Public Member Functions | |
Interest (const Name &name={}, time::milliseconds lifetime=DEFAULT_INTEREST_LIFETIME) | |
Construct an Interest with given name and lifetime . More... | |
Interest (const Block &wire) | |
Construct an Interest by decoding from wire . More... | |
template<encoding::Tag TAG> | |
size_t | wireEncode (EncodingImpl< TAG > &encoder) const |
Prepend wire encoding to encoder . More... | |
const Block & | wireEncode () 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... | |
std::string | toUri () const |
Return a URI-like string that represents the Interest. More... | |
bool | matchesData (const Data &data) const |
Check if Interest can be satisfied by data . More... | |
bool | matchesInterest (const Interest &other) const |
Check if this Interest matches other . More... | |
const Name & | getName () const noexcept |
Interest & | setName (const Name &name) |
Set the Interest's name. More... | |
bool | getCanBePrefix () const noexcept |
Check whether the CanBePrefix element is present. More... | |
Interest & | setCanBePrefix (bool canBePrefix) |
Add or remove CanBePrefix element. More... | |
bool | getMustBeFresh () const noexcept |
Check whether the MustBeFresh element is present. More... | |
Interest & | setMustBeFresh (bool mustBeFresh) |
Add or remove MustBeFresh element. More... | |
span< const Name > | getForwardingHint () const noexcept |
Interest & | setForwardingHint (std::vector< Name > value) |
bool | hasNonce () const noexcept |
Check if the Nonce element is present. More... | |
Nonce | getNonce () const |
Get nonce value. More... | |
Interest & | setNonce (optional< Nonce > nonce) |
Set the Interest's nonce. More... | |
void | refreshNonce () |
Change nonce value. More... | |
time::milliseconds | getInterestLifetime () const noexcept |
Interest & | setInterestLifetime (time::milliseconds lifetime) |
Set the Interest's lifetime. More... | |
optional< uint8_t > | getHopLimit () const noexcept |
Interest & | setHopLimit (optional< uint8_t > hopLimit) |
Set the Interest's hop limit. More... | |
bool | hasApplicationParameters () const noexcept |
Return whether this Interest has any ApplicationParameters. More... | |
Block | getApplicationParameters () const |
Get the ApplicationParameters. More... | |
Interest & | setApplicationParameters (const Block &block) |
Set ApplicationParameters from a Block. More... | |
Interest & | setApplicationParameters (span< const uint8_t > value) |
Set ApplicationParameters by copying from a contiguous sequence of bytes. More... | |
Interest & | setApplicationParameters (const uint8_t *value, size_t length) |
Set ApplicationParameters by copying from a raw buffer. More... | |
Interest & | setApplicationParameters (ConstBufferPtr value) |
Set ApplicationParameters from a shared buffer. More... | |
Interest & | unsetApplicationParameters () |
Remove the ApplicationParameters element from this Interest. More... | |
bool | isSigned () const noexcept |
Return whether the Interest is signed. More... | |
optional< SignatureInfo > | getSignatureInfo () const |
Get the InterestSignatureInfo. More... | |
Interest & | setSignatureInfo (const SignatureInfo &info) |
Set the InterestSignatureInfo. More... | |
Block | getSignatureValue () const |
Get the InterestSignatureValue. More... | |
Interest & | setSignatureValue (ConstBufferPtr value) |
Set the InterestSignatureValue. More... | |
InputBuffers | extractSignedRanges () const |
Extract ranges of Interest covered by the signature in Packet Specification v0.3. More... | |
bool | isParametersDigestValid () const |
Check if the ParametersSha256DigestComponent in the name is valid. 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... | |
Static Public Member Functions | |
static bool | getAutoCheckParametersDigest () |
static void | setAutoCheckParametersDigest (bool b) |
Represents an Interest packet.
Definition at line 48 of file interest.hpp.
|
explicit |
Construct an Interest with given name
and lifetime
.
std::invalid_argument | name is invalid or lifetime is negative |
Interest::shared_from_this()
, Interest must be created using make_shared
. Otherwise, shared_from_this()
will trigger undefined behavior. Definition at line 45 of file interest.cpp.
References setInterestLifetime(), and setName().
|
explicit |
Construct an Interest by decoding from wire
.
Interest::shared_from_this()
, Interest must be created using make_shared
. Otherwise, shared_from_this()
will trigger undefined behavior. Definition at line 51 of file interest.cpp.
References wireDecode().
size_t ndn::Interest::wireEncode | ( | EncodingImpl< TAG > & | encoder | ) | const |
Prepend wire encoding to encoder
.
Definition at line 60 of file interest.cpp.
References ndn::tlv::CanBePrefix, ndn::DEFAULT_INTEREST_LIFETIME, ndn::tlv::ForwardingHint, getCanBePrefix(), getHopLimit(), getInterestLifetime(), getMustBeFresh(), getName(), getNonce(), hasApplicationParameters(), hasNonce(), ndn::tlv::HopLimit, ndn::tlv::Interest, ndn::tlv::InterestLifetime, ndn::tlv::MustBeFresh, ndn::NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(), NDN_THROW, ndn::tlv::Nonce, ndn::encoding::prependBinaryBlock(), ndn::encoding::prependBlock(), ndn::encoding::prependEmptyBlock(), ndn::encoding::prependNestedBlock(), ndn::encoding::prependNonNegativeIntegerBlock(), and ndn::Name::wireEncode().
Referenced by ndn::Face::Impl::expressInterest(), ns3::ndn::L3RateTracer::InNack(), ns3::ndn::L3RateTracer::OutNack(), ndn::security::parse(), and ndn::util::DummyClientFace::receive().
const Block & ndn::Interest::wireEncode | ( | ) | const |
Encode into a Block.
Definition at line 134 of file interest.cpp.
References ndn::Block::hasWire(), and wireDecode().
Referenced by extractSignedRanges().
void ndn::Interest::wireDecode | ( | const Block & | wire | ) |
Decode from wire
.
Definition at line 150 of file interest.cpp.
References ndn::tlv::ApplicationParameters, ndn::tlv::CanBePrefix, ndn::DEFAULT_INTEREST_LIFETIME, ndn::Block::elements_begin(), ndn::Block::elements_end(), ndn::Name::empty(), ndn::tlv::ForwardingHint, hasApplicationParameters(), ndn::tlv::HopLimit, ndn::tlv::Interest, ndn::tlv::InterestLifetime, ndn::tlv::isCriticalType(), isParametersDigestValid(), ndn::tlv::LinkDelegation, nonstd::optional_lite::std11::move(), ndn::tlv::MustBeFresh, ndn::tlv::Name, NDN_THROW, NDN_THROW_NESTED, ndn::tlv::Nonce, ndn::Block::parse(), ndn::encoding::readNonNegativeInteger(), ndn::to_string(), and ndn::Block::type().
Referenced by Interest(), and wireEncode().
|
inlinenoexcept |
Check if this instance has cached wire encoding.
Definition at line 139 of file interest.hpp.
References matchesData(), matchesInterest(), and toUri().
Referenced by ns3::ndn::L3RateTracer::InNack(), and ns3::ndn::L3RateTracer::OutNack().
std::string ndn::Interest::toUri | ( | ) | const |
Return a URI-like string that represents the Interest.
The string always starts with getName().toUri()
. After the name, if any of the Interest's CanBePrefix, MustBeFresh, Nonce, InterestLifetime, or HopLimit fields are present, their textual representation is appended as a query string. Example: "/test/name?MustBeFresh&Nonce=123456"
Definition at line 315 of file interest.cpp.
Referenced by hasWire().
bool ndn::Interest::matchesData | ( | const Data & | data | ) | const |
Check if Interest can be satisfied by data
.
This method considers Name, CanBePrefix, and MustBeFresh. However, MustBeFresh processing is limited to rejecting Data with zero/omitted FreshnessPeriod.
Definition at line 325 of file interest.cpp.
References ndn::Name::get(), getCanBePrefix(), ndn::Data::getFreshnessPeriod(), ndn::Data::getFullName(), getMustBeFresh(), ndn::Data::getName(), ndn::name::Component::isImplicitSha256Digest(), ndn::Name::isPrefixOf(), and ndn::Name::size().
Referenced by nfd::cs::Entry::canSatisfy(), ndn::security::v2::CertificateCache::find(), ndn::security::v2::TrustAnchorContainer::find(), hasWire(), and ndn::InMemoryStorage::selectChild().
bool ndn::Interest::matchesInterest | ( | const Interest & | other | ) | const |
Check if this Interest matches other
.
Two Interests match if both have the same Name, CanBePrefix, and MustBeFresh.
Definition at line 357 of file interest.cpp.
References getCanBePrefix(), getMustBeFresh(), and getName().
Referenced by hasWire(), and ndn::Face::Impl::nackPendingInterests().
|
inlinenoexcept |
Definition at line 172 of file interest.hpp.
References setName().
Referenced by ndn::mgmt::Dispatcher::addStatusDataset(), nfd::fw::asf::AsfStrategy::afterReceiveNack(), nfd::fw::SelfLearningStrategy::afterReceiveNack(), nfd::pit::Entry::canMatch(), ndn::security::v2::ValidationPolicySimpleHierarchy::checkPolicy(), ndn::security::v2::validator_config::ValidationPolicyConfig::checkPolicy(), ndn::security::v2::ValidationPolicyCommandInterest::checkPolicy(), ndn::Face::Impl::expressInterest(), ndn::security::v2::CertificateCache::find(), ndn::security::v2::TrustAnchorContainer::find(), ndn::InMemoryStorage::find(), nfd::Forwarder::Forwarder(), nfd::fw::asf::ProbingModule::getFaceToProbe(), ndn::security::v2::getKeyLocatorName(), nfd::cs::Cs::insert(), isParametersDigestValid(), nfd::CommandAuthenticator::makeAuthorization(), matchesInterest(), nfd::matchFilter(), nfd::Forwarder::onContentStoreHit(), nfd::Forwarder::onContentStoreMiss(), nfd::Forwarder::onDroppedInterest(), nfd::fw::Strategy::onDroppedInterest(), nfd::Forwarder::onIncomingNack(), nfd::Forwarder::onInterestLoop(), nfd::fw::asf::FaceStatsCompare::operator()(), ndn::operator<<(), ndn::security::parse(), nfd::pit::Pit::Pit(), nfd::ManagerBase::registerNotificationStream(), ndn::mgmt::Dispatcher::removeTopPrefix(), ndn::InMemoryStorage::selectChild(), ndn::mgmt::StatusDatasetContext::setPrefix(), ndn::security::v2::KeyChain::sign(), ndn::mgmt::StatusDatasetContext::StatusDatasetContext(), ndn::util::NotificationSubscriberBase::stop(), ndn::util::SegmentFetcher::stop(), unsetApplicationParameters(), wireEncode(), nfd::fw::wouldViolateScope(), ndn::util::DummyClientFace::~DummyClientFace(), and ndn::security::v2::InterestValidationState::~InterestValidationState().
Set the Interest's name.
std::invalid_argument | name is invalid |
Definition at line 367 of file interest.cpp.
References hasApplicationParameters(), NDN_THROW, and ndn::Block::reset().
Referenced by getName(), Interest(), ndn::security::InterestSigner::makeCommandInterest(), ndn::security::v2::KeyChain::sign(), and ndn::util::SegmentFetcher::stop().
|
inlinenoexcept |
Check whether the CanBePrefix element is present.
Definition at line 186 of file interest.hpp.
Referenced by nfd::pit::Entry::canMatch(), matchesData(), matchesInterest(), ndn::operator<<(), and wireEncode().
|
inline |
Add or remove CanBePrefix element.
canBePrefix | whether CanBePrefix element should be present. |
Definition at line 195 of file interest.hpp.
Referenced by ndn::security::v2::CertificateBundleFetcher::doFetch(), and ndn::util::SegmentFetcher::stop().
|
inlinenoexcept |
Check whether the MustBeFresh element is present.
Definition at line 205 of file interest.hpp.
Referenced by nfd::pit::Entry::canMatch(), nfd::cs::Entry::canSatisfy(), matchesData(), matchesInterest(), nfd::Forwarder::onNewNextHop(), ndn::operator<<(), ndn::InMemoryStorage::selectChild(), and wireEncode().
|
inline |
Add or remove MustBeFresh element.
mustBeFresh | whether MustBeFresh element should be present. |
Definition at line 214 of file interest.hpp.
Referenced by ndn::security::v2::CertificateBundleFetcher::doFetch(), and ndn::util::SegmentFetcher::stop().
|
inlinenoexcept |
Definition at line 222 of file interest.hpp.
References setForwardingHint().
Referenced by nfd::Forwarder::Forwarder(), and nfd::fw::Strategy::lookupFib().
Definition at line 385 of file interest.cpp.
References nonstd::optional_lite::std11::move(), and ndn::Block::reset().
Referenced by getForwardingHint().
|
inlinenoexcept |
Check if the Nonce element is present.
Definition at line 233 of file interest.hpp.
References getNonce(), refreshNonce(), and setNonce().
Referenced by getNonce(), ndn::operator<<(), refreshNonce(), and wireEncode().
Interest::Nonce ndn::Interest::getNonce | ( | ) | const |
Get nonce value.
If nonce was not present, it is added and assigned a random value.
Definition at line 402 of file interest.cpp.
References ndn::generateNonce(), hasNonce(), and ndn::Block::reset().
Referenced by nfd::Forwarder::Forwarder(), hasNonce(), nfd::Forwarder::onIncomingNack(), ndn::operator<<(), nfd::pit::OutRecord::setIncomingNack(), nfd::pit::FaceRecord::update(), and wireEncode().
Set the Interest's nonce.
Use setNonce(nullopt)
to remove any nonce from the Interest.
Definition at line 412 of file interest.cpp.
References ndn::Block::reset().
Referenced by hasNonce().
void ndn::Interest::refreshNonce | ( | ) |
Change nonce value.
If the Nonce element is present, the new nonce value will differ from the old value. If the Nonce element is not present, this method does nothing.
Definition at line 422 of file interest.cpp.
References ndn::generateNonce(), hasNonce(), and ndn::Block::reset().
Referenced by nfd::fw::asf::AsfStrategy::afterReceiveNack(), ndn::security::v2::CertificateFetcherDirectFetch::doFetch(), hasNonce(), and ndn::util::SegmentFetcher::stop().
|
inlinenoexcept |
Definition at line 261 of file interest.hpp.
References setInterestLifetime().
Referenced by ndn::operator<<(), nfd::pit::FaceRecord::update(), and wireEncode().
Interest & ndn::Interest::setInterestLifetime | ( | time::milliseconds | lifetime | ) |
Set the Interest's lifetime.
std::invalid_argument | lifetime is negative |
Definition at line 435 of file interest.cpp.
References NDN_THROW, and ndn::Block::reset().
Referenced by ndn::security::v2::CertificateBundleFetcher::doFetch(), getInterestLifetime(), Interest(), ndn::util::SegmentFetcher::stop(), and ndn::nfd::Controller::~Controller().
|
inlinenoexcept |
Definition at line 273 of file interest.hpp.
References setHopLimit().
Referenced by nfd::Forwarder::Forwarder(), nfd::Forwarder::onContentStoreMiss(), nfd::Forwarder::onOutgoingInterest(), ndn::operator<<(), and wireEncode().
Interest & ndn::Interest::setHopLimit | ( | optional< uint8_t > | hopLimit | ) |
Set the Interest's hop limit.
Use setHopLimit(nullopt)
to remove any hop limit from the Interest.
Definition at line 449 of file interest.cpp.
References ndn::tlv::ApplicationParameters, ndn::Block::encode(), nonstd::optional_lite::std11::move(), and ndn::Block::reset().
Referenced by getHopLimit().
|
inlinenoexcept |
Return whether this Interest has any ApplicationParameters.
Definition at line 289 of file interest.hpp.
Referenced by isParametersDigestValid(), setName(), wireDecode(), and wireEncode().
|
inline |
Get the ApplicationParameters.
If the element is not present, an invalid Block will be returned.
Definition at line 302 of file interest.hpp.
References extractSignedRanges(), getSignatureInfo(), getSignatureValue(), info, isSigned(), setApplicationParameters(), setSignatureInfo(), setSignatureValue(), and unsetApplicationParameters().
Set ApplicationParameters from a Block.
block | TLV block to be used as ApplicationParameters; must be valid |
If the block's TLV-TYPE is tlv::ApplicationParameters, it will be used directly as this Interest's ApplicationParameters element. Otherwise, the block will be nested into an ApplicationParameters element.
This function will also recompute the value of the ParametersSha256DigestComponent in the Interest's name. If the name does not contain a ParametersSha256DigestComponent, one will be appended to it.
Definition at line 472 of file interest.cpp.
References ndn::tlv::ApplicationParameters, ndn::Block::isValid(), NDN_THROW, ndn::Block::reset(), and ndn::Block::type().
Referenced by getApplicationParameters(), and setApplicationParameters().
Interest & ndn::Interest::setApplicationParameters | ( | span< const uint8_t > | value | ) |
Set ApplicationParameters by copying from a contiguous sequence of bytes.
value | buffer from which the TLV-VALUE of the parameters will be copied |
This function will also recompute the value of the ParametersSha256DigestComponent in the Interest's name. If the name does not contain a ParametersSha256DigestComponent, one will be appended to it.
Definition at line 490 of file interest.cpp.
References ndn::tlv::ApplicationParameters, ndn::encoding::makeBinaryBlock(), and ndn::Block::reset().
Interest & ndn::Interest::setApplicationParameters | ( | const uint8_t * | value, |
size_t | length | ||
) |
Set ApplicationParameters by copying from a raw buffer.
value | points to a buffer from which the TLV-VALUE of the parameters will be copied; may be nullptr if length is zero |
length | size of the buffer |
This function will also recompute the value of the ParametersSha256DigestComponent in the Interest's name. If the name does not contain a ParametersSha256DigestComponent, one will be appended to it.
Definition at line 499 of file interest.cpp.
References NDN_THROW, and setApplicationParameters().
Interest & ndn::Interest::setApplicationParameters | ( | ConstBufferPtr | value | ) |
Set ApplicationParameters from a shared buffer.
value | buffer containing the TLV-VALUE of the parameters; must not be nullptr |
This function will also recompute the value of the ParametersSha256DigestComponent in the Interest's name. If the name does not contain a ParametersSha256DigestComponent, one will be appended to it.
Definition at line 509 of file interest.cpp.
References ndn::tlv::ApplicationParameters, nonstd::optional_lite::std11::move(), NDN_THROW, and ndn::Block::reset().
Interest & ndn::Interest::unsetApplicationParameters | ( | ) |
Remove the ApplicationParameters element from this Interest.
This function will also remove any InterestSignatureInfo and InterestSignatureValue elements in the Interest, as well as any ParametersSha256DigestComponents in the Interest's name.
Definition at line 522 of file interest.cpp.
References ndn::Name::erase(), getName(), and ndn::Block::reset().
Referenced by getApplicationParameters().
|
noexcept |
Return whether the Interest is signed.
Definition at line 534 of file interest.cpp.
References ndn::Name::empty(), getSignatureInfo(), getSignatureValue(), ndn::Block::isValid(), and ndn::tlv::ParametersSha256DigestComponent.
Referenced by getApplicationParameters().
optional< SignatureInfo > ndn::Interest::getSignatureInfo | ( | ) | const |
Get the InterestSignatureInfo.
nullopt | InterestSignatureInfo is not present |
Definition at line 544 of file interest.cpp.
References ndn::SignatureInfo::Interest, ndn::tlv::InterestSignatureInfo, and nonstd::optional_lite::nullopt.
Referenced by ndn::security::v2::validator_config::ValidationPolicyConfig::checkPolicy(), ndn::security::v2::ValidationPolicyCommandInterest::checkPolicy(), ndn::security::v2::ValidationPolicySignedInterest::checkPolicy(), getApplicationParameters(), ndn::security::v2::getKeyLocatorName(), isSigned(), and ndn::security::parse().
Interest & ndn::Interest::setSignatureInfo | ( | const SignatureInfo & | info | ) |
Set the InterestSignatureInfo.
Definition at line 554 of file interest.cpp.
References ndn::tlv::ApplicationParameters, ndn::SignatureInfo::Interest, ndn::tlv::InterestSignatureInfo, ndn::tlv::InterestSignatureValue, ndn::encoding::makeEmptyBlock(), nonstd::optional_lite::std11::move(), ndn::Block::reset(), and ndn::SignatureInfo::wireEncode().
Referenced by getApplicationParameters(), and ndn::security::v2::KeyChain::sign().
Block ndn::Interest::getSignatureValue | ( | ) | const |
Get the InterestSignatureValue.
If the element is not present, an invalid Block will be returned.
Definition at line 588 of file interest.cpp.
References ndn::tlv::InterestSignatureValue.
Referenced by getApplicationParameters(), isSigned(), and ndn::security::parse().
Interest & ndn::Interest::setSignatureValue | ( | ConstBufferPtr | value | ) |
Set the InterestSignatureValue.
value | Buffer containing the TLV-VALUE of the InterestSignatureValue; must not be nullptr |
Error | InterestSignatureInfo is unset |
InterestSignatureInfo must be set before setting InterestSignatureValue
Definition at line 598 of file interest.cpp.
References ndn::tlv::InterestSignatureInfo, ndn::tlv::InterestSignatureValue, nonstd::optional_lite::std11::move(), NDN_THROW, and ndn::Block::reset().
Referenced by getApplicationParameters(), and ndn::security::v2::KeyChain::sign().
InputBuffers ndn::Interest::extractSignedRanges | ( | ) | const |
Extract ranges of Interest covered by the signature in Packet Specification v0.3.
Definition at line 638 of file interest.cpp.
References ndn::tlv::ApplicationParameters, bufs, ndn::Name::empty(), ndn::tlv::InterestSignatureInfo, ndn::tlv::InterestSignatureValue, NDN_THROW, ndn::tlv::ParametersSha256DigestComponent, and wireEncode().
Referenced by getApplicationParameters(), ndn::security::parse(), and ndn::security::v2::KeyChain::sign().
|
inlinestatic |
Definition at line 420 of file interest.hpp.
|
inlinestatic |
Definition at line 426 of file interest.hpp.
References ndn::DEFAULT_INTEREST_LIFETIME, isParametersDigestValid(), ndn::NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(), NDN_CXX_NODISCARD, and ndn::operator<<().
bool ndn::Interest::isParametersDigestValid | ( | ) | const |
Check if the ParametersSha256DigestComponent in the name is valid.
Returns true if there is a single ParametersSha256DigestComponent in the name and the digest value is correct, or if there is no ParametersSha256DigestComponent in the name and the Interest does not contain any parameters. Returns false otherwise.
Definition at line 673 of file interest.cpp.
References ndn::OBufferStream::buf(), ndn::security::transform::digestFilter(), getName(), hasApplicationParameters(), nonstd::optional_lite::std11::move(), ndn::tlv::ParametersSha256DigestComponent, ndn::SHA256, ndn::Name::size(), and ndn::security::transform::streamSink().
Referenced by setAutoCheckParametersDigest(), and wireDecode().