1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-30 13:34:27 +01:00

Several classes now use PDUOption::length_field instead of data_size.

This commit is contained in:
Matias Fontanini
2013-04-08 11:58:12 -03:00
parent f7f5a9bc9a
commit 20054e6c73
14 changed files with 70 additions and 83 deletions

View File

@@ -46,79 +46,7 @@ public:
/**
* Represents a DHCPv6 option.
*/
class dhcpv6_option {
public:
typedef std::vector<uint8_t> container_type;
typedef container_type::value_type data_type;
typedef uint16_t option_type;
/**
* \brief Constructs a PDUOption.
* \param opt The option type.
* \param length The option's data length.
* \param data The option's data(if any).
*/
dhcpv6_option(option_type opt = 0, size_t length = 0, const data_type *data = 0)
: option_(opt), option_size_(length) {
if(data)
value_.insert(value_.end(), data, data + length);
}
/**
* \brief Constructs a PDUOption from iterators, which
* indicate the data to be stored in it.
*
* \param opt The option type.
* \param start The beginning of the option data.
* \param end The end of the option data.
*/
template<typename ForwardIterator>
dhcpv6_option(option_type opt, ForwardIterator start, ForwardIterator end)
: option_(opt), option_size_(std::distance(start, end))
{
value_.insert(value_.end(), start, end);
}
/**
* Retrieves this option's type.
* \return uint8_t containing this option's size.
*/
uint16_t option() const {
return option_;
}
/**
* Sets this option's type
* \param opt The option type to be set.
*/
void option(uint16_t opt) {
option_ = opt;
}
/**
* Retrieves this option's data.
*
* If this method is called when data_size() == 0,
* dereferencing the returned pointer will result in undefined
* behaviour.
*
* \return const data_type& containing this option's value.
*/
const data_type *data_ptr() const {
return &*value_.begin();
}
/**
* Retrieves the length of this option's data.
*/
uint16_t data_size() const {
return option_size_;
}
private:
option_type option_;
uint16_t option_size_;
container_type value_;
};
typedef PDUOption<uint16_t> dhcpv6_option;
/**
* The message types.

View File

@@ -153,7 +153,12 @@ public:
/**
* \brief Retrieves the data length field.
*
* This may be different to the actual size of the data.
* This may be different to the actual size of the data. Note that
* in some protocols, such as TCP, the size of the length and the
* identifier fields is added to this field before serializing.
* Therefore, if on one of such protocols, an option's length_field
* returns X, then the actual length included in the serialized
* option will be X + C, where C is the size of those fields.
*
* \sa data_size.
*/