Index: sources/view/settings/VNetworkModel.cpp =================================================================== diff -u -rf68b226e67eb500758ee94fe015df48931240013 -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 --- sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision f68b226e67eb500758ee94fe015df48931240013) +++ sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) @@ -1,13 +1,13 @@ /*! * - * Copyright (c) 2021-2022 Diality Inc. - All Rights Reserved. + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file VNetworkModel.cpp * \author (last) Behrouz NematiPour - * \date (last) 30-Jul-2021 + * \date (last) 08-Dec-2023 * \author (original) Behrouz NematiPour * \date (original) 11-May-2021 * @@ -26,6 +26,7 @@ VNetworkModel::VNetworkModel(QAbstractListModel *parent) : QAbstractListModel(parent) { startTimer(_interval); initConnections(); + _devWlan = WifiInterface::iface(); } /*! @@ -91,8 +92,6 @@ connect(this, SIGNAL(didRequestSetDNS (const QString &)), &_WifiInterface, SLOT( doRequestSetDNS (const QString &))); - - } /*! @@ -168,6 +167,14 @@ return network.status(); case SignalLevelRole: return network.signalLevel(); + case NetworkSupportedRole: { + bool isSecurityTypeSupported = (!network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WEP) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP_AES) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::UNSUPPORTED)); + bool isPasswordProtected = network.requirePassword(); + return isSecurityTypeSupported && isPasswordProtected; + } } return QVariant(); @@ -185,6 +192,7 @@ roles[SecurityTypesRole] = "securityTypes"; roles[StatusRole] = "status"; roles[SignalLevelRole] = "signalLevel"; + roles[NetworkSupportedRole] = "isNetworkSupported"; return roles; } @@ -364,9 +372,14 @@ emit didRequestSetDNS(vDNS.trimmed()); } +/*! + * \brief VNetworkModel::timerEvent + * \details The overloaded parent QObject timer event handler function + */ void VNetworkModel::timerEvent(QTimerEvent *) { checkEthernet(); + checkWireless(); } /*! @@ -383,23 +396,54 @@ macAddress(""); } +/*! + * \brief VNetworkModel::checkEthernet + * \details check for Ethernet using VNetworkModel::checkDevNet + */ void VNetworkModel::checkEthernet() { - const QNetworkInterface eth0 = QNetworkInterface::interfaceFromName("eth0"); - _ethernetIP = tr("No Ethernet"); - if ( eth0.isValid() ) { - auto addresses = eth0.allAddresses(); - for ( const auto & address : addresses ) { - if ( !address.isLoopback() && !address.isBroadcast() && address.protocol() == QAbstractSocket::IPv4Protocol ) { - _ethernetIP = address.toString(); - break; // stop on first item found, our HW configuration only have one Ethernet. - } + const QNetworkInterface dev = QNetworkInterface::interfaceFromName(_devEth); + QString devIP = tr("No Ethernet"); + + // The QNetworkInterface object can be valid, but not running+up. + // Check the object's flags to determine running+up state. + bool eth0IsUp = dev.flags().testFlag(QNetworkInterface::IsUp ); + bool eth0IsRunning = dev.flags().testFlag(QNetworkInterface::IsRunning); + + if ( dev.isValid() && (eth0IsUp && eth0IsRunning)) { + auto addresses = dev.addressEntries(); + if ( addresses.count() ) { + devIP = addresses.first().ip().toString(); } } + _ethernetIP = devIP; emit ethernetIPChanged( _ethernetIP ); } /*! + * \brief VNetworkModel::checkWireless + * \details check for Ethernet using VNetworkModel::checkDevNet + */ +void VNetworkModel::checkWireless() +{ + const QNetworkInterface dev = QNetworkInterface::interfaceFromName(_devWlan); + QString devIP = tr("No WiFi"); + if ( dev.isValid() ) { + auto addresses = dev.addressEntries(); + if ( addresses.count() ) { + if ( dev.flags().testFlag(QNetworkInterface::IsUp) && dev.flags().testFlag(QNetworkInterface::IsRunning) ) { + devIP = addresses.first().ip().toString(); + } + else { + devIP = tr("WiFi Disconnect"); + } + } + } + _wirelessIP = devIP; + emit wirelessIPChanged( _wirelessIP ); +} + +/*! * \brief VNetworkModel::onSetIPAddressSuccess * Called when the IP address has been set */