From 2896ea0437c50e1884627b698fd7621acdd669f4 Mon Sep 17 00:00:00 2001 From: Carter Date: Thu, 15 Jun 2023 15:55:02 +0000 Subject: [PATCH] Wifi (FreeBSD): add dirty support --- CMakeLists.txt | 2 +- src/detection/wifi/wifi_bsd.c | 60 +++++++++++++++++++++++++++++ src/detection/wifi/wifi_nosupport.c | 7 ---- 3 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/detection/wifi/wifi_bsd.c delete mode 100644 src/detection/wifi/wifi_nosupport.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d80bfc08..a2295395d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -465,7 +465,7 @@ elseif(BSD) src/detection/uptime/uptime_bsd.c src/detection/users/users_linux.c src/detection/wallpaper/wallpaper_linux.c - src/detection/wifi/wifi_nosupport.c + src/detection/wifi/wifi_bsd.c src/detection/wmtheme/wmtheme_linux.c src/util/platform/FFPlatform_unix.c ) diff --git a/src/detection/wifi/wifi_bsd.c b/src/detection/wifi/wifi_bsd.c new file mode 100644 index 000000000..85c5bb166 --- /dev/null +++ b/src/detection/wifi/wifi_bsd.c @@ -0,0 +1,60 @@ +#include "wifi.h" +#include "common/processing.h" +#include "common/properties.h" + +#include +#include +#include + +const char* ffDetectWifi(FF_MAYBE_UNUSED const FFinstance* instance, FFlist* result) +{ + struct if_nameindex* infs = if_nameindex(); + if(!infs) + return "if_nameindex() failed"; + + for(struct if_nameindex* i = infs; !(i->if_index == 0 && i->if_name == NULL); ++i) + { + if (strncmp(i->if_name, "wlan", strlen("wlan")) != 0) continue; + FF_STRBUF_AUTO_DESTROY ifconfig = ffStrbufCreate(); + if (ffProcessAppendStdOut(&ifconfig, (char* const[]) { + "ifconfig", + i->if_name, + NULL + }) == NULL) + { + FFWifiResult* item = (FFWifiResult*) ffListAdd(result); + ffStrbufInitS(&item->inf.description, i->if_name); + ffStrbufInit(&item->inf.status); + ffStrbufInit(&item->conn.status); + ffStrbufInit(&item->conn.ssid); + ffStrbufInit(&item->conn.macAddress); + ffStrbufInit(&item->conn.protocol); + ffStrbufInit(&item->conn.security); + item->conn.signalQuality = 0.0/0.0; + item->conn.rxRate = 0.0/0.0; + item->conn.txRate = 0.0/0.0; + + ffParsePropLines(ifconfig.chars, "ssid ", &item->conn.ssid); + if (item->conn.ssid.length) ffStrbufSubstrBeforeFirstC(&item->conn.ssid, ' '); + + ffParsePropLines(ifconfig.chars, "ether ", &item->conn.macAddress); + + ffParsePropLines(ifconfig.chars, "media: ", &item->conn.protocol); + if (item->conn.protocol.length) + { + uint32_t index = ffStrbufFirstIndexS(&item->conn.protocol, " mode "); + if (index == item->conn.protocol.length) + ffStrbufClear(&item->conn.protocol); + else + { + ffStrbufSubstrAfter(&item->conn.protocol, index + strlen(" mode ") - 1); + ffStrbufPrependS(&item->conn.protocol, "802."); + } + } + + ffParsePropLines(ifconfig.chars, "status: ", &item->conn.macAddress); + } + } + + return NULL; +} diff --git a/src/detection/wifi/wifi_nosupport.c b/src/detection/wifi/wifi_nosupport.c deleted file mode 100644 index d09116c9b..000000000 --- a/src/detection/wifi/wifi_nosupport.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "wifi.h" - -const char* ffDetectWifi(const FFinstance* instance, FFlist* result) -{ - FF_UNUSED(instance, result); - return "Not supported on this platform"; -}