Merge PR #1101: Add wireless capabilities and disable wireless AP setting if not capable

pull/1104/head
jenkins 2024-10-24 16:36:07 +02:00
commit 13e15160ee
6 changed files with 72 additions and 8 deletions

View File

@ -275,6 +275,18 @@ void NetworkManager::getDevicesResponse(int /*commandId*/, const QVariantMap &pa
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
device->setWirelessMode(static_cast<WirelessNetworkDevice::WirelessMode>(modeEnum.keyToValue(deviceMap.value("mode").toString().toUtf8())));
// Note: capabilities have been aaded in API 8.2
if (m_engine->jsonRpcClient()->jsonRpcVersion() >= "8.2") {
QMetaEnum capabilityEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessCapability>();
WirelessNetworkDevice::WirelessCapabilities wirelessCapabilities;
foreach (const QVariant &capabilityVariant, deviceMap.value("capabilities").toList()) {
QString capabilityString = capabilityVariant.toString();
wirelessCapabilities.setFlag(static_cast<WirelessNetworkDevice::WirelessCapability>(capabilityEnum.keyToValue(capabilityString.toUtf8())));
}
device->setWirelessCapabilities(wirelessCapabilities);
}
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());

View File

@ -51,8 +51,8 @@ class NetworkManager : public QObject
Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged)
Q_PROPERTY(bool wirelessNetworkingEnabled READ wirelessNetworkingEnabled NOTIFY wirelessNetworkingEnabledChanged)
Q_PROPERTY(WiredNetworkDevices* wiredNetworkDevices READ wiredNetworkDevices CONSTANT)
Q_PROPERTY(WirelessNetworkDevices* wirelessNetworkDevices READ wirelessNetworkDevices CONSTANT)
Q_PROPERTY(WiredNetworkDevices *wiredNetworkDevices READ wiredNetworkDevices CONSTANT)
Q_PROPERTY(WirelessNetworkDevices *wirelessNetworkDevices READ wirelessNetworkDevices CONSTANT)
public:
enum NetworkManagerState {
@ -80,8 +80,8 @@ public:
bool networkingEnabled() const;
bool wirelessNetworkingEnabled() const;
WiredNetworkDevices* wiredNetworkDevices() const;
WirelessNetworkDevices* wirelessNetworkDevices() const;
WiredNetworkDevices *wiredNetworkDevices() const;
WirelessNetworkDevices *wirelessNetworkDevices() const;
Q_INVOKABLE int enableNetworking(bool enable);
Q_INVOKABLE int enableWirelessNetworking(bool enable);
@ -137,8 +137,8 @@ private:
bool m_networkingEnabled = false;
bool m_wirelessNetworkingEnabled = false;
WiredNetworkDevices* m_wiredNetworkDevices = nullptr;
WirelessNetworkDevices* m_wirelessNetworkDevices = nullptr;
WiredNetworkDevices *m_wiredNetworkDevices = nullptr;
WirelessNetworkDevices *m_wirelessNetworkDevices = nullptr;
QHash<int, QString> m_apRequests; // requestId, interface
};

View File

@ -158,7 +158,7 @@ void UpnpDiscovery::writeDiscoveryPacket()
void UpnpDiscovery::error(QAbstractSocket::SocketError error)
{
QUdpSocket* socket = static_cast<QUdpSocket*>(sender());
qWarning() << "UPnP: Socket error:" << error << socket->errorString();
qCDebug(dcUPnP()) << "UPnP: Socket error:" << error << socket->errorString();
}
void UpnpDiscovery::readData()

View File

@ -129,6 +129,11 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QString &macAddress, const QS
m_currentAccessPoint = new WirelessAccessPoint(this);
}
WirelessNetworkDevice::WirelessCapabilities WirelessNetworkDevice::wirelessCapabilities() const
{
return m_wirelessCapabilities;
}
WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
{
return m_wirelessMode;
@ -144,6 +149,14 @@ WirelessAccessPoint *WirelessNetworkDevice::currentAccessPoint() const
return m_currentAccessPoint;
}
void WirelessNetworkDevice::setWirelessCapabilities(WirelessCapabilities wirelessCapabilities)
{
if (m_wirelessCapabilities != wirelessCapabilities) {
m_wirelessCapabilities = wirelessCapabilities;
emit wirelessCapabilitiesChanged();
}
}
void WirelessNetworkDevice::setWirelessMode(WirelessNetworkDevice::WirelessMode wirelessMode)
{
if (m_wirelessMode != wirelessMode) {

View File

@ -116,6 +116,7 @@ private:
class WirelessNetworkDevice: public NetworkDevice
{
Q_OBJECT
Q_PROPERTY(WirelessCapabilities wirelessCapabilities READ wirelessCapabilities NOTIFY wirelessCapabilitiesChanged)
Q_PROPERTY(WirelessMode wirelessMode READ wirelessMode NOTIFY wirelessModeChanged)
Q_PROPERTY(WirelessAccessPoints* accessPoints READ accessPoints CONSTANT)
Q_PROPERTY(WirelessAccessPoint* currentAccessPoint READ currentAccessPoint CONSTANT)
@ -128,20 +129,44 @@ public:
WirelessModeAccessPoint = 3
};
Q_ENUM(WirelessMode)
enum WirelessCapability {
WirelessCapabilityNone = 0x0000,
WirelessCapabilityCipherWEP40 = 0x0001,
WirelessCapabilityCipherWEP104 = 0x0002,
WirelessCapabilityCipherTKIP = 0x0004,
WirelessCapabilityCipherCCMP = 0x0008,
WirelessCapabilityWPA = 0x0010,
WirelessCapabilityRSN = 0x0020,
WirelessCapabilityAP = 0x0040,
WirelessCapabilityAdHoc = 0x0080,
WirelessCapabilityFreqValid = 0x0100,
WirelessCapability2Ghz = 0x0200,
WirelessCapability5Ghz = 0x0400,
};
Q_ENUM(WirelessCapability)
Q_DECLARE_FLAGS(WirelessCapabilities, WirelessCapability)
Q_FLAG(WirelessCapabilities)
explicit WirelessNetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
WirelessCapabilities wirelessCapabilities() const;
WirelessMode wirelessMode() const;
WirelessAccessPoints* accessPoints() const;
WirelessAccessPoint* currentAccessPoint() const;
void setWirelessCapabilities(WirelessCapabilities wirelessCapabilities);
void setWirelessMode(WirelessMode wirelessMode);
signals:
void wirelessCapabilitiesChanged();
void wirelessModeChanged();
private:
WirelessCapabilities m_wirelessCapabilities = WirelessCapabilityNone;
WirelessMode m_wirelessMode = WirelessModeUnknown;
WirelessAccessPoints *m_accessPoints = nullptr;
WirelessAccessPoint *m_currentAccessPoint = nullptr;
};
#endif // NETWORKDEVICE_H

View File

@ -58,6 +58,7 @@ SettingsPageBase {
if (id === d.pendingCallId) {
d.pendingCallId = -1
}
var errorMessage;
switch (status) {
case "NetworkManagerErrorNoError":
@ -86,10 +87,15 @@ SettingsPageBase {
case "NetworkManagerErrorNetworkManagerNotAvailable":
errorMessage = qsTr("The network manager is not available.")
break;
case "NetworkManagerErrorInvalidConfiguration":
errorMessage = qsTr("The network configuration is not valid.")
break;
case "NetworkManagerErrorUnsupportedFeature":
errorMessage = qsTr("This feature is not supported on this platform.")
break;
case "NetworkManagerErrorUnknownError":
errorMessage = qsTr("An unexpected error happened.")
break;
}
print("network config reply:", status, errorMessage)
@ -400,8 +406,13 @@ SettingsPageBase {
property WirelessNetworkDevice wirelessNetworkDevice: null
property bool apFeatureAvailable: wirelessNetworkDevice &&
wirelessNetworkDevice.wirelessCapabilities !== WirelessNetworkDevice.WirelessCapabilityNone &&
wirelessNetworkDevice.wirelessCapabilities | WirelessNetworkDevice.WirelessCapabilityAP
SettingsPageSectionHeader {
text: qsTr("Access Point")
visible: apFeatureAvailable
}
TextField {
@ -411,6 +422,7 @@ SettingsPageBase {
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
placeholderText: qsTr("SSID")
visible: apFeatureAvailable
}
PasswordTextField {
@ -424,6 +436,7 @@ SettingsPageBase {
requireNumber: false
requireSpecialChar: false
signup: false
visible: apFeatureAvailable
}
Button {
@ -433,6 +446,7 @@ SettingsPageBase {
Layout.rightMargin: app.margins
text: qsTr("Create Access Point")
enabled: ssidTextField.displayText.length > 0 && passwordTextField.isValidPassword
visible: apFeatureAvailable
onClicked: {
d.pendingCallId = networkManager.startAccessPoint(wirelessAccessPointsPage.wirelessNetworkDevice.interface, ssidTextField.text, passwordTextField.password)
pageStack.pop(root);