size_t Route::wireEncode(EncodingImpl<T>& block) const { size_t totalLength = 0; // Absence of an ExpirationPeriod signifies non-expiration if (!m_hasInfiniteExpirationPeriod) { totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::ExpirationPeriod, m_expirationPeriod.count()); } totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::Flags, m_flags); totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::Cost, m_cost); totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::Origin, m_origin); totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::FaceId, m_faceId); totalLength += block.prependVarNumber(totalLength); totalLength += block.prependVarNumber(ndn::tlv::nfd::Route); return totalLength; }
size_t DefaultParam::wireEncode(EncodingImpl<T>& block) const { size_t totalLength = 0; switch (m_originType) { case TYPE_ID: case TYPE_KEY: case TYPE_CERT: { totalLength += m_originName.wireEncode(block); break; } case TYPE_USER: break; default: throw Error("DefaultParam::wireEncode: unsupported PibType: " + boost::lexical_cast<std::string>(m_originType)); } totalLength += prependNonNegativeIntegerBlock(block, tlv::pib::Type, m_originType); totalLength += prependNonNegativeIntegerBlock(block, tlv::pib::Type, m_targetType); totalLength += block.prependVarNumber(totalLength); totalLength += block.prependVarNumber(tlv::pib::DefaultParam); return totalLength; }
size_t wireEncode(EncodingImpl<T>& encoder) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(encoder, ndn::statusCollector::tlv::RX, m_rx); totalLength += prependNonNegativeIntegerBlock(encoder, ndn::statusCollector::tlv::TX, m_tx); totalLength += prependNonNegativeIntegerBlock(encoder, ndn::statusCollector::tlv::FaceId, m_faceId); totalLength += encoder.prependByteArrayBlock(ndn::statusCollector::tlv::LinkIp, reinterpret_cast<const uint8_t*>(m_linkIp.c_str()), m_linkIp.size()); totalLength += encoder.prependByteArrayBlock(ndn::statusCollector::tlv::CurrentTime, reinterpret_cast<const uint8_t*>(m_timestamp.c_str()), m_timestamp.size()); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(statusCollector::tlv::FaceStatus); return totalLength; }
size_t Interest::wireEncode(EncodingImpl<TAG>& block) const { size_t totalLength = 0; // Interest ::= INTEREST-TYPE TLV-LENGTH // Name // Selectors? // Nonce // Scope? // InterestLifetime? // Link? // SelectedDelegation? // (reverse encoding) if (hasLink()) { if (hasSelectedDelegation()) { totalLength += prependNonNegativeIntegerBlock(block, tlv::SelectedDelegation, m_selectedDelegationIndex); } totalLength += prependBlock(block, m_link); } else { BOOST_ASSERT(!hasSelectedDelegation()); } // InterestLifetime if (getInterestLifetime() >= time::milliseconds::zero() && getInterestLifetime() != DEFAULT_INTEREST_LIFETIME) { totalLength += prependNonNegativeIntegerBlock(block, tlv::InterestLifetime, getInterestLifetime().count()); } // Scope if (getScope() >= 0) { totalLength += prependNonNegativeIntegerBlock(block, tlv::Scope, getScope()); } // Nonce getNonce(); // to ensure that Nonce is properly set totalLength += block.prependBlock(m_nonce); // Selectors if (hasSelectors()) { totalLength += getSelectors().wireEncode(block); } // Name totalLength += getName().wireEncode(block); totalLength += block.prependVarNumber(totalLength); totalLength += block.prependVarNumber(tlv::Interest); return totalLength; }
size_t NextHopRecord::wireEncode(EncodingImpl<TAG>& block) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::Cost, m_cost); totalLength += prependNonNegativeIntegerBlock(block, ndn::tlv::nfd::FaceId, m_faceId); totalLength += block.prependVarNumber(totalLength); totalLength += block.prependVarNumber(ndn::tlv::nfd::NextHopRecord); return totalLength; }
size_t Interest::encode03(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; // Encode as NDN Packet Format v0.3 // Interest ::= INTEREST-TYPE TLV-LENGTH // Name // CanBePrefix? // MustBeFresh? // ForwardingHint? // Nonce? // InterestLifetime? // HopLimit? // ApplicationParameters? // (reverse encoding) // ApplicationParameters if (hasApplicationParameters()) { totalLength += encoder.prependBlock(getApplicationParameters()); } // HopLimit: not yet supported // InterestLifetime if (getInterestLifetime() != DEFAULT_INTEREST_LIFETIME) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::InterestLifetime, static_cast<uint64_t>(getInterestLifetime().count())); } // Nonce uint32_t nonce = getNonce(); // if nonce was unset, getNonce generates a random nonce totalLength += encoder.prependByteArrayBlock(tlv::Nonce, reinterpret_cast<uint8_t*>(&nonce), sizeof(nonce)); // ForwardingHint if (!getForwardingHint().empty()) { totalLength += getForwardingHint().wireEncode(encoder); } // MustBeFresh if (getMustBeFresh()) { totalLength += prependEmptyBlock(encoder, tlv::MustBeFresh); } // CanBePrefix if (getCanBePrefix()) { totalLength += prependEmptyBlock(encoder, tlv::CanBePrefix); } // Name totalLength += getName().wireEncode(encoder); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::Interest); return totalLength; }
size_t FaceQueryFilter::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; if (m_hasLinkType) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LinkType, m_linkType); } if (m_hasFacePersistency) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, m_facePersistency); } if (m_hasFaceScope) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceScope, m_faceScope); } if (m_hasLocalUri) { totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri, reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size()); } if (m_hasRemoteUri) { totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri, reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size()); } if (m_hasUriScheme) { totalLength += encoder.prependByteArrayBlock(tlv::nfd::UriScheme, reinterpret_cast<const uint8_t*>(m_uriScheme.c_str()), m_uriScheme.size()); } if (m_hasFaceId) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId); } totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::FaceQueryFilter); return totalLength; }
size_t NackHeader::wireEncode(EncodingImpl<TAG>& encoder) const { size_t length = 0; length += prependNonNegativeIntegerBlock(encoder, tlv::NackReason, static_cast<uint32_t>(m_reason)); length += encoder.prependVarNumber(length); length += encoder.prependVarNumber(tlv::Nack); return length; }
size_t FaceQueryFilter::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; if (m_linkType) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LinkType, *m_linkType); } if (m_facePersistency) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, *m_facePersistency); } if (m_faceScope) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceScope, *m_faceScope); } if (hasLocalUri()) { totalLength += prependStringBlock(encoder, tlv::nfd::LocalUri, m_localUri); } if (hasRemoteUri()) { totalLength += prependStringBlock(encoder, tlv::nfd::Uri, m_remoteUri); } if (hasUriScheme()) { totalLength += prependStringBlock(encoder, tlv::nfd::UriScheme, m_uriScheme); } if (m_faceId) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, *m_faceId); } totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::FaceQueryFilter); return totalLength; }
size_t FaceEventNotification::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LinkType, m_linkType); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, m_facePersistency); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceScope, m_faceScope); totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri, reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size()); totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri, reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size()); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceEventKind, m_kind); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::FaceEventNotification); return totalLength; }
size_t MetaInfo::wireEncode(EncodingImpl<T>& blk) const { // MetaInfo ::= META-INFO-TYPE TLV-LENGTH // ContentType? // FreshnessPeriod? // FinalBlockId? // AppMetaInfo* size_t totalLength = 0; for (std::list<Block>::const_reverse_iterator appMetaInfoItem = m_appMetaInfo.rbegin(); appMetaInfoItem != m_appMetaInfo.rend(); ++appMetaInfoItem) { totalLength += prependBlock(blk, *appMetaInfoItem); } // FinalBlockId if (!m_finalBlockId.empty()) { totalLength += prependNestedBlock(blk, tlv::FinalBlockId, m_finalBlockId); } // FreshnessPeriod if (m_freshnessPeriod >= time::milliseconds::zero()) { totalLength += prependNonNegativeIntegerBlock(blk, tlv::FreshnessPeriod, m_freshnessPeriod.count()); } // ContentType if (m_type != TYPE_DEFAULT) { totalLength += prependNonNegativeIntegerBlock(blk, tlv::ContentType, m_type); } totalLength += blk.prependVarNumber(totalLength); totalLength += blk.prependVarNumber(tlv::MetaInfo); return totalLength; }
size_t CachePolicy::wireEncode(EncodingImpl<TAG>& encoder) const { if (m_policy == CachePolicyType::NONE) { BOOST_THROW_EXCEPTION(Error("CachePolicyType must be set")); } size_t length = 0; length += prependNonNegativeIntegerBlock(encoder, tlv::CachePolicyType, static_cast<uint32_t>(m_policy)); length += encoder.prependVarNumber(length); length += encoder.prependVarNumber(tlv::CachePolicy); return length; }
size_t LsaInfo::wireEncode(ndn::EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; // Absence of an ExpirationPeriod signifies non-expiration if (!m_hasInfiniteExpirationPeriod) { totalLength += prependNonNegativeIntegerBlock(encoder, ndn::tlv::nlsr::ExpirationPeriod, m_expirationPeriod.count()); } totalLength += prependNonNegativeIntegerBlock(encoder, ndn::tlv::nlsr::SequenceNumber, m_sequenceNumber); totalLength += prependNestedBlock(encoder, ndn::tlv::nlsr::OriginRouter, m_originRouter); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(ndn::tlv::nlsr::LsaInfo); return totalLength; }
size_t Adjacency::wireEncode(ndn::EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(encoder, ndn::tlv::nlsr::Cost, m_cost); totalLength += encoder.prependByteArrayBlock( ndn::tlv::nlsr::Uri, reinterpret_cast<const uint8_t*>(m_uri.c_str()), m_uri.size()); totalLength += m_name.wireEncode(encoder); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(ndn::tlv::nlsr::Adjacency); return totalLength; }
size_t Interest::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; // Interest ::= INTEREST-TYPE TLV-LENGTH // Name // Selectors? // Nonce // InterestLifetime? // ForwardingHint? // (reverse encoding) // ForwardingHint if (m_forwardingHint.size() > 0) { totalLength += m_forwardingHint.wireEncode(encoder); } // InterestLifetime if (getInterestLifetime() != DEFAULT_INTEREST_LIFETIME) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::InterestLifetime, getInterestLifetime().count()); } // Nonce uint32_t nonce = this->getNonce(); // assigns random Nonce if needed totalLength += encoder.prependByteArray(reinterpret_cast<uint8_t*>(&nonce), sizeof(nonce)); totalLength += encoder.prependVarNumber(sizeof(nonce)); totalLength += encoder.prependVarNumber(tlv::Nonce); // Selectors if (hasSelectors()) { totalLength += getSelectors().wireEncode(encoder); } // Name totalLength += getName().wireEncode(encoder); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::Interest); return totalLength; }
size_t Interest::encode02(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; // Encode as NDN Packet Format v0.2 // Interest ::= INTEREST-TYPE TLV-LENGTH // Name // Selectors? // Nonce // InterestLifetime? // ForwardingHint? // (reverse encoding) // ForwardingHint if (getForwardingHint().size() > 0) { totalLength += getForwardingHint().wireEncode(encoder); } // InterestLifetime if (getInterestLifetime() != DEFAULT_INTEREST_LIFETIME) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::InterestLifetime, static_cast<uint64_t>(getInterestLifetime().count())); } // Nonce uint32_t nonce = getNonce(); // if nonce was unset, getNonce generates a random nonce totalLength += encoder.prependByteArrayBlock(tlv::Nonce, reinterpret_cast<uint8_t*>(&nonce), sizeof(nonce)); // Selectors if (hasSelectors()) { totalLength += getSelectors().wireEncode(encoder); } // Name totalLength += getName().wireEncode(encoder); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::Interest); return totalLength; }
size_t FaceEventNotification::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LinkType, m_linkType); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, m_facePersistency); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceScope, m_faceScope); totalLength += prependStringBlock(encoder, tlv::nfd::LocalUri, m_localUri); totalLength += prependStringBlock(encoder, tlv::nfd::Uri, m_remoteUri); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceEventKind, m_kind); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::FaceEventNotification); return totalLength; }
size_t ControlParameters::wireEncode(EncodingImpl<T>& encoder) const { size_t totalLength = 0; if (this->hasExpirationPeriod()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::ExpirationPeriod, m_expirationPeriod.count()); } if (this->hasStrategy()) { totalLength += prependNestedBlock(encoder, tlv::nfd::Strategy, m_strategy); } if (this->hasFlags()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags); } if (this->hasCost()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Cost, m_cost); } if (this->hasOrigin()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Origin, m_origin); } if (this->hasLocalControlFeature()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LocalControlFeature, m_localControlFeature); } if (this->hasUri()) { size_t valLength = encoder.prependByteArray( reinterpret_cast<const uint8_t*>(m_uri.c_str()), m_uri.size()); totalLength += valLength; totalLength += encoder.prependVarNumber(valLength); totalLength += encoder.prependVarNumber(tlv::nfd::Uri); } if (this->hasFaceId()) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId); } if (this->hasName()) { totalLength += m_name.wireEncode(encoder); } totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::ControlParameters); return totalLength; }
size_t FaceStatus::wireEncode(EncodingImpl<TAG>& encoder) const { size_t totalLength = 0; totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::Flags, m_flags); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutBytes, m_nOutBytes); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInBytes, m_nInBytes); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutNacks, m_nOutNacks); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutDatas, m_nOutDatas); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NOutInterests, m_nOutInterests); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInNacks, m_nInNacks); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInDatas, m_nInDatas); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::NInInterests, m_nInInterests); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::LinkType, m_linkType); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FacePersistency, m_facePersistency); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceScope, m_faceScope); if (m_hasExpirationPeriod) { totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::ExpirationPeriod, m_expirationPeriod.count()); } totalLength += encoder.prependByteArrayBlock(tlv::nfd::LocalUri, reinterpret_cast<const uint8_t*>(m_localUri.c_str()), m_localUri.size()); totalLength += encoder.prependByteArrayBlock(tlv::nfd::Uri, reinterpret_cast<const uint8_t*>(m_remoteUri.c_str()), m_remoteUri.size()); totalLength += prependNonNegativeIntegerBlock(encoder, tlv::nfd::FaceId, m_faceId); totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::nfd::FaceStatus); return totalLength; }
size_t ChatroomInfo::wireEncode(ndn::EncodingImpl<T>& encoder) const { size_t totalLength = 0; // ChatroomInfo := CHATROOM-INFO-TYPE TLV-LENGTH // ChatroomName // TrustModel // ChatroomPrefix // ManagerPrefix // Participants // // ChatroomName := CHATROOM-NAME-TYPE TLV-LENGTH // NameComponent // // TrustModel := TRUST-MODEL-TYPE TLV-LENGTH // nonNegativeInteger // // ChatroomPrefix := CHATROOM-PREFIX-TYPE TLV-LENGTH // Name // // ManagerPrefix := MANAGER-PREFIX-TYPE TLV-LENGTH // Name // // Participants := PARTICIPANTS-TYPE TLV-LENGTH // Name+ // Participants size_t participantsLength = 0; for (std::list<Name>::const_reverse_iterator it = m_participants.rbegin(); it != m_participants.rend(); ++it) { participantsLength += it->wireEncode(encoder); } participantsLength += encoder.prependVarNumber(participantsLength); participantsLength += encoder.prependVarNumber(tlv::Participants); totalLength += participantsLength; // Manager Prefix size_t managerLength = m_manager.wireEncode(encoder); totalLength += managerLength; totalLength += encoder.prependVarNumber(managerLength); totalLength += encoder.prependVarNumber(tlv::ManagerPrefix); // Chatroom Sync Prefix size_t chatroomSyncPrefixLength = m_syncPrefix.wireEncode(encoder); totalLength += chatroomSyncPrefixLength; totalLength += encoder.prependVarNumber(chatroomSyncPrefixLength); totalLength += encoder.prependVarNumber(tlv::ChatroomPrefix); // Trust Model totalLength += prependNonNegativeIntegerBlock(encoder, tlv::TrustModel, m_trustModel); // Chatroom Name size_t chatroomNameLength = m_chatroomName.wireEncode(encoder); totalLength += chatroomNameLength; totalLength += encoder.prependVarNumber(chatroomNameLength); totalLength += encoder.prependVarNumber(tlv::ChatroomName); // Chatroom Info totalLength += encoder.prependVarNumber(totalLength); totalLength += encoder.prependVarNumber(tlv::ChatroomInfo); return totalLength; }