Wifi (macOS): add (B)SSID detection back for Tohoe 26.0

Fixes #1874
This commit is contained in:
李通洲
2025-09-22 09:35:59 +08:00
parent de9229697a
commit e95393750b
+9 -51
View File
@@ -9,48 +9,9 @@ static inline double rssiToSignalQuality(int rssi)
return (double) (rssi >= -50 ? 100 : rssi <= -100 ? 0 : (rssi + 100) * 2);
}
static bool queryIpconfig(const char* ifName, FFstrbuf* result)
{
if (@available(macOS 15.6, *))
{
// ipconfig reports <redacted> too
return false;
}
return ffProcessAppendStdOut(result, (char* const[]) {
"/usr/sbin/ipconfig",
"getsummary",
(char* const) ifName,
NULL
}) == NULL;
}
static bool getWifiInfoByIpconfig(FFstrbuf* ipconfig, const char* prefix, FFstrbuf* result)
{
// `ipconfig getsummary <interface>` returns a string like this:
// <dictionary> {
// BSSID : <redacted>
// IPv4 : <array> {
// ...
// }
// IPv6 : <array> {
// ...
// }
// InterfaceType : WiFi
// LinkStatusActive : TRUE
// NetworkID : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
// SSID : XXXXXX
// Security : WPA2_PSK
// }
const char* start = memmem(ipconfig->chars, ipconfig->length, prefix, strlen(prefix));
if (!start) return false;
start += strlen(prefix);
const char* end = strchr(start, '\n');
if (!end) return false;
ffStrbufSetNS(result, (uint32_t) (end - start), start);
return true;
}
@interface CWNetworkProfile()
@property(readonly, retain, nullable) NSArray<NSDictionary *> *bssidList;
@end
const char* ffDetectWifi(FFlist* result)
{
@@ -85,17 +46,19 @@ const char* ffDetectWifi(FFlist* result)
FF_STRBUF_AUTO_DESTROY ipconfig = ffStrbufCreate();
CWNetworkProfile* networkProfile = inf.configuration.networkProfiles.firstObject;
if (inf.ssid) // https://developer.apple.com/forums/thread/732431
ffStrbufAppendS(&item->conn.ssid, inf.ssid.UTF8String);
else if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig)))
getWifiInfoByIpconfig(&ipconfig, "\n SSID : ", &item->conn.ssid);
else if (networkProfile.ssid)
ffStrbufSetStatic(&item->conn.ssid, inf.configuration.networkProfiles.firstObject.ssid.UTF8String);
else
ffStrbufSetStatic(&item->conn.ssid, "<redacted>"); // https://developer.apple.com/forums/thread/732431
if (inf.bssid)
ffStrbufAppendS(&item->conn.bssid, inf.bssid.UTF8String);
else if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig)))
getWifiInfoByIpconfig(&ipconfig, "\n BSSID : ", &item->conn.bssid);
else if (networkProfile.bssidList)
ffStrbufSetStatic(&item->conn.bssid, [networkProfile.bssidList.firstObject[@"BSSID"] UTF8String]);
else
ffStrbufSetStatic(&item->conn.bssid, "<redacted>");
@@ -183,11 +146,6 @@ const char* ffDetectWifi(FFlist* result)
case 15 /*kCWSecurityOWETransition*/:
ffStrbufSetStatic(&item->conn.security, "OWE Transition");
break;
case kCWSecurityUnknown:
// Sonoma?
if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig)))
getWifiInfoByIpconfig(&ipconfig, "\n Security : ", &item->conn.security);
break;
default:
ffStrbufAppendF(&item->conn.security, "Unknown (%ld)", inf.security);
break;