All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
tlv-decoder.hpp
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
22 #ifndef NDN_TLV_DECODER_HPP
23 #define NDN_TLV_DECODER_HPP
24 
25 #include <stdexcept>
26 #include "../c/encoding/tlv/tlv-decoder.h"
27 
28 using namespace std;
29 
30 namespace ndn {
31 
35 class TlvDecoder : public ndn_TlvDecoder {
36 public:
40  TlvDecoder(const uint8_t *input, size_t inputLength)
41  {
42  ndn_TlvDecoder_initialize(this, input, inputLength);
43  }
44 
45  size_t
46  readNestedTlvsStart(unsigned int expectedType)
47  {
48  size_t endOffset;
49  ndn_Error error;
50  if ((error = ndn_TlvDecoder_readNestedTlvsStart
51  (this, expectedType, &endOffset)))
52  throw runtime_error(ndn_getErrorString(error));
53 
54  return endOffset;
55  }
56 
57  void
58  finishNestedTlvs(int endOffset)
59  {
60  ndn_Error error;
61  if ((error = ndn_TlvDecoder_finishNestedTlvs(this, endOffset)))
62  throw runtime_error(ndn_getErrorString(error));
63  }
64 
65  void
66  finishNestedTlvsSkipCritical(int endOffset)
67  {
68  ndn_Error error;
69  if ((error = ndn_TlvDecoder_finishNestedTlvsSkipCritical(this, endOffset)))
70  throw runtime_error(ndn_getErrorString(error));
71  }
72 
73  bool
74  peekType(unsigned int expectedType, size_t endOffset)
75  {
76  int gotExpectedType;
77  ndn_Error error;
78  if ((error = ndn_TlvDecoder_peekType
79  (this, expectedType, endOffset, &gotExpectedType)))
80  throw runtime_error(ndn_getErrorString(error));
81 
82  return gotExpectedType != 0 ? true : false;
83  }
84 
85  uint64_t
86  readNonNegativeIntegerTlv(unsigned int expectedType)
87  {
88  uint64_t value;
89  ndn_Error error;
90  if ((error = ndn_TlvDecoder_readNonNegativeIntegerTlv
91  (this, expectedType, &value)))
92  throw runtime_error(ndn_getErrorString(error));
93 
94  return value;
95  }
96 
97  struct ndn_Blob
98  readBlobTlv(unsigned int expectedType)
99  {
100  struct ndn_Blob value;
101  ndn_Error error;
102  if ((error = ndn_TlvDecoder_readBlobTlv(this, expectedType, &value)))
103  throw runtime_error(ndn_getErrorString(error));
104 
105  return value;
106  }
107 
108  bool
109  readBooleanTlv(unsigned int expectedType, size_t endOffset)
110  {
111  int value;
112  ndn_Error error;
113  if ((error = ndn_TlvDecoder_readBooleanTlv
114  (this, expectedType, endOffset, &value)))
115  throw runtime_error(ndn_getErrorString(error));
116 
117  return value != 0;
118  }
119 
120  void
121  skipTlv(unsigned int expectedType)
122  {
123  ndn_Error error;
124  if ((error = ndn_TlvDecoder_skipTlv(this, expectedType)))
125  throw runtime_error(ndn_getErrorString(error));
126  }
127 
128  void
129  skipOptionalTlv(unsigned int expectedType, size_t endOffset)
130  {
131  ndn_Error error;
132  if ((error = ndn_TlvDecoder_skipOptionalTlv
133  (this, expectedType, endOffset)))
134  throw runtime_error(ndn_getErrorString(error));
135  }
136 
137  void
138  seek(size_t offset) { ndn_TlvDecoder_seek(this, offset); }
139 };
140 
141 }
142 
143 #endif
TlvDecoder(const uint8_t *input, size_t inputLength)
Initialize the base ndn_TlvDecoder struct with the input.
Definition: tlv-decoder.hpp:40
A TlvDecoder extends a C ndn_TlvDecoder struct and wraps related functions.
Definition: tlv-decoder.hpp:35
const uint8_t * value
pointer to the pre-allocated buffer for the value.
Definition: blob-types.h:34
Copyright (C) 2015-2018 Regents of the University of California.
Definition: blob-types.h:33
Copyright (C) 2014-2018 Regents of the University of California.
Definition: tlv-decoder.h:34