Use getNetworkIdBySSID() to assign index values

This commit is contained in:
billz 2023-12-02 19:53:16 +00:00
parent 781a292b67
commit e0751d6f90

View file

@ -9,10 +9,10 @@ function knownWifiStations(&$networks)
{ {
// Find currently configured networks // Find currently configured networks
exec(' sudo cat ' . RASPI_WPA_SUPPLICANT_CONFIG, $known_return); exec(' sudo cat ' . RASPI_WPA_SUPPLICANT_CONFIG, $known_return);
$index = 0; //$index = 0;
foreach ($known_return as $line) { foreach ($known_return as $line) {
if (preg_match('/network\s*=/', $line)) { if (preg_match('/network\s*=/', $line)) {
$network = array('visible' => false, 'configured' => true, 'connected' => false, 'index' => $index); $network = array('visible' => false, 'configured' => true, 'connected' => false, 'index' => null);
++$index; ++$index;
} elseif (isset($network) && $network !== null) { } elseif (isset($network) && $network !== null) {
if (preg_match('/^\s*}\s*$/', $line)) { if (preg_match('/^\s*}\s*$/', $line)) {
@ -25,6 +25,8 @@ function knownWifiStations(&$networks)
$ssid = trim($lineArr[1], '"'); $ssid = trim($lineArr[1], '"');
$ssid = str_replace('P"','',$ssid); $ssid = str_replace('P"','',$ssid);
$network['ssid'] = $ssid; $network['ssid'] = $ssid;
$index = getNetworkIdBySSID($ssid);
$network['index'] = $index;
break; break;
case 'psk': case 'psk':
$network['passkey'] = trim($lineArr[1]); $network['passkey'] = trim($lineArr[1]);
@ -246,7 +248,7 @@ function setKnownStationsWPA($networks)
$iface = escapeshellarg($_SESSION['wifi_client_interface']); $iface = escapeshellarg($_SESSION['wifi_client_interface']);
$output = shell_exec("sudo wpa_cli -i $iface list_networks"); $output = shell_exec("sudo wpa_cli -i $iface list_networks");
$lines = explode("\n", $output); $lines = explode("\n", $output);
$header = array_shift($lines); array_shift($lines);
$wpaCliNetworks = []; $wpaCliNetworks = [];
foreach ($lines as $line) { foreach ($lines as $line) {
@ -282,6 +284,28 @@ function setKnownStationsWPA($networks)
} }
} }
/*
* Parses wpa_cli list_networks output and returns the id
* of a corresponding network SSID
*
* @param string $ssid
* @return integer id
*/
function getNetworkIdBySSID($ssid) {
$iface = escapeshellarg($_SESSION['wifi_client_interface']);
$cmd = "sudo wpa_cli -i $iface list_networks";
$output = [];
exec($cmd, $output);
array_shift($output);
foreach ($output as $line) {
$columns = preg_split('/\t/', $line);
if (count($columns) >= 4 && trim($columns[1]) === trim($ssid)) {
return $columns[0]; // return network ID
}
}
return null;
}
function networkExists($ssid, $collection) function networkExists($ssid, $collection)
{ {
foreach ($collection as $network) { foreach ($collection as $network) {