From 8bb837eda8d1a1612aedfd0b483ceec5b7c34ea2 Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sun, 14 Jun 2015 10:41:07 -0700 Subject: [PATCH] Use one flags field for all flags on SnifferConfiguration. --- include/tins/sniffer.h | 12 ++++++++---- src/sniffer.cpp | 26 +++++++++++++------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/include/tins/sniffer.h b/include/tins/sniffer.h index a071840..28ef428 100644 --- a/include/tins/sniffer.h +++ b/include/tins/sniffer.h @@ -560,19 +560,23 @@ namespace Tins { friend class Sniffer; friend class FileSniffer; + enum Flags { + BUFFER_SIZE = 1, + PROMISCUOUS = 2, + RFMON = 4, + PACKET_FILTER = 8 + }; + void configure_sniffer_pre_activation(Sniffer& sniffer) const; void configure_sniffer_pre_activation(FileSniffer& sniffer) const; void configure_sniffer_post_activation(Sniffer& sniffer) const; + uint32_t _flags; unsigned _snap_len; - bool _has_buffer_size; unsigned _buffer_size; - bool _has_promisc; bool _promisc; - bool _has_rfmon; bool _rfmon; - bool _has_filter; std::string _filter; unsigned _timeout; }; diff --git a/src/sniffer.cpp b/src/sniffer.cpp index cbfdb8b..c4f158e 100644 --- a/src/sniffer.cpp +++ b/src/sniffer.cpp @@ -390,11 +390,11 @@ const unsigned SnifferConfiguration::DEFAULT_SNAP_LEN = 65535; const unsigned SnifferConfiguration::DEFAULT_TIMEOUT = 1000; SnifferConfiguration::SnifferConfiguration() : + _flags(0), _snap_len(DEFAULT_SNAP_LEN), - _has_buffer_size(false), _buffer_size(0), - _has_promisc(false), _promisc(false), - _has_rfmon(false), _rfmon(false), - _has_filter(false), + _buffer_size(0), + _promisc(false), + _rfmon(false), _timeout(DEFAULT_TIMEOUT) { @@ -404,20 +404,20 @@ void SnifferConfiguration::configure_sniffer_pre_activation(Sniffer& sniffer) co { sniffer.set_snap_len(_snap_len); sniffer.set_timeout(_timeout); - if (_has_buffer_size) { + if ((_flags & BUFFER_SIZE) != 0) { sniffer.set_buffer_size(_buffer_size); } - if (_has_promisc) { + if ((_flags & PROMISCUOUS) != 0) { sniffer.set_promisc_mode(_promisc); } - if (_has_rfmon) { + if ((_flags & RFMON) != 0) { sniffer.set_rfmon(_rfmon); } } void SnifferConfiguration::configure_sniffer_pre_activation(FileSniffer& sniffer) const { - if (_has_filter) { + if ((_flags & PACKET_FILTER) != 0) { if (!sniffer.set_filter(_filter)) { throw std::runtime_error("Could not set the filter!"); } @@ -426,7 +426,7 @@ void SnifferConfiguration::configure_sniffer_pre_activation(FileSniffer& sniffer void SnifferConfiguration::configure_sniffer_post_activation(Sniffer& sniffer) const { - if (_has_filter) { + if ((_flags & PACKET_FILTER) != 0) { if (!sniffer.set_filter(_filter)) { throw std::runtime_error("Could not set the filter! "); } @@ -440,25 +440,25 @@ void SnifferConfiguration::set_snap_len(unsigned snap_len) void SnifferConfiguration::set_buffer_size(unsigned buffer_size) { - _has_buffer_size = true; + _flags |= BUFFER_SIZE; _buffer_size = buffer_size; } void SnifferConfiguration::set_promisc_mode(bool enabled) { - _has_promisc = true; + _flags |= PROMISCUOUS; _promisc = enabled; } void SnifferConfiguration::set_filter(const std::string& filter) { - _has_filter = true; + _flags |= PACKET_FILTER; _filter = filter; } void SnifferConfiguration::set_rfmon(bool enabled) { - _has_rfmon = true; + _flags |= RFMON; _rfmon = enabled; }