refactor(network): const methods
This commit is contained in:
parent
755d38d4d6
commit
85d60f95c4
|
@ -30,24 +30,24 @@ class Network : public ALabel {
|
||||||
void worker();
|
void worker();
|
||||||
void createInfoSocket();
|
void createInfoSocket();
|
||||||
void createEventSocket();
|
void createEventSocket();
|
||||||
int getExternalInterface(int skip_idx = -1);
|
int getExternalInterface(int skip_idx = -1) const;
|
||||||
void getInterfaceAddress();
|
void getInterfaceAddress();
|
||||||
int netlinkRequest(void*, uint32_t, uint32_t groups = 0);
|
int netlinkRequest(void*, uint32_t, uint32_t groups = 0) const;
|
||||||
int netlinkResponse(void*, uint32_t, uint32_t groups = 0);
|
int netlinkResponse(void*, uint32_t, uint32_t groups = 0) const;
|
||||||
void parseEssid(struct nlattr**);
|
void parseEssid(struct nlattr**);
|
||||||
void parseSignal(struct nlattr**);
|
void parseSignal(struct nlattr**);
|
||||||
void parseFreq(struct nlattr**);
|
void parseFreq(struct nlattr**);
|
||||||
bool associatedOrJoined(struct nlattr**);
|
bool associatedOrJoined(struct nlattr**);
|
||||||
bool checkInterface(struct ifinfomsg *rtif, std::string name);
|
bool checkInterface(struct ifinfomsg* rtif, std::string name);
|
||||||
int getPreferredIface(int skip_idx = -1);
|
int getPreferredIface(int skip_idx = -1) const;
|
||||||
auto getInfo() -> void;
|
auto getInfo() -> void;
|
||||||
void clearIface();
|
void clearIface();
|
||||||
bool wildcardMatch(const std::string& pattern, const std::string& text);
|
bool wildcardMatch(const std::string& pattern, const std::string& text) const;
|
||||||
|
|
||||||
waybar::util::SleeperThread thread_;
|
waybar::util::SleeperThread thread_;
|
||||||
waybar::util::SleeperThread thread_timer_;
|
waybar::util::SleeperThread thread_timer_;
|
||||||
int ifid_;
|
int ifid_;
|
||||||
int last_ext_iface_;
|
mutable int last_ext_iface_;
|
||||||
sa_family_t family_;
|
sa_family_t family_;
|
||||||
struct sockaddr_nl nladdr_ = {0};
|
struct sockaddr_nl nladdr_ = {0};
|
||||||
struct nl_sock* sock_ = nullptr;
|
struct nl_sock* sock_ = nullptr;
|
||||||
|
|
|
@ -101,6 +101,7 @@ waybar::modules::Network::Network(const std::string &id, const Json::Value &conf
|
||||||
createEventSocket();
|
createEventSocket();
|
||||||
auto default_iface = getPreferredIface();
|
auto default_iface = getPreferredIface();
|
||||||
if (default_iface != -1) {
|
if (default_iface != -1) {
|
||||||
|
ifid_ = default_iface;
|
||||||
char ifname[IF_NAMESIZE];
|
char ifname[IF_NAMESIZE];
|
||||||
if_indextoname(default_iface, ifname);
|
if_indextoname(default_iface, ifname);
|
||||||
ifname_ = ifname;
|
ifname_ = ifname;
|
||||||
|
@ -339,7 +340,7 @@ auto waybar::modules::Network::update() -> void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Based on https://gist.github.com/Yawning/c70d804d4b8ae78cc698
|
// Based on https://gist.github.com/Yawning/c70d804d4b8ae78cc698
|
||||||
int waybar::modules::Network::getExternalInterface(int skip_idx) {
|
int waybar::modules::Network::getExternalInterface(int skip_idx) const {
|
||||||
static const uint32_t route_buffer_size = 8192;
|
static const uint32_t route_buffer_size = 8192;
|
||||||
struct nlmsghdr * hdr = nullptr;
|
struct nlmsghdr * hdr = nullptr;
|
||||||
struct rtmsg * rt = nullptr;
|
struct rtmsg * rt = nullptr;
|
||||||
|
@ -497,7 +498,7 @@ void waybar::modules::Network::getInterfaceAddress() {
|
||||||
freeifaddrs(ifaddr);
|
freeifaddrs(ifaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
int waybar::modules::Network::netlinkRequest(void *req, uint32_t reqlen, uint32_t groups) {
|
int waybar::modules::Network::netlinkRequest(void *req, uint32_t reqlen, uint32_t groups) const {
|
||||||
struct sockaddr_nl sa = {};
|
struct sockaddr_nl sa = {};
|
||||||
sa.nl_family = AF_NETLINK;
|
sa.nl_family = AF_NETLINK;
|
||||||
sa.nl_groups = groups;
|
sa.nl_groups = groups;
|
||||||
|
@ -511,7 +512,7 @@ int waybar::modules::Network::netlinkRequest(void *req, uint32_t reqlen, uint32_
|
||||||
return sendmsg(nl_socket_get_fd(ev_sock_), &msg, 0);
|
return sendmsg(nl_socket_get_fd(ev_sock_), &msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int waybar::modules::Network::netlinkResponse(void *resp, uint32_t resplen, uint32_t groups) {
|
int waybar::modules::Network::netlinkResponse(void *resp, uint32_t resplen, uint32_t groups) const {
|
||||||
struct sockaddr_nl sa = {};
|
struct sockaddr_nl sa = {};
|
||||||
sa.nl_family = AF_NETLINK;
|
sa.nl_family = AF_NETLINK;
|
||||||
sa.nl_groups = groups;
|
sa.nl_groups = groups;
|
||||||
|
@ -542,12 +543,12 @@ bool waybar::modules::Network::checkInterface(struct ifinfomsg *rtif, std::strin
|
||||||
return external_iface == rtif->ifi_index;
|
return external_iface == rtif->ifi_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
int waybar::modules::Network::getPreferredIface(int skip_idx) {
|
int waybar::modules::Network::getPreferredIface(int skip_idx) const {
|
||||||
|
int ifid = -1;
|
||||||
if (config_["interface"].isString()) {
|
if (config_["interface"].isString()) {
|
||||||
ifid_ = if_nametoindex(config_["interface"].asCString());
|
ifid = if_nametoindex(config_["interface"].asCString());
|
||||||
if (ifid_ > 0) {
|
if (ifid > 0) {
|
||||||
ifname_ = config_["interface"].asString();
|
return ifid;
|
||||||
return ifid_;
|
|
||||||
} else {
|
} else {
|
||||||
// Try with wildcard
|
// Try with wildcard
|
||||||
struct ifaddrs *ifaddr, *ifa;
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
@ -556,24 +557,21 @@ int waybar::modules::Network::getPreferredIface(int skip_idx) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ifa = ifaddr;
|
ifa = ifaddr;
|
||||||
ifid_ = -1;
|
ifid = -1;
|
||||||
while (ifa != nullptr) {
|
while (ifa != nullptr) {
|
||||||
if (wildcardMatch(config_["interface"].asString(), ifa->ifa_name)) {
|
if (wildcardMatch(config_["interface"].asString(), ifa->ifa_name)) {
|
||||||
ifid_ = if_nametoindex(ifa->ifa_name);
|
ifid = if_nametoindex(ifa->ifa_name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ifa = ifa->ifa_next;
|
ifa = ifa->ifa_next;
|
||||||
}
|
}
|
||||||
freeifaddrs(ifaddr);
|
freeifaddrs(ifaddr);
|
||||||
return ifid_;
|
return ifid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ifid_ = getExternalInterface(skip_idx);
|
ifid = getExternalInterface(skip_idx);
|
||||||
if (ifid_ > 0) {
|
if (ifid > 0) {
|
||||||
char ifname[IF_NAMESIZE];
|
return ifid;
|
||||||
if_indextoname(ifid_, ifname);
|
|
||||||
ifname_ = ifname;
|
|
||||||
return ifid_;
|
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -636,9 +634,14 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
|
||||||
net->dp.emit();
|
net->dp.emit();
|
||||||
} else if (rtif->ifi_index == net->ifid_) {
|
} else if (rtif->ifi_index == net->ifid_) {
|
||||||
net->clearIface();
|
net->clearIface();
|
||||||
|
net->ifid_ = -1;
|
||||||
// Check for a new interface and get info
|
// Check for a new interface and get info
|
||||||
auto new_iface = net->getPreferredIface(rtif->ifi_index);
|
auto new_iface = net->getPreferredIface(rtif->ifi_index);
|
||||||
if (new_iface != -1) {
|
if (new_iface != -1) {
|
||||||
|
net->ifid_ = new_iface;
|
||||||
|
char ifname[IF_NAMESIZE];
|
||||||
|
if_indextoname(new_iface, ifname);
|
||||||
|
net->ifname_ = ifname;
|
||||||
net->getInterfaceAddress();
|
net->getInterfaceAddress();
|
||||||
net->thread_timer_.wake_up();
|
net->thread_timer_.wake_up();
|
||||||
} else {
|
} else {
|
||||||
|
@ -758,7 +761,8 @@ auto waybar::modules::Network::getInfo() -> void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://gist.github.com/rressi/92af77630faf055934c723ce93ae2495
|
// https://gist.github.com/rressi/92af77630faf055934c723ce93ae2495
|
||||||
bool waybar::modules::Network::wildcardMatch(const std::string &pattern, const std::string &text) {
|
bool waybar::modules::Network::wildcardMatch(const std::string &pattern,
|
||||||
|
const std::string &text) const {
|
||||||
auto P = int(pattern.size());
|
auto P = int(pattern.size());
|
||||||
auto T = int(text.size());
|
auto T = int(text.size());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue