Kea  2.1.7-git
opaque_data_tuple.h
Go to the documentation of this file.
1 // Copyright (C) 2014-2021 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef OPAQUE_DATA_TUPLE_H
8 #define OPAQUE_DATA_TUPLE_H
9 
10 #include <dhcp/option.h>
11 #include <util/buffer.h>
12 #include <util/io_utilities.h>
13 
14 #include <iostream>
15 #include <iterator>
16 #include <string>
17 #include <vector>
18 
19 namespace isc {
20 namespace dhcp {
21 
25 public:
26  OpaqueDataTupleError(const char* file, size_t line, const char* what) :
27  isc::Exception(file, line, what) { };
28 };
29 
30 
48 public:
49 
59  LENGTH_2_BYTES
60  };
61 
63  using Buffer = std::vector<uint8_t>;
64  using InputIterator = Buffer::const_iterator;
65 
70  OpaqueDataTuple(LengthFieldType length_field_type);
71 
83  OpaqueDataTuple(LengthFieldType length_field_type,
84  InputIterator begin,
85  InputIterator end)
86  : length_field_type_(length_field_type) {
87  unpack(begin, end);
88  }
89 
103  void append(const char* data, const size_t len) {
104  data_.insert(data_.end(), data, data + len);
105  }
106  void append(InputIterator data, const size_t len) {
107  data_.insert(data_.end(), data, data + len);
108  }
109 
116  void append(const std::string& text);
117 
128  void assign(const char* data, const size_t len) {
129  data_.assign(data, data + len);
130  }
131  void assign(InputIterator data, const size_t len) {
132  data_.assign(data, data + len);
133  }
134 
141  void assign(const std::string& text);
142 
144  void clear();
145 
149  bool equals(const std::string& other) const;
150 
153  return (length_field_type_);
154  }
155 
157  size_t getLength() const {
158  return (data_.size());
159  }
160 
162  size_t getTotalLength() const {
163  return (getDataFieldSize() + getLength());
164  }
165 
171  const Buffer& getData() const {
172  return (data_);
173  }
174 
176  std::string getText() const;
177 
199  void pack(isc::util::OutputBuffer& buf) const;
200 
216  void unpack(InputIterator begin, InputIterator end);
217 
219  //{@
220 
227  OpaqueDataTuple& operator=(const std::string& other);
228 
236  bool operator==(const std::string& other) const;
237 
246  bool operator!=(const std::string& other);
248 
252  int getDataFieldSize() const;
253 
254 private:
255 
257  Buffer data_;
258 
260  LengthFieldType length_field_type_;
261 };
262 
264 typedef boost::shared_ptr<OpaqueDataTuple> OpaqueDataTuplePtr;
265 
275 std::ostream& operator<<(std::ostream& os, const OpaqueDataTuple& tuple);
276 
285 std::istream& operator>>(std::istream& is, OpaqueDataTuple& tuple);
286 
287 } // namespace isc::dhcp
288 } // namespace isc
289 
290 #endif
bool operator!=(const Element &a, const Element &b)
Definition: data.cc:214
Buffer::const_iterator InputIterator
void assign(const char *data, const size_t len)
Assigns data to the tuple.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
void append(InputIterator data, const size_t len)
LengthFieldType getLengthFieldType() const
Returns tuple length data field type.
bool operator==(const Element &a, const Element &b)
Definition: data.cc:210
size_t getTotalLength() const
Returns a total size of the tuple, including length field.
OpaqueDataTupleError(const char *file, size_t line, const char *what)
boost::shared_ptr< OpaqueDataTuple > OpaqueDataTuplePtr
Pointer to the OpaqueDataTuple object.
void append(const char *data, const size_t len)
Appends data to the tuple.
std::vector< uint8_t > Buffer
Defines a type of the data buffer used to hold the opaque data.
The OutputBuffer class is a buffer abstraction for manipulating mutable data.
Definition: buffer.h:294
LengthFieldType
Size of the length field in the tuple.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-lfc.
const Buffer & getData() const
Returns a reference to the buffer holding tuple data.
std::ostream & operator<<(std::ostream &os, const OpaqueDataTuple &tuple)
Inserts the OpaqueDataTuple as a string into stream.
OpaqueDataTuple(LengthFieldType length_field_type, InputIterator begin, InputIterator end)
Constructor.
Represents a single instance of the opaque data preceded by length.
size_t getLength() const
Returns the length of the data in the tuple.
void assign(InputIterator data, const size_t len)
std::istream & operator>>(std::istream &is, OpaqueDataTuple &tuple)
Inserts data carried in the stream into the tuple.
Exception to be thrown when the operation on OpaqueDataTuple object results in an error...