diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-09-11 09:00:52 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-09-11 09:01:32 +0200 |
commit | 857c56a495d8dfa3b65f0997123f5b517e193ded (patch) | |
tree | c7a4b2a3d1af1cd8b1e6915fcf996c4c9dbf0374 | |
parent | df6c67d25a85f9f12923f54e05695ad333a0835b (diff) |
Let interface_reader always read all interfaces and filter when fetching the data from it
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/interface_reader.cpp | 32 | ||||
-rw-r--r-- | src/interface_reader.hpp | 9 |
2 files changed, 17 insertions, 24 deletions
diff --git a/src/interface_reader.cpp b/src/interface_reader.cpp index cb80053..a82683b 100644 --- a/src/interface_reader.cpp +++ b/src/interface_reader.cpp @@ -21,7 +21,7 @@ #include <sys/types.h> #include <unistd.h> -interface_reader::interface_reader(std::vector<std::string> interfaces) : interface_names(interfaces), interfaces() { +interface_reader::interface_reader() : interfaces() { } std::optional<interface_read_error> @@ -45,12 +45,6 @@ interface_reader::read_interfaces(void) std::string interface_name = ifa->ifa_name; - // If we do not have any interface names to filter for, we use them all. - // If we have any, we filter - if (this->do_filter() && !this->interface_whitelisted(interface_name)) { - continue; - } - std::optional<std::string> address; int family = ifa->ifa_addr->sa_family; if (family == AF_INET || family == AF_INET6) { @@ -76,21 +70,23 @@ interface_reader::read_interfaces(void) return {}; } -std::vector<interface> const& -interface_reader::get_interfaces(void) const +std::vector<interface> +interface_reader::get_interface_by_name(std::string const& name) const { - return this->interfaces; -} + // TODO: optimize. We don't need to copy objects here, returning a list of + // const references is way better + std::vector<interface> interfaces; -bool -interface_reader::do_filter(void) const -{ - return !this->interface_names.empty(); + std::copy_if(this->interfaces.begin(), this->interfaces.end(), std::back_inserter(interfaces), + [&](interface const& inf){ return inf.get_name() == name; }); + + return interfaces; } -bool -interface_reader::interface_whitelisted(std::string const& if_name) const +std::vector<interface> const& +interface_reader::get_interfaces(void) const { - return std::find(this->interface_names.begin(), this->interface_names.end(), if_name) != this->interface_names.end(); + return this->interfaces; } + diff --git a/src/interface_reader.hpp b/src/interface_reader.hpp index f38a12f..8d3515f 100644 --- a/src/interface_reader.hpp +++ b/src/interface_reader.hpp @@ -8,20 +8,17 @@ class interface_reader { public: - interface_reader(std::vector<std::string> interfaces); + interface_reader(); std::optional<interface_read_error> read_interfaces(void); std::vector<interface> const& get_interfaces(void) const; - private: - std::vector<std::string> interface_names; + std::vector<interface> get_interface_by_name(std::string const& name) const; + private: std::vector<interface> interfaces; - bool do_filter(void) const; - bool interface_whitelisted(std::string const& if_name) const; - }; #endif // GETIF_INTERFACE_READER_H |