From 2768041d7cdd2e91b7c00c7fd0c49e928786d702 Mon Sep 17 00:00:00 2001 From: Michael Carlberg Date: Sat, 29 Oct 2016 07:19:32 +0200 Subject: [PATCH] fix(network): Connection state Closes jaagr/lemonbuddy#118 --- include/adapters/net.hpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/include/adapters/net.hpp b/include/adapters/net.hpp index ebe30dcd..a7738ec9 100644 --- a/include/adapters/net.hpp +++ b/include/adapters/net.hpp @@ -174,16 +174,8 @@ namespace net { /** * Test if the network interface is in a valid state */ - bool test_interface(struct ifreq& request) const { - if ((ioctl(m_socketfd, SIOCGIFFLAGS, &request)) == -1) - return false; - if ((request.ifr_flags & IFF_UP) == 0) - return false; - if ((request.ifr_flags & IFF_RUNNING) == 0) - return false; - + bool test_interface() const { auto operstate = file_util::get_contents("/sys/class/net/" + m_interface + "/operstate"); - return operstate.compare(0, 2, "up") == 0; } @@ -246,6 +238,9 @@ namespace net { * Check current connection state */ bool connected() const override { + if (!network::test_interface()) + return false; + struct ifreq request; struct ethtool_value ethernet_data; @@ -253,9 +248,6 @@ namespace net { ethernet_data.cmd = ETHTOOL_GLINK; request.ifr_data = reinterpret_cast(ðernet_data); - if (!network::test_interface(request)) - return false; - if (ioctl(m_socketfd, SIOCETHTOOL, &request) != -1) return ethernet_data.data != 0; @@ -315,10 +307,13 @@ namespace net { * Check current connection state */ bool connected() const override { + if (!network::test_interface()) + return false; + struct ifreq request; strncpy(request.ifr_name, m_interface.c_str(), IFNAMSIZ - 1); - if (!network::test_interface(request)) + if ((ioctl(m_socketfd, SIOCGIFFLAGS, &request)) == -1) return false; if (m_essid.empty()) return false;