static ndn_Error ndn_decodeTlvInterestV03 (struct ndn_Interest *interest, size_t *signedPortionBeginOffset, size_t *signedPortionEndOffset, struct ndn_TlvDecoder *decoder) { ndn_Error error; size_t endOffset; int canBePrefix, mustBeFresh; struct ndn_Blob dummyBlob; if ((error = ndn_TlvDecoder_readNestedTlvsStart (decoder, ndn_Tlv_Interest, &endOffset))) return error; if ((error = ndn_decodeTlvName (&interest->name, signedPortionBeginOffset, signedPortionEndOffset, decoder))) return error; if ((error = ndn_TlvDecoder_readBooleanTlv (decoder, ndn_Tlv_CanBePrefix, endOffset, &canBePrefix))) return error; ndn_Interest_setCanBePrefix(interest, canBePrefix); if ((error = ndn_TlvDecoder_readBooleanTlv (decoder, ndn_Tlv_MustBeFresh, endOffset, &mustBeFresh))) return error; ndn_Interest_setMustBeFresh(interest, mustBeFresh); // Get the encoded sequence of delegations as is. if ((error = ndn_TlvDecoder_readOptionalBlobTlv (decoder, ndn_Tlv_ForwardingHint, endOffset, &interest->forwardingHintWireEncoding))) return error; if ((error = ndn_TlvDecoder_readOptionalBlobTlv (decoder, ndn_Tlv_Nonce, endOffset, &interest->nonce))) return error; if ((error = ndn_TlvDecoder_readOptionalNonNegativeIntegerTlvAsDouble (decoder, ndn_Tlv_InterestLifetime, endOffset, &interest->interestLifetimeMilliseconds))) return error; // Clear the unused fields. interest->minSuffixComponents = -1; ndn_KeyLocator_initialize (&interest->keyLocator, interest->keyLocator.keyName.components, interest->keyLocator.keyName.maxComponents); interest->exclude.nEntries = 0; interest->childSelector = -1; ndn_Blob_initialize(&interest->linkWireEncoding, 0, 0); interest->selectedDelegationIndex = -1; // Ignore the HopLimit and Parameters. if ((error = ndn_TlvDecoder_readOptionalBlobTlv (decoder, ndn_Tlv_HopLimit, endOffset, &dummyBlob))) return error; if ((error = ndn_TlvDecoder_readOptionalBlobTlv (decoder, ndn_Tlv_Parameters, endOffset, &dummyBlob))) return error; if ((error = ndn_TlvDecoder_finishNestedTlvs(decoder, endOffset))) return error; return NDN_ERROR_success; }
InterestLite& InterestLite::setMustBeFresh(bool mustBeFresh) { ndn_Interest_setMustBeFresh(this, mustBeFresh ? 1 : 0); return *this; }