ndn-embeds 0.1.0
Lightweight NDN protocol stack for embedded systems
Loading...
Searching...
No Matches
tlv.hpp
Go to the documentation of this file.
1
11#pragma once
12
13#include "ndn/common.hpp"
14
15namespace ndn {
16
22namespace tlv {
23
27constexpr uint32_t Interest = 0x05;
28constexpr uint32_t Data = 0x06;
34constexpr uint32_t Name = 0x07;
40constexpr uint32_t GenericNameComponent = 0x08;
41constexpr uint32_t ImplicitSha256Digest = 0x01;
42constexpr uint32_t ParametersSha256Digest = 0x02;
48constexpr uint32_t CanBePrefix = 0x21;
49constexpr uint32_t MustBeFresh = 0x12;
50constexpr uint32_t ForwardingHint = 0x1e;
51constexpr uint32_t Nonce = 0x0a;
52constexpr uint32_t InterestLifetime = 0x0c;
53constexpr uint32_t HopLimit = 0x22;
54constexpr uint32_t ApplicationParameters = 0x24;
60constexpr uint32_t MetaInfo = 0x14;
61constexpr uint32_t Content = 0x15;
62constexpr uint32_t SignatureInfo = 0x16;
63constexpr uint32_t SignatureValue = 0x17;
69constexpr uint32_t ContentType = 0x18;
70constexpr uint32_t FreshnessPeriod = 0x19;
71constexpr uint32_t FinalBlockId = 0x1a;
77constexpr uint32_t SignatureType = 0x1b;
78constexpr uint32_t KeyLocator = 0x1c;
79constexpr uint32_t KeyDigest = 0x1d;
85constexpr uint32_t SignatureNonce = 0x26;
86constexpr uint32_t SignatureTime = 0x28;
87constexpr uint32_t SignatureSeqNum = 0x2a;
88constexpr uint32_t InterestSignatureInfo = 0x2c;
89constexpr uint32_t InterestSignatureValue = 0x2e;
95constexpr uint32_t ValidityPeriod = 0xfd;
96constexpr uint32_t NotBefore = 0xfe;
97constexpr uint32_t NotAfter = 0xff;
100} // namespace tlv
101
117public:
123 TlvEncoder(uint8_t* buf, size_t capacity);
124
137 Error writeVarNumber(uint64_t value);
138
144 Error writeNonNegativeInteger(uint64_t value);
145
151 Error writeType(uint32_t type);
152
158 Error writeLength(size_t length);
159
166 Error writeBytes(const uint8_t* data, size_t len);
167
175 Error writeTlv(uint32_t type, const uint8_t* value, size_t valueLen);
176
183 Error writeTlvNonNegativeInteger(uint32_t type, uint64_t value);
184
189 size_t size() const { return pos_; }
190
195 size_t remaining() const { return capacity_ - pos_; }
196
201 uint8_t* current() { return buf_ + pos_; }
202
207 size_t position() const { return pos_; }
208
213 void setPosition(size_t pos) { pos_ = pos; }
214
215private:
216 uint8_t* buf_;
217 size_t capacity_;
218 size_t pos_ = 0;
219};
220
236public:
242 TlvDecoder(const uint8_t* buf, size_t len);
243
249
256
262
268
272 struct TlvHeader {
273 uint32_t type;
274 size_t length;
275 };
276
282
289 Error readBytes(uint8_t* out, size_t len);
290
296 Error skip(size_t len);
297
302 size_t remaining() const { return len_ - pos_; }
303
308 const uint8_t* current() const { return buf_ + pos_; }
309
314 bool hasMore() const { return pos_ < len_; }
315
320 size_t position() const { return pos_; }
321
326 void setPosition(size_t pos) { pos_ = pos; }
327
328private:
329 const uint8_t* buf_;
330 size_t len_;
331 size_t pos_ = 0;
332};
333
339constexpr size_t varNumberSize(uint64_t value) {
340 if (value <= 252) {
341 return 1;
342 }
343 if (value <= 0xFFFF) {
344 return 3;
345 }
346 if (value <= 0xFFFFFFFF) {
347 return 5;
348 }
349 return 9;
350}
351
357constexpr size_t nonNegativeIntegerSize(uint64_t value) {
358 if (value <= 0xFF) {
359 return 1;
360 }
361 if (value <= 0xFFFF) {
362 return 2;
363 }
364 if (value <= 0xFFFFFFFF) {
365 return 4;
366 }
367 return 8;
368}
369
370} // namespace ndn
NDN Data packet.
Definition data.hpp:49
NDN Interest packet.
Definition interest.hpp:50
NDN Name class.
Definition name.hpp:64
TLV decoder.
Definition tlv.hpp:235
Result< uint32_t > readType()
Read a TLV Type.
Definition tlv.cpp:204
size_t position() const
Get current position.
Definition tlv.hpp:320
void setPosition(size_t pos)
Set current position.
Definition tlv.hpp:326
const uint8_t * current() const
Pointer to current position.
Definition tlv.hpp:308
Error readBytes(uint8_t *out, size_t len)
Read a specified number of bytes.
Definition tlv.cpp:239
Result< size_t > readLength()
Read a TLV Length.
Definition tlv.cpp:216
Result< uint64_t > readNonNegativeInteger(size_t numBytes)
Read a non-negative integer of specified byte count.
Definition tlv.cpp:191
Result< TlvHeader > readTlvHeader()
Read a TLV header (Type and Length) at once.
Definition tlv.cpp:224
Error skip(size_t len)
Skip a specified number of bytes.
Definition tlv.cpp:248
size_t remaining() const
Remaining readable bytes.
Definition tlv.hpp:302
bool hasMore() const
Check if there is more data.
Definition tlv.hpp:314
Result< uint64_t > readVarNumber()
Read a value in VAR-NUMBER format.
Definition tlv.cpp:147
TLV encoder.
Definition tlv.hpp:116
Error writeVarNumber(uint64_t value)
Write a value in VAR-NUMBER format.
Definition tlv.cpp:12
size_t position() const
Get current position.
Definition tlv.hpp:207
Error writeLength(size_t length)
Write a TLV Length.
Definition tlv.cpp:91
void setPosition(size_t pos)
Set current position.
Definition tlv.hpp:213
Error writeNonNegativeInteger(uint64_t value)
Write a non-negative integer (big-endian, minimum bytes)
Definition tlv.cpp:51
Error writeTlv(uint32_t type, const uint8_t *value, size_t valueLen)
Write a complete TLV structure.
Definition tlv.cpp:104
Error writeBytes(const uint8_t *data, size_t len)
Write a byte sequence.
Definition tlv.cpp:95
size_t size() const
Current write position (= number of bytes written)
Definition tlv.hpp:189
size_t remaining() const
Remaining writable bytes.
Definition tlv.hpp:195
Error writeTlvNonNegativeInteger(uint32_t type, uint64_t value)
Write a non-negative integer as a TLV.
Definition tlv.cpp:125
Error writeType(uint32_t type)
Write a TLV Type.
Definition tlv.cpp:87
uint8_t * current()
Pointer to current position.
Definition tlv.hpp:201
Validity period.
Common definitions for the NDN protocol stack.
ContentType
Content type.
Definition common.hpp:81
Error
Error codes.
Definition common.hpp:24
constexpr uint32_t KeyLocator
Key locator.
Definition tlv.hpp:78
constexpr uint32_t MetaInfo
Meta information.
Definition tlv.hpp:60
constexpr uint32_t SignatureInfo
Signature info.
Definition tlv.hpp:62
constexpr uint32_t KeyDigest
Key digest.
Definition tlv.hpp:79
constexpr uint32_t ForwardingHint
Forwarding hint.
Definition tlv.hpp:50
constexpr uint32_t InterestSignatureValue
Interest signature value.
Definition tlv.hpp:89
constexpr uint32_t FinalBlockId
Final block ID.
Definition tlv.hpp:71
constexpr uint32_t MustBeFresh
MustBeFresh flag.
Definition tlv.hpp:49
constexpr uint32_t HopLimit
Hop limit.
Definition tlv.hpp:53
constexpr uint32_t NotBefore
Not before (254)
Definition tlv.hpp:96
constexpr uint32_t InterestSignatureInfo
Interest signature info.
Definition tlv.hpp:88
constexpr uint32_t ImplicitSha256Digest
Implicit SHA-256 digest.
Definition tlv.hpp:41
constexpr uint32_t FreshnessPeriod
Freshness period.
Definition tlv.hpp:70
constexpr uint32_t ApplicationParameters
Application parameters.
Definition tlv.hpp:54
constexpr uint32_t InterestLifetime
Interest lifetime.
Definition tlv.hpp:52
constexpr uint32_t Content
Content.
Definition tlv.hpp:61
constexpr uint32_t SignatureValue
Signature value.
Definition tlv.hpp:63
constexpr uint32_t Nonce
Nonce (for loop detection)
Definition tlv.hpp:51
constexpr uint32_t SignatureSeqNum
Signature sequence number.
Definition tlv.hpp:87
constexpr uint32_t SignatureTime
Signature timestamp.
Definition tlv.hpp:86
constexpr uint32_t ParametersSha256Digest
Parameters SHA-256 digest.
Definition tlv.hpp:42
constexpr uint32_t SignatureNonce
Signature nonce.
Definition tlv.hpp:85
constexpr uint32_t CanBePrefix
CanBePrefix flag.
Definition tlv.hpp:48
constexpr uint32_t GenericNameComponent
Generic Name component.
Definition tlv.hpp:40
constexpr uint32_t NotAfter
Not after (255)
Definition tlv.hpp:97
SignatureType
Signature type.
Definition signature.hpp:22
Result type template.
Definition common.hpp:147
TLV header information.
Definition tlv.hpp:272
size_t length
Length value.
Definition tlv.hpp:274
uint32_t type
Type number.
Definition tlv.hpp:273
constexpr size_t varNumberSize(uint64_t value)
Calculate the encoded size of a VAR-NUMBER.
Definition tlv.hpp:339
constexpr size_t nonNegativeIntegerSize(uint64_t value)
Calculate the encoded size of a non-negative integer (minimum bytes)
Definition tlv.hpp:357