Wifi (FreeBSD): add dirty support

This commit is contained in:
Carter
2023-06-15 15:55:02 +00:00
parent 7d28409f8d
commit 2896ea0437
3 changed files with 61 additions and 8 deletions
+1 -1
View File
@@ -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
)
+60
View File
@@ -0,0 +1,60 @@
#include "wifi.h"
#include "common/processing.h"
#include "common/properties.h"
#include <net/if.h>
#include <stdio.h>
#include <string.h>
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;
}
-7
View File
@@ -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";
}