Merge PR #1101: Add wireless capabilities and disable wireless AP setting if not capable
This commit is contained in:
commit
13e15160ee
@ -275,6 +275,18 @@ void NetworkManager::getDevicesResponse(int /*commandId*/, const QVariantMap &pa
|
|||||||
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
|
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
|
||||||
device->setWirelessMode(static_cast<WirelessNetworkDevice::WirelessMode>(modeEnum.keyToValue(deviceMap.value("mode").toString().toUtf8())));
|
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();
|
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
||||||
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
||||||
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
||||||
|
|||||||
@ -51,8 +51,8 @@ class NetworkManager : public QObject
|
|||||||
Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged)
|
Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged)
|
||||||
Q_PROPERTY(bool wirelessNetworkingEnabled READ wirelessNetworkingEnabled NOTIFY wirelessNetworkingEnabledChanged)
|
Q_PROPERTY(bool wirelessNetworkingEnabled READ wirelessNetworkingEnabled NOTIFY wirelessNetworkingEnabledChanged)
|
||||||
|
|
||||||
Q_PROPERTY(WiredNetworkDevices* wiredNetworkDevices READ wiredNetworkDevices CONSTANT)
|
Q_PROPERTY(WiredNetworkDevices *wiredNetworkDevices READ wiredNetworkDevices CONSTANT)
|
||||||
Q_PROPERTY(WirelessNetworkDevices* wirelessNetworkDevices READ wirelessNetworkDevices CONSTANT)
|
Q_PROPERTY(WirelessNetworkDevices *wirelessNetworkDevices READ wirelessNetworkDevices CONSTANT)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum NetworkManagerState {
|
enum NetworkManagerState {
|
||||||
@ -80,8 +80,8 @@ public:
|
|||||||
bool networkingEnabled() const;
|
bool networkingEnabled() const;
|
||||||
bool wirelessNetworkingEnabled() const;
|
bool wirelessNetworkingEnabled() const;
|
||||||
|
|
||||||
WiredNetworkDevices* wiredNetworkDevices() const;
|
WiredNetworkDevices *wiredNetworkDevices() const;
|
||||||
WirelessNetworkDevices* wirelessNetworkDevices() const;
|
WirelessNetworkDevices *wirelessNetworkDevices() const;
|
||||||
|
|
||||||
Q_INVOKABLE int enableNetworking(bool enable);
|
Q_INVOKABLE int enableNetworking(bool enable);
|
||||||
Q_INVOKABLE int enableWirelessNetworking(bool enable);
|
Q_INVOKABLE int enableWirelessNetworking(bool enable);
|
||||||
@ -137,8 +137,8 @@ private:
|
|||||||
bool m_networkingEnabled = false;
|
bool m_networkingEnabled = false;
|
||||||
bool m_wirelessNetworkingEnabled = false;
|
bool m_wirelessNetworkingEnabled = false;
|
||||||
|
|
||||||
WiredNetworkDevices* m_wiredNetworkDevices = nullptr;
|
WiredNetworkDevices *m_wiredNetworkDevices = nullptr;
|
||||||
WirelessNetworkDevices* m_wirelessNetworkDevices = nullptr;
|
WirelessNetworkDevices *m_wirelessNetworkDevices = nullptr;
|
||||||
|
|
||||||
QHash<int, QString> m_apRequests; // requestId, interface
|
QHash<int, QString> m_apRequests; // requestId, interface
|
||||||
};
|
};
|
||||||
|
|||||||
@ -158,7 +158,7 @@ void UpnpDiscovery::writeDiscoveryPacket()
|
|||||||
void UpnpDiscovery::error(QAbstractSocket::SocketError error)
|
void UpnpDiscovery::error(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
QUdpSocket* socket = static_cast<QUdpSocket*>(sender());
|
QUdpSocket* socket = static_cast<QUdpSocket*>(sender());
|
||||||
qWarning() << "UPnP: Socket error:" << error << socket->errorString();
|
qCDebug(dcUPnP()) << "UPnP: Socket error:" << error << socket->errorString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpnpDiscovery::readData()
|
void UpnpDiscovery::readData()
|
||||||
|
|||||||
@ -129,6 +129,11 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QString &macAddress, const QS
|
|||||||
m_currentAccessPoint = new WirelessAccessPoint(this);
|
m_currentAccessPoint = new WirelessAccessPoint(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WirelessNetworkDevice::WirelessCapabilities WirelessNetworkDevice::wirelessCapabilities() const
|
||||||
|
{
|
||||||
|
return m_wirelessCapabilities;
|
||||||
|
}
|
||||||
|
|
||||||
WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
|
WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
|
||||||
{
|
{
|
||||||
return m_wirelessMode;
|
return m_wirelessMode;
|
||||||
@ -144,6 +149,14 @@ WirelessAccessPoint *WirelessNetworkDevice::currentAccessPoint() const
|
|||||||
return m_currentAccessPoint;
|
return m_currentAccessPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WirelessNetworkDevice::setWirelessCapabilities(WirelessCapabilities wirelessCapabilities)
|
||||||
|
{
|
||||||
|
if (m_wirelessCapabilities != wirelessCapabilities) {
|
||||||
|
m_wirelessCapabilities = wirelessCapabilities;
|
||||||
|
emit wirelessCapabilitiesChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WirelessNetworkDevice::setWirelessMode(WirelessNetworkDevice::WirelessMode wirelessMode)
|
void WirelessNetworkDevice::setWirelessMode(WirelessNetworkDevice::WirelessMode wirelessMode)
|
||||||
{
|
{
|
||||||
if (m_wirelessMode != wirelessMode) {
|
if (m_wirelessMode != wirelessMode) {
|
||||||
|
|||||||
@ -116,6 +116,7 @@ private:
|
|||||||
class WirelessNetworkDevice: public NetworkDevice
|
class WirelessNetworkDevice: public NetworkDevice
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(WirelessCapabilities wirelessCapabilities READ wirelessCapabilities NOTIFY wirelessCapabilitiesChanged)
|
||||||
Q_PROPERTY(WirelessMode wirelessMode READ wirelessMode NOTIFY wirelessModeChanged)
|
Q_PROPERTY(WirelessMode wirelessMode READ wirelessMode NOTIFY wirelessModeChanged)
|
||||||
Q_PROPERTY(WirelessAccessPoints* accessPoints READ accessPoints CONSTANT)
|
Q_PROPERTY(WirelessAccessPoints* accessPoints READ accessPoints CONSTANT)
|
||||||
Q_PROPERTY(WirelessAccessPoint* currentAccessPoint READ currentAccessPoint CONSTANT)
|
Q_PROPERTY(WirelessAccessPoint* currentAccessPoint READ currentAccessPoint CONSTANT)
|
||||||
@ -128,20 +129,44 @@ public:
|
|||||||
WirelessModeAccessPoint = 3
|
WirelessModeAccessPoint = 3
|
||||||
};
|
};
|
||||||
Q_ENUM(WirelessMode)
|
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);
|
explicit WirelessNetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
WirelessCapabilities wirelessCapabilities() const;
|
||||||
WirelessMode wirelessMode() const;
|
WirelessMode wirelessMode() const;
|
||||||
WirelessAccessPoints* accessPoints() const;
|
WirelessAccessPoints* accessPoints() const;
|
||||||
WirelessAccessPoint* currentAccessPoint() const;
|
WirelessAccessPoint* currentAccessPoint() const;
|
||||||
|
|
||||||
|
void setWirelessCapabilities(WirelessCapabilities wirelessCapabilities);
|
||||||
void setWirelessMode(WirelessMode wirelessMode);
|
void setWirelessMode(WirelessMode wirelessMode);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void wirelessCapabilitiesChanged();
|
||||||
void wirelessModeChanged();
|
void wirelessModeChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
WirelessCapabilities m_wirelessCapabilities = WirelessCapabilityNone;
|
||||||
WirelessMode m_wirelessMode = WirelessModeUnknown;
|
WirelessMode m_wirelessMode = WirelessModeUnknown;
|
||||||
WirelessAccessPoints *m_accessPoints = nullptr;
|
WirelessAccessPoints *m_accessPoints = nullptr;
|
||||||
WirelessAccessPoint *m_currentAccessPoint = nullptr;
|
WirelessAccessPoint *m_currentAccessPoint = nullptr;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif // NETWORKDEVICE_H
|
#endif // NETWORKDEVICE_H
|
||||||
|
|||||||
@ -58,6 +58,7 @@ SettingsPageBase {
|
|||||||
if (id === d.pendingCallId) {
|
if (id === d.pendingCallId) {
|
||||||
d.pendingCallId = -1
|
d.pendingCallId = -1
|
||||||
}
|
}
|
||||||
|
|
||||||
var errorMessage;
|
var errorMessage;
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "NetworkManagerErrorNoError":
|
case "NetworkManagerErrorNoError":
|
||||||
@ -86,10 +87,15 @@ SettingsPageBase {
|
|||||||
case "NetworkManagerErrorNetworkManagerNotAvailable":
|
case "NetworkManagerErrorNetworkManagerNotAvailable":
|
||||||
errorMessage = qsTr("The network manager is not available.")
|
errorMessage = qsTr("The network manager is not available.")
|
||||||
break;
|
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":
|
case "NetworkManagerErrorUnknownError":
|
||||||
errorMessage = qsTr("An unexpected error happened.")
|
errorMessage = qsTr("An unexpected error happened.")
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
print("network config reply:", status, errorMessage)
|
print("network config reply:", status, errorMessage)
|
||||||
|
|
||||||
@ -400,8 +406,13 @@ SettingsPageBase {
|
|||||||
|
|
||||||
property WirelessNetworkDevice wirelessNetworkDevice: null
|
property WirelessNetworkDevice wirelessNetworkDevice: null
|
||||||
|
|
||||||
|
property bool apFeatureAvailable: wirelessNetworkDevice &&
|
||||||
|
wirelessNetworkDevice.wirelessCapabilities !== WirelessNetworkDevice.WirelessCapabilityNone &&
|
||||||
|
wirelessNetworkDevice.wirelessCapabilities | WirelessNetworkDevice.WirelessCapabilityAP
|
||||||
|
|
||||||
SettingsPageSectionHeader {
|
SettingsPageSectionHeader {
|
||||||
text: qsTr("Access Point")
|
text: qsTr("Access Point")
|
||||||
|
visible: apFeatureAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField {
|
TextField {
|
||||||
@ -411,6 +422,7 @@ SettingsPageBase {
|
|||||||
Layout.leftMargin: app.margins
|
Layout.leftMargin: app.margins
|
||||||
Layout.rightMargin: app.margins
|
Layout.rightMargin: app.margins
|
||||||
placeholderText: qsTr("SSID")
|
placeholderText: qsTr("SSID")
|
||||||
|
visible: apFeatureAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
PasswordTextField {
|
PasswordTextField {
|
||||||
@ -424,6 +436,7 @@ SettingsPageBase {
|
|||||||
requireNumber: false
|
requireNumber: false
|
||||||
requireSpecialChar: false
|
requireSpecialChar: false
|
||||||
signup: false
|
signup: false
|
||||||
|
visible: apFeatureAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
@ -433,6 +446,7 @@ SettingsPageBase {
|
|||||||
Layout.rightMargin: app.margins
|
Layout.rightMargin: app.margins
|
||||||
text: qsTr("Create Access Point")
|
text: qsTr("Create Access Point")
|
||||||
enabled: ssidTextField.displayText.length > 0 && passwordTextField.isValidPassword
|
enabled: ssidTextField.displayText.length > 0 && passwordTextField.isValidPassword
|
||||||
|
visible: apFeatureAvailable
|
||||||
onClicked: {
|
onClicked: {
|
||||||
d.pendingCallId = networkManager.startAccessPoint(wirelessAccessPointsPage.wirelessNetworkDevice.interface, ssidTextField.text, passwordTextField.password)
|
d.pendingCallId = networkManager.startAccessPoint(wirelessAccessPointsPage.wirelessNetworkDevice.interface, ssidTextField.text, passwordTextField.password)
|
||||||
pageStack.pop(root);
|
pageStack.pop(root);
|
||||||
|
|||||||
Reference in New Issue
Block a user