From a3352f4787e4acd8c752ad59245f49723d249ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 5 Oct 2016 18:53:31 +0200 Subject: [PATCH] improve network manager api --- server/guhcore.cpp | 11 +- server/jsonrpc/jsontypes.h | 2 +- server/jsonrpc/networkmanagerhandler.cpp | 105 +++++++--- server/jsonrpc/networkmanagerhandler.h | 14 +- server/networkmanager/networkdevice.cpp | 31 +-- server/networkmanager/networkdevice.h | 175 ++++++++--------- server/networkmanager/networkmanager.cpp | 42 ++-- server/networkmanager/networkmanager.h | 7 +- .../networkmanager/wirelessnetworkmanager.cpp | 34 ++-- .../networkmanager/wirelessnetworkmanager.h | 182 +++++++++--------- 10 files changed, 343 insertions(+), 260 deletions(-) diff --git a/server/guhcore.cpp b/server/guhcore.cpp index 5a14d112..b96f65f7 100644 --- a/server/guhcore.cpp +++ b/server/guhcore.cpp @@ -327,8 +327,8 @@ void GuhCore::executeRuleActions(const QList ruleActions) qCWarning(dcRuleEngine) << "Error executing action:" << status; } -// if (status != DeviceManager::DeviceErrorAsync) -// m_logger->logAction(action, status == DeviceManager::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); + // if (status != DeviceManager::DeviceErrorAsync) + // m_logger->logAction(action, status == DeviceManager::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); } } @@ -461,11 +461,8 @@ GuhCore::GuhCore(QObject *parent) : m_webServer = new WebServer(m_configuration->webServerAddress(), m_configuration->webServerPort(), m_configuration->webServerPublicFolder(), this); m_serverManager->restServer()->registerWebserver(m_webServer); - if (!NetworkManager::available()) { - m_networkManager = 0; - } else { - m_networkManager = new NetworkManager(this); - } + // Create the NetworkManager + m_networkManager = new NetworkManager(this); // Connect the configuration changes connect(m_configuration, &GuhConfiguration::cloudEnabledChanged, m_cloudManager, &CloudManager::onCloudEnabledChanged); diff --git a/server/jsonrpc/jsontypes.h b/server/jsonrpc/jsontypes.h index 8f35a1fe..9c7ff406 100644 --- a/server/jsonrpc/jsontypes.h +++ b/server/jsonrpc/jsontypes.h @@ -81,7 +81,7 @@ namespace guhserver { return s_##typeName; \ } \ static QString typeName##ToString(className::enumName value) { \ - QMetaObject metaObject = className::staticMetaObject; \ + const QMetaObject &metaObject = className::staticMetaObject; \ int enumIndex = metaObject.indexOfEnumerator(enumString); \ QMetaEnum metaEnum = metaObject.enumerator(enumIndex); \ return metaEnum.valueToKey(metaEnum.value(value)); \ diff --git a/server/jsonrpc/networkmanagerhandler.cpp b/server/jsonrpc/networkmanagerhandler.cpp index f3aca037..8f9734c3 100644 --- a/server/jsonrpc/networkmanagerhandler.cpp +++ b/server/jsonrpc/networkmanagerhandler.cpp @@ -85,6 +85,31 @@ NetworkManagerHandler::NetworkManagerHandler(QObject *parent) : setParams("ConnectWifiNetwork", params); returns.insert("networkManagerError", JsonTypes::networkManagerErrorRef()); setReturns("ConnectWifiNetwork", returns); + + // Notifications + params.clear(); returns.clear(); + setDescription("NetworkStatusChanged", "Emitted whenever a status of a NetworkManager changes."); + params.insert("status", status); + setParams("NetworkStatusChanged", params); + + params.clear(); returns.clear(); + setDescription("NetworkDeviceChanged", "Emitted whenever a NetworkDevice has changed."); + params.insert("networkDevice", JsonTypes::networkDeviceRef()); + setParams("NetworkDeviceChanged", params); + + params.clear(); returns.clear(); + setDescription("NetworkDeviceAdded", "Emitted whenever a new NetworkDevice was added."); + params.insert("networkDevice", JsonTypes::networkDeviceRef()); + setParams("NetworkDeviceAdded", params); + + params.clear(); returns.clear(); + setDescription("NetworkDeviceRemoved", "Emitted whenever a NetworkDevice was removed."); + params.insert("networkDevice", JsonTypes::networkDeviceRef()); + setParams("NetworkDeviceRemoved", params); + + connect(GuhCore::instance()->networkManager(), &NetworkManager::stateChanged, this, &NetworkManagerHandler::onNetworkManagerStatusChanged); + connect(GuhCore::instance()->networkManager(), &NetworkManager::networkingEnabledChanged, this, &NetworkManagerHandler::onNetworkManagerStatusChanged); + connect(GuhCore::instance()->networkManager(), &NetworkManager::wirelessEnabledChanged, this, &NetworkManagerHandler::onNetworkManagerStatusChanged); } QString NetworkManagerHandler::name() const @@ -101,11 +126,8 @@ JsonReply *NetworkManagerHandler::GetNetworkStatus(const QVariantMap ¶ms) return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); // Pack network manager status - QVariantMap returns; QVariantMap status; - status.insert("networkingEnabled", GuhCore::instance()->networkManager()->networkingEnabled()); - status.insert("wirelessNetworkingEnabled", GuhCore::instance()->networkManager()->wirelessEnabled()); - status.insert("state", JsonTypes::networkManagerStateToString(GuhCore::instance()->networkManager()->state())); - returns.insert("status", status); + QVariantMap returns; + returns.insert("status", packNetworkManagerStatus()); return createReply(returns); } @@ -127,9 +149,10 @@ JsonReply *NetworkManagerHandler::EnableWirelessNetworking(const QVariantMap &pa if (!GuhCore::instance()->networkManager()->available()) return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); - bool enable = params.value("enable").toBool(); + if (!GuhCore::instance()->networkManager()->wifiAvailable()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorWirelessNotAvailable)); - if (!GuhCore::instance()->networkManager()->enableWireless(enable)) + if (!GuhCore::instance()->networkManager()->enableWireless(params.value("enable").toBool())) return createReply(statusToReply(NetworkManager::NetworkManagerErrorUnknownError)); return createReply(statusToReply(NetworkManager::NetworkManagerErrorNoError)); @@ -139,11 +162,13 @@ JsonReply *NetworkManagerHandler::GetWirelessAccessPoints(const QVariantMap &par { Q_UNUSED(params); + if (!GuhCore::instance()->networkManager()->available()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); + + if (!GuhCore::instance()->networkManager()->wifiAvailable()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorWirelessNotAvailable)); + QVariantList wirelessAccessPoints; - - // TODO: check available - // TODO: returns (networkManager error) - foreach (WirelessAccessPoint *wirelessAccessPoint, GuhCore::instance()->networkManager()->wirelessNetworkManager()->accessPoints()) wirelessAccessPoints.append(JsonTypes::packWirelessAccessPoint(wirelessAccessPoint)); @@ -156,11 +181,10 @@ JsonReply *NetworkManagerHandler::GetNetworkDevices(const QVariantMap ¶ms) { Q_UNUSED(params); + if (!GuhCore::instance()->networkManager()->available()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); + QVariantList networkDevices; - - // TODO: check available - // TODO: returns (networkManager error) - foreach (NetworkDevice *networkDevice, GuhCore::instance()->networkManager()->networkDevices()) networkDevices.append(JsonTypes::packNetworkDevice(networkDevice)); @@ -173,27 +197,58 @@ JsonReply *NetworkManagerHandler::ScanWifiNetworks(const QVariantMap ¶ms) { Q_UNUSED(params); - // TODO: check available - // TODO: returns (networkManager error) + if (!GuhCore::instance()->networkManager()->available()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); + + if (!GuhCore::instance()->networkManager()->wifiAvailable()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorWirelessNotAvailable)); GuhCore::instance()->networkManager()->wirelessNetworkManager()->scanWirelessNetworks(); - - QVariantMap returns; - return createReply(returns); + return createReply(statusToReply(NetworkManager::NetworkManagerErrorNoError)); } JsonReply *NetworkManagerHandler::ConnectWifiNetwork(const QVariantMap ¶ms) { + if (!GuhCore::instance()->networkManager()->available()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorNetworkManagerNotAvailable)); + + if (!GuhCore::instance()->networkManager()->wifiAvailable()) + return createReply(statusToReply(NetworkManager::NetworkManagerErrorWirelessNotAvailable)); + QString ssid = params.value("ssid").toString(); QString password = params.value("password").toString(); + NetworkManager::NetworkManagerError error = GuhCore::instance()->networkManager()->connectWifi(ssid, password); - // TODO: check available - // TODO: returns (networkManager error) + return createReply(statusToReply(error)); +} - GuhCore::instance()->networkManager()->connectWifi(ssid, password); +QVariantMap NetworkManagerHandler::packNetworkManagerStatus() +{ + QVariantMap status; + status.insert("networkingEnabled", GuhCore::instance()->networkManager()->networkingEnabled()); + status.insert("wirelessNetworkingEnabled", GuhCore::instance()->networkManager()->wirelessEnabled()); + status.insert("state", GuhCore::instance()->networkManager()->stateString()); + return status; +} - QVariantMap returns; - return createReply(returns); +void NetworkManagerHandler::onNetworkManagerStatusChanged() +{ + emit NetworkStatusChanged(packNetworkManagerStatus()); +} + +void NetworkManagerHandler::onNetworkDeviceChanged(NetworkDevice *networkDevice) +{ + Q_UNUSED(networkDevice) +} + +void NetworkManagerHandler::onNetworkDeviceAdded(NetworkDevice *networkDevice) +{ + Q_UNUSED(networkDevice) +} + +void NetworkManagerHandler::onNetworkDeviceRemoved(NetworkDevice *networkDevice) +{ + Q_UNUSED(networkDevice) } } diff --git a/server/jsonrpc/networkmanagerhandler.h b/server/jsonrpc/networkmanagerhandler.h index 21888574..c0c8ca79 100644 --- a/server/jsonrpc/networkmanagerhandler.h +++ b/server/jsonrpc/networkmanagerhandler.h @@ -43,10 +43,20 @@ public: Q_INVOKABLE JsonReply *ScanWifiNetworks(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *ConnectWifiNetwork(const QVariantMap ¶ms); +private: + QVariantMap packNetworkManagerStatus(); + signals: + void NetworkStatusChanged(const QVariantMap ¶ms); + void NetworkDeviceChanged(const QVariantMap ¶ms); + void NetworkDeviceAdded(const QVariantMap ¶ms); + void NetworkDeviceRemoved(const QVariantMap ¶ms); -public slots: - +private slots: + void onNetworkManagerStatusChanged(); + void onNetworkDeviceChanged(NetworkDevice *networkDevice); + void onNetworkDeviceAdded(NetworkDevice *networkDevice); + void onNetworkDeviceRemoved(NetworkDevice *networkDevice); }; } diff --git a/server/networkmanager/networkdevice.cpp b/server/networkmanager/networkdevice.cpp index 62686c6b..a3b9c5db 100644 --- a/server/networkmanager/networkdevice.cpp +++ b/server/networkmanager/networkdevice.cpp @@ -30,8 +30,8 @@ NetworkDevice::NetworkDevice(const QDBusObjectPath &objectPath, QObject *parent) m_objectPath(objectPath), m_mtu(0), m_metered(0), - m_deviceState(DeviceStateUnknown), - m_deviceStateReason(DeviceStateReasonUnknown) + m_deviceState(NetworkDeviceStateUnknown), + m_deviceStateReason(NetworkDeviceStateReasonUnknown) { QDBusConnection systemBus = QDBusConnection::systemBus(); if (!systemBus.isConnected()) { @@ -55,7 +55,7 @@ NetworkDevice::NetworkDevice(const QDBusObjectPath &objectPath, QObject *parent) m_mtu = networkDeviceInterface.property("Mtu").toUInt(); m_metered = networkDeviceInterface.property("Metered").toUInt(); - m_deviceState = DeviceState(networkDeviceInterface.property("State").toUInt()); + m_deviceState = NetworkDeviceState(networkDeviceInterface.property("State").toUInt()); m_deviceType = DeviceType(networkDeviceInterface.property("DeviceType").toUInt()); m_activeConnection = qdbus_cast(networkDeviceInterface.property("ActiveConnection")); @@ -114,12 +114,17 @@ uint NetworkDevice::metered() const return m_metered; } -NetworkDevice::DeviceState NetworkDevice::deviceState() const +NetworkDevice::NetworkDeviceState NetworkDevice::deviceState() const { return m_deviceState; } -NetworkDevice::DeviceStateReason NetworkDevice::deviceStateReason() const +QString NetworkDevice::deviceStateString() const +{ + return NetworkDevice::deviceStateToString(m_deviceState); +} + +NetworkDevice::NetworkDeviceStateReason NetworkDevice::deviceStateReason() const { return m_deviceStateReason; } @@ -152,27 +157,27 @@ QString NetworkDevice::deviceTypeToString(const NetworkDevice::DeviceType &devic return QString(metaEnum.valueToKey(deviceType)).remove("DeviceType"); } -QString NetworkDevice::deviceStateToString(const NetworkDevice::DeviceState &deviceState) +QString NetworkDevice::deviceStateToString(const NetworkDevice::NetworkDeviceState &deviceState) { QMetaObject metaObject = NetworkDevice::staticMetaObject; - int enumIndex = metaObject.indexOfEnumerator(QString("DeviceState").toLatin1().data()); + int enumIndex = metaObject.indexOfEnumerator(QString("NetworkDeviceState").toLatin1().data()); QMetaEnum metaEnum = metaObject.enumerator(enumIndex); - return QString(metaEnum.valueToKey(deviceState)).remove("DeviceState"); + return QString(metaEnum.valueToKey(deviceState)); } -QString NetworkDevice::deviceStateReasonToString(const NetworkDevice::DeviceStateReason &deviceStateReason) +QString NetworkDevice::deviceStateReasonToString(const NetworkDevice::NetworkDeviceStateReason &deviceStateReason) { QMetaObject metaObject = NetworkDevice::staticMetaObject; - int enumIndex = metaObject.indexOfEnumerator(QString("DeviceStateReason").toLatin1().data()); + int enumIndex = metaObject.indexOfEnumerator(QString("NetworkDeviceStateReason").toLatin1().data()); QMetaEnum metaEnum = metaObject.enumerator(enumIndex); - return QString(metaEnum.valueToKey(deviceStateReason)).remove("DeviceStateReason"); + return QString(metaEnum.valueToKey(deviceStateReason)); } void NetworkDevice::onStateChanged(uint newState, uint oldState, uint reason) { - qCDebug(dcNetworkManager()) << m_interface << deviceStateToString(DeviceState(oldState)) << "-->" << deviceStateToString(DeviceState(newState)) << ":" << deviceStateReasonToString(DeviceStateReason(reason)); + qCDebug(dcNetworkManager()) << m_interface << deviceStateToString(NetworkDeviceState(oldState)) << "-->" << deviceStateToString(NetworkDeviceState(newState)) << ":" << deviceStateReasonToString(NetworkDeviceStateReason(reason)); - m_deviceState = DeviceState(newState); + m_deviceState = NetworkDeviceState(newState); emit deviceStateChanged(); } diff --git a/server/networkmanager/networkdevice.h b/server/networkmanager/networkdevice.h index fdbfef7f..e40bf0b7 100644 --- a/server/networkmanager/networkdevice.h +++ b/server/networkmanager/networkdevice.h @@ -36,90 +36,90 @@ class NetworkDevice : public QObject { Q_OBJECT Q_ENUMS(DeviceType) - Q_ENUMS(DeviceState) - Q_ENUMS(DeviceStateReason) + Q_ENUMS(NetworkDeviceState) + Q_ENUMS(NetworkDeviceStateReason) public: - enum DeviceState { - DeviceStateUnknown = 0, - DeviceStateUnmanaged = 10, - DeviceStateUnavailable = 20, - DeviceStateDisconnected = 30, - DeviceStatePrepare = 40, - DeviceStateConfig = 50, - DeviceStateNeedAuth = 60, - DeviceStateIpConfig = 70, - DeviceStateIpCheck = 80, - DeviceStateSecondaries = 90, - DeviceStateActivated = 100, - DeviceStateDeactivating = 110, - DeviceStateFailed = 120 + enum NetworkDeviceState { + NetworkDeviceStateUnknown = 0, + NetworkDeviceStateUnmanaged = 10, + NetworkDeviceStateUnavailable = 20, + NetworkDeviceStateDisconnected = 30, + NetworkDeviceStatePrepare = 40, + NetworkDeviceStateConfig = 50, + NetworkDeviceStateNeedAuth = 60, + NetworkDeviceStateIpConfig = 70, + NetworkDeviceStateIpCheck = 80, + NetworkDeviceStateSecondaries = 90, + NetworkDeviceStateActivated = 100, + NetworkDeviceStateDeactivating = 110, + NetworkDeviceStateFailed = 120 }; - enum DeviceStateReason { - DeviceStateReasonNone = 0, - DeviceStateReasonUnknown = 1, - DeviceStateReasonNowManaged = 2, - DeviceStateReasonNowUnmanaged = 3, - DeviceStateReasonConfigFailed = 4, - DeviceStateReasonIpConfigUnavailable = 5, - DeviceStateReasonIpConfigExpired = 6, - DeviceStateReasonNoSecrets = 7, - DeviceStateReasonSupplicantDisconnected = 8, - DeviceStateReasonSupplicantConfigFailed = 9, - DeviceStateReasonSupplicantFailed = 10, - DeviceStateReasonSupplicantTimeout = 11, - DeviceStateReasonPppStartFailed = 12, - DeviceStateReasonPppDisconnected = 13, - DeviceStateReasonPppFailed = 14, - DeviceStateReasonDhcpStartFailed = 15, - DeviceStateReasonDhcpError = 16, - DeviceStateReasonDhcpFailed = 17, - DeviceStateReasonSharedStartFailed = 18, - DeviceStateReasonSharedFailed = 19, - DeviceStateReasonAutoIpStartFailed = 20, - DeviceStateReasonAutoIpError = 21, - DeviceStateReasonAutoIpFailed = 22, - DeviceStateReasonModemBusy = 23, - DeviceStateReasonModemNoDialTone = 24, - DeviceStateReasonModemNoCarrier = 25, - DeviceStateReasonModemDialTimeout = 26, - DeviceStateReasonModemDialFailed = 27, - DeviceStateReasonModemInitFailed = 28, - DeviceStateReasonGsmApnFailed = 29, - DeviceStateReasonGsmRegistrationNotSearching = 30, - DeviceStateReasonGsmRegistrationDenied = 31, - DeviceStateReasonGsmRegistrationTimeout = 32, - DeviceStateReasonGsmRegistrationFailed = 33, - DeviceStateReasonGsmPinCheckFailed = 34, - DeviceStateReasonFirmwareMissing = 35, - DeviceStateReasonRemoved = 36, - DeviceStateReasonSleeping = 37, - DeviceStateReasonConnectionRemoved = 38, - DeviceStateReasonUserRequest = 39, - DeviceStateReasonCarrier = 40, - DeviceStateReasonConnectionAssumed = 41, - DeviceStateReasonSupplicantAvailable = 42, - DeviceStateReasonModemNotFound = 43, - DeviceStateReasonBtFailed = 44, - DeviceStateReasonGsmSimNotInserted = 45, - DeviceStateReasonGsmSimPinRequired = 46, - DeviceStateReasonGsmSimPukRequired = 47, - DeviceStateReasonGsmSimWrong = 48, - DeviceStateReasonInfinibandMode = 49, - DeviceStateReasonDependencyFailed = 50, - DeviceStateReasonBR2684Failed = 51, - DeviceStateReasonModemManagerUnavailable = 52, - DeviceStateReasonSsidNotFound = 53, - DeviceStateReasonSecondaryConnectionFailed = 54, - DeviceStateReasonDcbFoecFailed = 55, - DeviceStateReasonTeamdControlFailed = 56, - DeviceStateReasonModemFailed = 57, - DeviceStateReasonModemAvailable = 58, - DeviceStateReasonSimPinIncorrect = 59, - DeviceStateReasonNewActivision = 60, - DeviceStateReasonParentChanged = 61, - DeviceStateReasonParentManagedChanged = 62 + enum NetworkDeviceStateReason { + NetworkDeviceStateReasonNone = 0, + NetworkDeviceStateReasonUnknown = 1, + NetworkDeviceStateReasonNowManaged = 2, + NetworkDeviceStateReasonNowUnmanaged = 3, + NetworkDeviceStateReasonConfigFailed = 4, + NetworkDeviceStateReasonIpConfigUnavailable = 5, + NetworkDeviceStateReasonIpConfigExpired = 6, + NetworkDeviceStateReasonNoSecrets = 7, + NetworkDeviceStateReasonSupplicantDisconnected = 8, + NetworkDeviceStateReasonSupplicantConfigFailed = 9, + NetworkDeviceStateReasonSupplicantFailed = 10, + NetworkDeviceStateReasonSupplicantTimeout = 11, + NetworkDeviceStateReasonPppStartFailed = 12, + NetworkDeviceStateReasonPppDisconnected = 13, + NetworkDeviceStateReasonPppFailed = 14, + NetworkDeviceStateReasonDhcpStartFailed = 15, + NetworkDeviceStateReasonDhcpError = 16, + NetworkDeviceStateReasonDhcpFailed = 17, + NetworkDeviceStateReasonSharedStartFailed = 18, + NetworkDeviceStateReasonSharedFailed = 19, + NetworkDeviceStateReasonAutoIpStartFailed = 20, + NetworkDeviceStateReasonAutoIpError = 21, + NetworkDeviceStateReasonAutoIpFailed = 22, + NetworkDeviceStateReasonModemBusy = 23, + NetworkDeviceStateReasonModemNoDialTone = 24, + NetworkDeviceStateReasonModemNoCarrier = 25, + NetworkDeviceStateReasonModemDialTimeout = 26, + NetworkDeviceStateReasonModemDialFailed = 27, + NetworkDeviceStateReasonModemInitFailed = 28, + NetworkDeviceStateReasonGsmApnFailed = 29, + NetworkDeviceStateReasonGsmRegistrationNotSearching = 30, + NetworkDeviceStateReasonGsmRegistrationDenied = 31, + NetworkDeviceStateReasonGsmRegistrationTimeout = 32, + NetworkDeviceStateReasonGsmRegistrationFailed = 33, + NetworkDeviceStateReasonGsmPinCheckFailed = 34, + NetworkDeviceStateReasonFirmwareMissing = 35, + NetworkDeviceStateReasonRemoved = 36, + NetworkDeviceStateReasonSleeping = 37, + NetworkDeviceStateReasonConnectionRemoved = 38, + NetworkDeviceStateReasonUserRequest = 39, + NetworkDeviceStateReasonCarrier = 40, + NetworkDeviceStateReasonConnectionAssumed = 41, + NetworkDeviceStateReasonSupplicantAvailable = 42, + NetworkDeviceStateReasonModemNotFound = 43, + NetworkDeviceStateReasonBtFailed = 44, + NetworkDeviceStateReasonGsmSimNotInserted = 45, + NetworkDeviceStateReasonGsmSimPinRequired = 46, + NetworkDeviceStateReasonGsmSimPukRequired = 47, + NetworkDeviceStateReasonGsmSimWrong = 48, + NetworkDeviceStateReasonInfinibandMode = 49, + NetworkDeviceStateReasonDependencyFailed = 50, + NetworkDeviceStateReasonBR2684Failed = 51, + NetworkDeviceStateReasonModemManagerUnavailable = 52, + NetworkDeviceStateReasonSsidNotFound = 53, + NetworkDeviceStateReasonSecondaryConnectionFailed = 54, + NetworkDeviceStateReasonDcbFoecFailed = 55, + NetworkDeviceStateReasonTeamdControlFailed = 56, + NetworkDeviceStateReasonModemFailed = 57, + NetworkDeviceStateReasonModemAvailable = 58, + NetworkDeviceStateReasonSimPinIncorrect = 59, + NetworkDeviceStateReasonNewActivision = 60, + NetworkDeviceStateReasonParentChanged = 61, + NetworkDeviceStateReasonParentManagedChanged = 62 }; enum DeviceType { @@ -157,8 +157,10 @@ public: QString physicalPortId() const; uint mtu() const; uint metered() const; - DeviceState deviceState() const; - DeviceStateReason deviceStateReason() const; + + NetworkDeviceState deviceState() const; + QString deviceStateString() const; + NetworkDeviceStateReason deviceStateReason() const; DeviceType deviceType() const; QDBusObjectPath activeConnection() const; @@ -166,9 +168,8 @@ public: QList availableConnections() const; static QString deviceTypeToString(const DeviceType &deviceType); - static QString deviceStateToString(const DeviceState &deviceState); - static QString deviceStateReasonToString(const DeviceStateReason &deviceStateReason); - + static QString deviceStateToString(const NetworkDeviceState &deviceState); + static QString deviceStateReasonToString(const NetworkDeviceStateReason &deviceStateReason); private: QDBusObjectPath m_objectPath; @@ -182,8 +183,8 @@ private: QString m_physicalPortId; uint m_mtu; uint m_metered; - DeviceState m_deviceState; - DeviceStateReason m_deviceStateReason; + NetworkDeviceState m_deviceState; + NetworkDeviceStateReason m_deviceStateReason; DeviceType m_deviceType; QDBusObjectPath m_activeConnection; diff --git a/server/networkmanager/networkmanager.cpp b/server/networkmanager/networkmanager.cpp index b804ae38..7e97e2fc 100644 --- a/server/networkmanager/networkmanager.cpp +++ b/server/networkmanager/networkmanager.cpp @@ -31,18 +31,28 @@ NetworkManager::NetworkManager(QObject *parent) : QObject(parent), m_networkManagerInterface(0), m_wirelessNetworkManager(0), + m_available(false), + m_wifiAvailable(false), m_state(NetworkManagerStateUnknown), m_connectivityState(NetworkManagerConnectivityStateUnknown), m_networkingEnabled(false), m_wirelessEnabled(false) { + // Check DBus connection + if (!QDBusConnection::systemBus().isConnected()) { + qCWarning(dcNetworkManager()) << "System DBus not connected. NetworkManagre not available."; + return; + } + // Create interface m_networkManagerInterface = new QDBusInterface(serviceString, pathString, serviceString, QDBusConnection::systemBus(), this); if(!m_networkManagerInterface->isValid()) { - qCWarning(dcNetworkManager()) << "Invalid DBus network manager interface"; + qCWarning(dcNetworkManager()) << "Invalid DBus network manager interface. NetworkManagre not available."; return; } + m_available = true; + // Read properties setVersion(m_networkManagerInterface->property("Version").toString()); setState((NetworkManagerState)m_networkManagerInterface->property("State").toUInt()); @@ -65,19 +75,12 @@ NetworkManager::NetworkManager(QObject *parent) : bool NetworkManager::available() { - QDBusConnection systemBus = QDBusConnection::systemBus(); - if (!systemBus.isConnected()) { - qCWarning(dcNetworkManager()) << "System DBus not connected"; - return false; - } + return m_available; +} - QDBusInterface networkInterface(serviceString, pathString, serviceString, QDBusConnection::systemBus()); - if(!networkInterface.isValid()) { - qCWarning(dcNetworkManager()) << "Invalid DBus network manager interface"; - return false; - } - - return true; +bool NetworkManager::wifiAvailable() +{ + return m_wifiAvailable; } QList NetworkManager::networkDevices() const @@ -100,6 +103,11 @@ NetworkManager::NetworkManagerState NetworkManager::state() const return m_state; } +QString NetworkManager::stateString() const +{ + return networkManagerStateToString(m_state); +} + NetworkManager::NetworkManagerConnectivityState NetworkManager::connectivityState() const { return m_connectivityState; @@ -197,7 +205,7 @@ bool NetworkManager::enableWireless(const bool &enabled) if (m_wirelessEnabled == enabled) return true; - return m_networkManagerInterface->setProperty("WirelessEnabled", true); + return m_networkManagerInterface->setProperty("WirelessEnabled", enabled); } void NetworkManager::loadDevices() @@ -226,7 +234,7 @@ QString NetworkManager::networkManagerStateToString(const NetworkManager::Networ QMetaObject metaObject = NetworkManager::staticMetaObject; int enumIndex = metaObject.indexOfEnumerator(QString("NetworkManagerState").toLatin1().data()); QMetaEnum metaEnum = metaObject.enumerator(enumIndex); - return QString(metaEnum.valueToKey(state)).remove("NetworkManagerState"); + return QString(metaEnum.valueToKey(state)); } QString NetworkManager::networkManagerConnectivityStateToString(const NetworkManager::NetworkManagerConnectivityState &state) @@ -274,8 +282,10 @@ void NetworkManager::onDeviceAdded(const QDBusObjectPath &deviceObjectPath) NetworkDevice *networkDevice = new NetworkDevice(deviceObjectPath, this); qCDebug(dcNetworkManager()) << "[+]" << networkDevice; - if (!m_wirelessNetworkManager && networkDevice->deviceType() == NetworkDevice::DeviceTypeWifi) + if (!m_wirelessNetworkManager && networkDevice->deviceType() == NetworkDevice::DeviceTypeWifi) { + m_wifiAvailable = true; m_wirelessNetworkManager = new WirelessNetworkManager(networkDevice->objectPath(), this); + } m_networkDevices.insert(deviceObjectPath, networkDevice); } diff --git a/server/networkmanager/networkmanager.h b/server/networkmanager/networkmanager.h index f8068f34..6790a8eb 100644 --- a/server/networkmanager/networkmanager.h +++ b/server/networkmanager/networkmanager.h @@ -77,7 +77,8 @@ public: explicit NetworkManager(QObject *parent = 0); - static bool available(); + bool available(); + bool wifiAvailable(); QList networkDevices() const; WirelessNetworkManager *wirelessNetworkManager() const; @@ -85,6 +86,7 @@ public: // Properties QString version() const; NetworkManagerState state() const; + QString stateString() const; NetworkManagerConnectivityState connectivityState() const; NetworkManagerError connectWifi(const QString &ssid, const QString &password); @@ -104,6 +106,9 @@ private: NetworkSettings *m_networkSettings; WirelessNetworkManager *m_wirelessNetworkManager; + bool m_available; + bool m_wifiAvailable; + QString m_version; NetworkManagerState m_state; diff --git a/server/networkmanager/wirelessnetworkmanager.cpp b/server/networkmanager/wirelessnetworkmanager.cpp index d8ca7cad..b7b7112a 100644 --- a/server/networkmanager/wirelessnetworkmanager.cpp +++ b/server/networkmanager/wirelessnetworkmanager.cpp @@ -33,8 +33,8 @@ WirelessNetworkManager::WirelessNetworkManager(const QDBusObjectPath &objectPath m_objectPath(objectPath), m_connected(false), m_managed(false), - m_state(DeviceStateUnknown), - m_stateReason(DeviceStateReasonUnknown) + m_state(NetworkDeviceStateUnknown), + m_stateReason(NetworkDeviceStateReasonUnknown) { QDBusConnection systemBus = QDBusConnection::systemBus(); if (!systemBus.isConnected()) { @@ -93,12 +93,12 @@ bool WirelessNetworkManager::managed() const return m_managed; } -WirelessNetworkManager::DeviceState WirelessNetworkManager::state() const +WirelessNetworkManager::NetworkDeviceState WirelessNetworkManager::state() const { return m_state; } -WirelessNetworkManager::DeviceStateReason WirelessNetworkManager::stateReason() const +WirelessNetworkManager::NetworkDeviceStateReason WirelessNetworkManager::stateReason() const { return m_stateReason; } @@ -144,20 +144,20 @@ WirelessAccessPoint *WirelessNetworkManager::getAccessPoint(const QDBusObjectPat return m_accessPointsTable.value(objectPath); } -QString WirelessNetworkManager::deviceStateToString(const WirelessNetworkManager::DeviceState &state) +QString WirelessNetworkManager::deviceStateToString(const WirelessNetworkManager::NetworkDeviceState &state) { QMetaObject metaObject = WirelessNetworkManager::staticMetaObject; - int enumIndex = metaObject.indexOfEnumerator(QString("DeviceState").toLatin1().data()); + int enumIndex = metaObject.indexOfEnumerator(QString("NetworkDeviceState").toLatin1().data()); QMetaEnum metaEnum = metaObject.enumerator(enumIndex); - return QString(metaEnum.valueToKey(state)).remove("DeviceState"); + return QString(metaEnum.valueToKey(state)).remove("NetworkDeviceState"); } -QString WirelessNetworkManager::deviceStateReasonToString(const WirelessNetworkManager::DeviceStateReason &stateReason) +QString WirelessNetworkManager::deviceStateReasonToString(const WirelessNetworkManager::NetworkDeviceStateReason &stateReason) { QMetaObject metaObject = WirelessNetworkManager::staticMetaObject; - int enumIndex = metaObject.indexOfEnumerator(QString("DeviceStateReason").toLatin1().data()); + int enumIndex = metaObject.indexOfEnumerator(QString("NetworkDeviceStateReason").toLatin1().data()); QMetaEnum metaEnum = metaObject.enumerator(enumIndex); - return QString(metaEnum.valueToKey(stateReason)).remove("DeviceStateReason"); + return QString(metaEnum.valueToKey(stateReason)).remove("NetworkDeviceStateReason"); } void WirelessNetworkManager::readAccessPoints() @@ -207,7 +207,7 @@ void WirelessNetworkManager::readWirelessDeviceProperties() m_driverVersion = driverInterface.property("DriverVersion").toString(); setManaged(driverInterface.property("Managed").toBool()); - setState(DeviceState(driverInterface.property("State").toUInt())); + setState(NetworkDeviceState(driverInterface.property("State").toUInt())); } void WirelessNetworkManager::setConnected(const bool &connected) @@ -218,13 +218,13 @@ void WirelessNetworkManager::setConnected(const bool &connected) } } -void WirelessNetworkManager::setState(const DeviceState &state) +void WirelessNetworkManager::setState(const NetworkDeviceState &state) { m_state = state; emit stateChanged(m_state); switch (state) { - case DeviceStateActivated: + case NetworkDeviceStateActivated: setConnected(true); break; default: @@ -233,7 +233,7 @@ void WirelessNetworkManager::setState(const DeviceState &state) } } -void WirelessNetworkManager::setStateReason(const WirelessNetworkManager::DeviceStateReason &stateReason) +void WirelessNetworkManager::setStateReason(const WirelessNetworkManager::NetworkDeviceStateReason &stateReason) { m_stateReason = stateReason; } @@ -246,10 +246,10 @@ void WirelessNetworkManager::setManaged(const bool &managed) void WirelessNetworkManager::deviceStateChanged(uint newState, uint oldState, uint reason) { - qCDebug(dcNetworkManager()) << "WirelessManager: state changed" << deviceStateToString(DeviceState(oldState)) << "-->" << deviceStateToString(DeviceState(newState)) << ":" << deviceStateReasonToString(DeviceStateReason(reason)); + qCDebug(dcNetworkManager()) << "WirelessManager: state changed" << deviceStateToString(NetworkDeviceState(oldState)) << "-->" << deviceStateToString(NetworkDeviceState(newState)) << ":" << deviceStateReasonToString(NetworkDeviceStateReason(reason)); - setState(DeviceState(newState)); - setStateReason(DeviceStateReason(reason)); + setState(NetworkDeviceState(newState)); + setStateReason(NetworkDeviceStateReason(reason)); } void WirelessNetworkManager::accessPointAdded(const QDBusObjectPath &objectPath) diff --git a/server/networkmanager/wirelessnetworkmanager.h b/server/networkmanager/wirelessnetworkmanager.h index d11f0ba5..6c1e2861 100644 --- a/server/networkmanager/wirelessnetworkmanager.h +++ b/server/networkmanager/wirelessnetworkmanager.h @@ -36,90 +36,90 @@ namespace guhserver { class WirelessNetworkManager : public QObject { Q_OBJECT - Q_ENUMS(DeviceState) - Q_ENUMS(DeviceStateReason) + Q_ENUMS(NetworkDeviceState) + Q_ENUMS(NetworkDeviceStateReason) public: - enum DeviceState { - DeviceStateUnknown = 0, - DeviceStateUnmanaged = 10, - DeviceStateUnavailable = 20, - DeviceStateDisconnected = 30, - DeviceStatePrepare = 40, - DeviceStateConfig = 50, - DeviceStateNeedAuth = 60, - DeviceStateIpConfig = 70, - DeviceStateIpCheck = 80, - DeviceStateSecondaries = 90, - DeviceStateActivated = 100, - DeviceStateDeactivating = 110, - DeviceStateFailed = 120 + enum NetworkDeviceState { + NetworkDeviceStateUnknown = 0, + NetworkDeviceStateUnmanaged = 10, + NetworkDeviceStateUnavailable = 20, + NetworkDeviceStateDisconnected = 30, + NetworkDeviceStatePrepare = 40, + NetworkDeviceStateConfig = 50, + NetworkDeviceStateNeedAuth = 60, + NetworkDeviceStateIpConfig = 70, + NetworkDeviceStateIpCheck = 80, + NetworkDeviceStateSecondaries = 90, + NetworkDeviceStateActivated = 100, + NetworkDeviceStateDeactivating = 110, + NetworkDeviceStateFailed = 120 }; - enum DeviceStateReason { - DeviceStateReasonNone = 0, - DeviceStateReasonUnknown = 1, - DeviceStateReasonNowManaged = 2, - DeviceStateReasonNowUnmanaged = 3, - DeviceStateReasonConfigFailed = 4, - DeviceStateReasonIpConfigUnavailable = 5, - DeviceStateReasonIpConfigExpired = 6, - DeviceStateReasonNoSecrets = 7, - DeviceStateReasonSupplicantDisconnected = 8, - DeviceStateReasonSupplicantConfigFailed = 9, - DeviceStateReasonSupplicantFailed = 10, - DeviceStateReasonSupplicantTimeout = 11, - DeviceStateReasonPppStartFailed = 12, - DeviceStateReasonPppDisconnected = 13, - DeviceStateReasonPppFailed = 14, - DeviceStateReasonDhcpStartFailed = 15, - DeviceStateReasonDhcpError = 16, - DeviceStateReasonDhcpFailed = 17, - DeviceStateReasonSharedStartFailed = 18, - DeviceStateReasonSharedFailed = 19, - DeviceStateReasonAutoIpStartFailed = 20, - DeviceStateReasonAutoIpError = 21, - DeviceStateReasonAutoIpFailed = 22, - DeviceStateReasonModemBusy = 23, - DeviceStateReasonModemNoDialTone = 24, - DeviceStateReasonModemNoCarrier = 25, - DeviceStateReasonModemDialTimeout = 26, - DeviceStateReasonModemDialFailed = 27, - DeviceStateReasonModemInitFailed = 28, - DeviceStateReasonGsmApnFailed = 29, - DeviceStateReasonGsmRegistrationNotSearching = 30, - DeviceStateReasonGsmRegistrationDenied = 31, - DeviceStateReasonGsmRegistrationTimeout = 32, - DeviceStateReasonGsmRegistrationFailed = 33, - DeviceStateReasonGsmPinCheckFailed = 34, - DeviceStateReasonFirmwareMissing = 35, - DeviceStateReasonRemoved = 36, - DeviceStateReasonSleeping = 37, - DeviceStateReasonConnectionRemoved = 38, - DeviceStateReasonUserRequest = 39, - DeviceStateReasonCarrier = 40, - DeviceStateReasonConnectionAssumed = 41, - DeviceStateReasonSupplicantAvailable = 42, - DeviceStateReasonModemNotFound = 43, - DeviceStateReasonBtFailed = 44, - DeviceStateReasonGsmSimNotInserted = 45, - DeviceStateReasonGsmSimPinRequired = 46, - DeviceStateReasonGsmSimPukRequired = 47, - DeviceStateReasonGsmSimWrong = 48, - DeviceStateReasonInfinibandMode = 49, - DeviceStateReasonDependencyFailed = 50, - DeviceStateReasonBR2684Failed = 51, - DeviceStateReasonModemManagerUnavailable = 52, - DeviceStateReasonSsidNotFound = 53, - DeviceStateReasonSecondaryConnectionFailed = 54, - DeviceStateReasonDcbFoecFailed = 55, - DeviceStateReasonTeamdControlFailed = 56, - DeviceStateReasonModemFailed = 57, - DeviceStateReasonModemAvailable = 58, - DeviceStateReasonSimPinIncorrect = 59, - DeviceStateReasonNewActivision = 60, - DeviceStateReasonParentChanged = 61, - DeviceStateReasonParentManagedChanged = 62 + enum NetworkDeviceStateReason { + NetworkDeviceStateReasonNone = 0, + NetworkDeviceStateReasonUnknown = 1, + NetworkDeviceStateReasonNowManaged = 2, + NetworkDeviceStateReasonNowUnmanaged = 3, + NetworkDeviceStateReasonConfigFailed = 4, + NetworkDeviceStateReasonIpConfigUnavailable = 5, + NetworkDeviceStateReasonIpConfigExpired = 6, + NetworkDeviceStateReasonNoSecrets = 7, + NetworkDeviceStateReasonSupplicantDisconnected = 8, + NetworkDeviceStateReasonSupplicantConfigFailed = 9, + NetworkDeviceStateReasonSupplicantFailed = 10, + NetworkDeviceStateReasonSupplicantTimeout = 11, + NetworkDeviceStateReasonPppStartFailed = 12, + NetworkDeviceStateReasonPppDisconnected = 13, + NetworkDeviceStateReasonPppFailed = 14, + NetworkDeviceStateReasonDhcpStartFailed = 15, + NetworkDeviceStateReasonDhcpError = 16, + NetworkDeviceStateReasonDhcpFailed = 17, + NetworkDeviceStateReasonSharedStartFailed = 18, + NetworkDeviceStateReasonSharedFailed = 19, + NetworkDeviceStateReasonAutoIpStartFailed = 20, + NetworkDeviceStateReasonAutoIpError = 21, + NetworkDeviceStateReasonAutoIpFailed = 22, + NetworkDeviceStateReasonModemBusy = 23, + NetworkDeviceStateReasonModemNoDialTone = 24, + NetworkDeviceStateReasonModemNoCarrier = 25, + NetworkDeviceStateReasonModemDialTimeout = 26, + NetworkDeviceStateReasonModemDialFailed = 27, + NetworkDeviceStateReasonModemInitFailed = 28, + NetworkDeviceStateReasonGsmApnFailed = 29, + NetworkDeviceStateReasonGsmRegistrationNotSearching = 30, + NetworkDeviceStateReasonGsmRegistrationDenied = 31, + NetworkDeviceStateReasonGsmRegistrationTimeout = 32, + NetworkDeviceStateReasonGsmRegistrationFailed = 33, + NetworkDeviceStateReasonGsmPinCheckFailed = 34, + NetworkDeviceStateReasonFirmwareMissing = 35, + NetworkDeviceStateReasonRemoved = 36, + NetworkDeviceStateReasonSleeping = 37, + NetworkDeviceStateReasonConnectionRemoved = 38, + NetworkDeviceStateReasonUserRequest = 39, + NetworkDeviceStateReasonCarrier = 40, + NetworkDeviceStateReasonConnectionAssumed = 41, + NetworkDeviceStateReasonSupplicantAvailable = 42, + NetworkDeviceStateReasonModemNotFound = 43, + NetworkDeviceStateReasonBtFailed = 44, + NetworkDeviceStateReasonGsmSimNotInserted = 45, + NetworkDeviceStateReasonGsmSimPinRequired = 46, + NetworkDeviceStateReasonGsmSimPukRequired = 47, + NetworkDeviceStateReasonGsmSimWrong = 48, + NetworkDeviceStateReasonInfinibandMode = 49, + NetworkDeviceStateReasonDependencyFailed = 50, + NetworkDeviceStateReasonBR2684Failed = 51, + NetworkDeviceStateReasonModemManagerUnavailable = 52, + NetworkDeviceStateReasonSsidNotFound = 53, + NetworkDeviceStateReasonSecondaryConnectionFailed = 54, + NetworkDeviceStateReasonDcbFoecFailed = 55, + NetworkDeviceStateReasonTeamdControlFailed = 56, + NetworkDeviceStateReasonModemFailed = 57, + NetworkDeviceStateReasonModemAvailable = 58, + NetworkDeviceStateReasonSimPinIncorrect = 59, + NetworkDeviceStateReasonNewActivision = 60, + NetworkDeviceStateReasonParentChanged = 61, + NetworkDeviceStateReasonParentManagedChanged = 62 }; explicit WirelessNetworkManager(const QDBusObjectPath &objectPath, QObject *parent = 0); @@ -134,17 +134,17 @@ public: bool connected() const; bool managed() const; - DeviceState state() const; - DeviceStateReason stateReason() const; + NetworkDeviceState state() const; + NetworkDeviceStateReason stateReason() const; void scanWirelessNetworks(); QList accessPoints(); - WirelessAccessPoint * getAccessPoint(const QString &ssid); - WirelessAccessPoint * getAccessPoint(const QDBusObjectPath &objectPath); + WirelessAccessPoint *getAccessPoint(const QString &ssid); + WirelessAccessPoint *getAccessPoint(const QDBusObjectPath &objectPath); - static QString deviceStateToString(const DeviceState &state); - static QString deviceStateReasonToString(const DeviceStateReason &stateReason); + static QString deviceStateToString(const NetworkDeviceState &state); + static QString deviceStateReasonToString(const NetworkDeviceStateReason &stateReason); private: QDBusObjectPath m_objectPath; @@ -158,8 +158,8 @@ private: // Can change bool m_connected; bool m_managed; - DeviceState m_state; - DeviceStateReason m_stateReason; + NetworkDeviceState m_state; + NetworkDeviceStateReason m_stateReason; QHash m_accessPointsTable; @@ -167,8 +167,8 @@ private: void readWirelessDeviceProperties(); void setConnected(const bool &connected); - void setState(const DeviceState &state); - void setStateReason(const DeviceStateReason &stateReason); + void setState(const NetworkDeviceState &state); + void setStateReason(const NetworkDeviceStateReason &stateReason); void setManaged(const bool &managed); private slots: @@ -180,7 +180,7 @@ private slots: signals: void connectedChanged(const bool &connected); void managedChanged(const bool &managed); - void stateChanged(const DeviceState &state); + void stateChanged(const NetworkDeviceState &state); }; QDebug operator<<(QDebug debug, WirelessNetworkManager *manager);