1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Added method in TCP and IP that emplaces an option.

This commit is contained in:
Matias Fontanini
2014-06-01 12:55:36 -03:00
parent 356ea2a68a
commit 201ea885a1
3 changed files with 36 additions and 0 deletions

View File

@@ -426,6 +426,20 @@ namespace Tins {
internal_add_option(opt);
_ip_options.push_back(std::move(opt));
}
/**
* \brief Adds an IP option.
*
* The option is constructed from the provided parameters.
*
* \param args The arguments to be used in the option's
* constructor.
*/
template<typename... Args>
void add_option(Args&&... args) {
_ip_options.emplace_back(std::forward<Args>(args)...);
internal_add_option(_ip_options.back());
}
#endif
/**

View File

@@ -409,6 +409,20 @@ namespace Tins {
internal_add_option(opt);
_options.push_back(std::move(opt));
}
/**
* \brief Adds a TCP option using the provided arguments.
*
* The option is constructed from the provided parameters.
*
* \param args The arguments to be used in the option's
* constructor.
*/
template<typename... Args>
void add_option(Args&&... args) {
_options.emplace_back(std::forward<Args>(args)...);
internal_add_option(_options.back());
}
#endif
/**

View File

@@ -67,7 +67,11 @@ TCP::TCP(const uint8_t *buffer, uint32_t total_sz)
while(buffer < header_end) {
if(*buffer <= NOP) {
#if TINS_IS_CXX11
add_option((OptionTypes)*buffer, 0);
#else
add_option(option((OptionTypes)*buffer, 0));
#endif // TINS_IS_CXX11
++buffer;
}
else {
@@ -77,7 +81,11 @@ TCP::TCP(const uint8_t *buffer, uint32_t total_sz)
const uint8_t *data_start = buffer + 2;
if(data_start + len > header_end)
throw malformed_packet();
#if TINS_IS_CXX11
add_option((OptionTypes)*buffer, data_start, data_start + len);
#else
add_option(option((OptionTypes)*buffer, data_start, data_start + len));
#endif // TINS_IS_CXX11
buffer = data_start + len;
}
}