add network manager api
This commit is contained in:
parent
642b5c8331
commit
22d5dc1bf6
@ -372,27 +372,37 @@ WebSocketServer *GuhCore::webSocketServer() const
|
|||||||
return m_webSocketServer;
|
return m_webSocketServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns a pointer to the \l{CloudManager} instance owned by GuhCore. */
|
||||||
CloudManager *GuhCore::cloudManager() const
|
CloudManager *GuhCore::cloudManager() const
|
||||||
{
|
{
|
||||||
return m_cloudManager;
|
return m_cloudManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns a pointer to the \l{ServerManager} instance owned by GuhCore. */
|
||||||
ServerManager *GuhCore::serverManager() const
|
ServerManager *GuhCore::serverManager() const
|
||||||
{
|
{
|
||||||
return m_serverManager;
|
return m_serverManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns the list of available system languages. */
|
||||||
QStringList GuhCore::getAvailableLanguages()
|
QStringList GuhCore::getAvailableLanguages()
|
||||||
{
|
{
|
||||||
// TODO: parse available translation files
|
// TODO: parse available translation files
|
||||||
return QStringList() << "en_US" << "de_DE";
|
return QStringList() << "en_US" << "de_DE";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns a pointer to the \l{BluetoothServer} instance owned by GuhCore. */
|
||||||
BluetoothServer *GuhCore::bluetoothServer() const
|
BluetoothServer *GuhCore::bluetoothServer() const
|
||||||
{
|
{
|
||||||
return m_bluetoothServer;
|
return m_bluetoothServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns a pointer to the \l{NetworkManager} instance owned by GuhCore. */
|
||||||
|
NetworkManager *GuhCore::networkManager() const
|
||||||
|
{
|
||||||
|
return m_networkManager;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TESTING_ENABLED
|
#ifdef TESTING_ENABLED
|
||||||
MockTcpServer *GuhCore::tcpServer() const
|
MockTcpServer *GuhCore::tcpServer() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -87,6 +87,7 @@ public:
|
|||||||
CloudManager *cloudManager() const;
|
CloudManager *cloudManager() const;
|
||||||
ServerManager *serverManager() const;
|
ServerManager *serverManager() const;
|
||||||
BluetoothServer *bluetoothServer() const;
|
BluetoothServer *bluetoothServer() const;
|
||||||
|
NetworkManager *networkManager() const;
|
||||||
|
|
||||||
static QStringList getAvailableLanguages();
|
static QStringList getAvailableLanguages();
|
||||||
|
|
||||||
|
|||||||
@ -57,6 +57,7 @@
|
|||||||
#include "websocketserver.h"
|
#include "websocketserver.h"
|
||||||
#include "cloudhandler.h"
|
#include "cloudhandler.h"
|
||||||
#include "configurationhandler.h"
|
#include "configurationhandler.h"
|
||||||
|
#include "networkmanagerhandler.h"
|
||||||
|
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@ -174,6 +175,7 @@ void JsonRPCServer::setup()
|
|||||||
registerHandler(new StateHandler(this));
|
registerHandler(new StateHandler(this));
|
||||||
registerHandler(new CloudHandler(this));
|
registerHandler(new CloudHandler(this));
|
||||||
registerHandler(new ConfigurationHandler(this));
|
registerHandler(new ConfigurationHandler(this));
|
||||||
|
registerHandler(new NetworkManagerHandler(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonRPCServer::processData(const QUuid &clientId, const QString &targetNamespace, const QString &method, const QVariantMap &message)
|
void JsonRPCServer::processData(const QUuid &clientId, const QString &targetNamespace, const QString &method, const QVariantMap &message)
|
||||||
|
|||||||
@ -111,6 +111,7 @@ QVariantMap JsonTypes::s_timeDescriptor;
|
|||||||
QVariantMap JsonTypes::s_calendarItem;
|
QVariantMap JsonTypes::s_calendarItem;
|
||||||
QVariantMap JsonTypes::s_timeEventItem;
|
QVariantMap JsonTypes::s_timeEventItem;
|
||||||
QVariantMap JsonTypes::s_repeatingOption;
|
QVariantMap JsonTypes::s_repeatingOption;
|
||||||
|
QVariantMap JsonTypes::s_wirelessAccessPoint;
|
||||||
|
|
||||||
void JsonTypes::init()
|
void JsonTypes::init()
|
||||||
{
|
{
|
||||||
@ -320,6 +321,11 @@ void JsonTypes::init()
|
|||||||
s_repeatingOption.insert("o:weekDays", QVariantList() << basicTypeToString(Int));
|
s_repeatingOption.insert("o:weekDays", QVariantList() << basicTypeToString(Int));
|
||||||
s_repeatingOption.insert("o:monthDays", QVariantList() << basicTypeToString(Int));
|
s_repeatingOption.insert("o:monthDays", QVariantList() << basicTypeToString(Int));
|
||||||
|
|
||||||
|
s_wirelessAccessPoint.insert("ssid", basicTypeToString(QVariant::String));
|
||||||
|
s_wirelessAccessPoint.insert("macAddress", basicTypeToString(QVariant::String));
|
||||||
|
s_wirelessAccessPoint.insert("frequency", basicTypeToString(QVariant::Double));
|
||||||
|
s_wirelessAccessPoint.insert("signalStrength", basicTypeToString(QVariant::Int));
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,6 +397,7 @@ QVariantMap JsonTypes::allTypes()
|
|||||||
allTypes.insert("CalendarItem", calendarItemDescription());
|
allTypes.insert("CalendarItem", calendarItemDescription());
|
||||||
allTypes.insert("TimeEventItem", timeEventItemDescription());
|
allTypes.insert("TimeEventItem", timeEventItemDescription());
|
||||||
allTypes.insert("RepeatingOption", repeatingOptionDescription());
|
allTypes.insert("RepeatingOption", repeatingOptionDescription());
|
||||||
|
allTypes.insert("WirelessAccessPoint", wirelessAccessPointDescription());
|
||||||
|
|
||||||
return allTypes;
|
return allTypes;
|
||||||
}
|
}
|
||||||
@ -943,6 +950,18 @@ QVariantMap JsonTypes::packTimeDescriptor(const TimeDescriptor &timeDescriptor)
|
|||||||
return timeDescriptorVariant;
|
return timeDescriptorVariant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns a variant map of the given \a wirelessAccessPoint. */
|
||||||
|
QVariantMap JsonTypes::packWirelessAccessPoint(WirelessAccessPoint *wirelessAccessPoint)
|
||||||
|
{
|
||||||
|
QVariantMap wirelessAccessPointVariant;
|
||||||
|
wirelessAccessPointVariant.insert("ssid", wirelessAccessPoint->ssid());
|
||||||
|
wirelessAccessPointVariant.insert("macAddress", wirelessAccessPoint->macAddress());
|
||||||
|
wirelessAccessPointVariant.insert("frequency", wirelessAccessPoint->frequency());
|
||||||
|
wirelessAccessPointVariant.insert("signalStrength", wirelessAccessPoint->signalStrength());
|
||||||
|
|
||||||
|
return wirelessAccessPointVariant;
|
||||||
|
}
|
||||||
|
|
||||||
/*! Returns a variant list of the supported vendors. */
|
/*! Returns a variant list of the supported vendors. */
|
||||||
QVariantList JsonTypes::packSupportedVendors()
|
QVariantList JsonTypes::packSupportedVendors()
|
||||||
{
|
{
|
||||||
@ -1503,6 +1522,10 @@ QPair<bool, QString> JsonTypes::validateProperty(const QVariant &templateValue,
|
|||||||
QString errorString = QString("Param %1 is not a uint.").arg(value.toString());
|
QString errorString = QString("Param %1 is not a uint.").arg(value.toString());
|
||||||
return report(value.canConvert(QVariant::UInt), errorString);
|
return report(value.canConvert(QVariant::UInt), errorString);
|
||||||
}
|
}
|
||||||
|
if (strippedTemplateValue == JsonTypes::basicTypeToString(QVariant::Double)) {
|
||||||
|
QString errorString = QString("Param %1 is not a double.").arg(value.toString());
|
||||||
|
return report(value.canConvert(QVariant::Double), errorString);
|
||||||
|
}
|
||||||
if (strippedTemplateValue == JsonTypes::basicTypeToString(QVariant::Time)) {
|
if (strippedTemplateValue == JsonTypes::basicTypeToString(QVariant::Time)) {
|
||||||
QString errorString = QString("Param %1 is not a time (hh:mm).").arg(value.toString());
|
QString errorString = QString("Param %1 is not a time (hh:mm).").arg(value.toString());
|
||||||
return report(value.canConvert(QVariant::Time), errorString);
|
return report(value.canConvert(QVariant::Time), errorString);
|
||||||
@ -1697,6 +1720,12 @@ QPair<bool, QString> JsonTypes::validateVariant(const QVariant &templateVariant,
|
|||||||
qCWarning(dcJsonRpc) << "TimeEventItem not matching";
|
qCWarning(dcJsonRpc) << "TimeEventItem not matching";
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
} else if (refName == wirelessAccessPointRef()) {
|
||||||
|
QPair<bool, QString> result = validateMap(wirelessAccessPointDescription(), variant.toMap());
|
||||||
|
if (!result.first) {
|
||||||
|
qCWarning(dcJsonRpc) << "WirelessAccessPoint not matching";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
} else if (refName == basicTypeRef()) {
|
} else if (refName == basicTypeRef()) {
|
||||||
QPair<bool, QString> result = validateBasicType(variant);
|
QPair<bool, QString> result = validateBasicType(variant);
|
||||||
if (!result.first) {
|
if (!result.first) {
|
||||||
|
|||||||
@ -47,6 +47,8 @@
|
|||||||
|
|
||||||
#include "cloud/cloudconnection.h"
|
#include "cloud/cloudconnection.h"
|
||||||
|
|
||||||
|
#include "networkmanager/wirelessaccesspoint.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
@ -154,6 +156,7 @@ public:
|
|||||||
DECLARE_OBJECT(calendarItem, "CalendarItem")
|
DECLARE_OBJECT(calendarItem, "CalendarItem")
|
||||||
DECLARE_OBJECT(timeEventItem, "TimeEventItem")
|
DECLARE_OBJECT(timeEventItem, "TimeEventItem")
|
||||||
DECLARE_OBJECT(repeatingOption, "RepeatingOption")
|
DECLARE_OBJECT(repeatingOption, "RepeatingOption")
|
||||||
|
DECLARE_OBJECT(wirelessAccessPoint, "WirelessAccessPoint")
|
||||||
|
|
||||||
// pack types
|
// pack types
|
||||||
static QVariantMap packEventType(const EventType &eventType);
|
static QVariantMap packEventType(const EventType &eventType);
|
||||||
@ -182,6 +185,7 @@ public:
|
|||||||
static QVariantMap packCalendarItem(const CalendarItem &calendarItem);
|
static QVariantMap packCalendarItem(const CalendarItem &calendarItem);
|
||||||
static QVariantMap packTimeEventItem(const TimeEventItem &timeEventItem);
|
static QVariantMap packTimeEventItem(const TimeEventItem &timeEventItem);
|
||||||
static QVariantMap packTimeDescriptor(const TimeDescriptor &timeDescriptor);
|
static QVariantMap packTimeDescriptor(const TimeDescriptor &timeDescriptor);
|
||||||
|
static QVariantMap packWirelessAccessPoint(WirelessAccessPoint *wirelessAccessPoint);
|
||||||
|
|
||||||
// pack resources
|
// pack resources
|
||||||
static QVariantList packRules(const QList<Rule> rules);
|
static QVariantList packRules(const QList<Rule> rules);
|
||||||
|
|||||||
60
server/jsonrpc/networkmanagerhandler.cpp
Normal file
60
server/jsonrpc/networkmanagerhandler.cpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2016 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* Guh is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, version 2 of the License. *
|
||||||
|
* *
|
||||||
|
* Guh is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#include "networkmanagerhandler.h"
|
||||||
|
#include "loggingcategories.h"
|
||||||
|
#include "guhcore.h"
|
||||||
|
#include "networkmanager/networkmanager.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace guhserver {
|
||||||
|
|
||||||
|
NetworkManagerHandler::NetworkManagerHandler(QObject *parent) :
|
||||||
|
JsonHandler(parent)
|
||||||
|
{
|
||||||
|
QVariantMap params;
|
||||||
|
QVariantMap returns;
|
||||||
|
|
||||||
|
params.clear(); returns.clear();
|
||||||
|
setDescription("GetWirelessAccessPoints", "Get the current list of wireless network access points.");
|
||||||
|
setParams("GetWirelessAccessPoints", params);
|
||||||
|
returns.insert("wirelessAccessPoints", QVariantList() << JsonTypes::wirelessAccessPointRef());
|
||||||
|
setReturns("GetWirelessAccessPoints", returns);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString NetworkManagerHandler::name() const
|
||||||
|
{
|
||||||
|
return "NetworkManager";
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonReply *NetworkManagerHandler::GetWirelessAccessPoints(const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
Q_UNUSED(params);
|
||||||
|
|
||||||
|
QVariantList wirelessAccessPoints;
|
||||||
|
foreach (WirelessAccessPoint *wirelessAccessPoint, GuhCore::instance()->networkManager()->wirelessNetworkManager()->accessPoints())
|
||||||
|
wirelessAccessPoints.append(JsonTypes::packWirelessAccessPoint(wirelessAccessPoint));
|
||||||
|
|
||||||
|
QVariantMap returns;
|
||||||
|
returns.insert("wirelessAccessPoints", wirelessAccessPoints);
|
||||||
|
return createReply(returns);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
48
server/jsonrpc/networkmanagerhandler.h
Normal file
48
server/jsonrpc/networkmanagerhandler.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2016 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* Guh is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, version 2 of the License. *
|
||||||
|
* *
|
||||||
|
* Guh is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#ifndef NETWORKMANAGERHANDLER_H
|
||||||
|
#define NETWORKMANAGERHANDLER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "jsonhandler.h"
|
||||||
|
|
||||||
|
namespace guhserver {
|
||||||
|
|
||||||
|
class NetworkManagerHandler : public JsonHandler
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit NetworkManagerHandler(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
|
||||||
|
Q_INVOKABLE JsonReply *GetWirelessAccessPoints(const QVariantMap ¶ms);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NETWORKMANAGERHANDLER_H
|
||||||
@ -34,6 +34,7 @@ static const QString deviceInterfaceString("org.freedesktop.NetworkManager.Devic
|
|||||||
static const QString wirelessInterfaceString("org.freedesktop.NetworkManager.Device.Wireless");
|
static const QString wirelessInterfaceString("org.freedesktop.NetworkManager.Device.Wireless");
|
||||||
static const QString accessPointInterfaceString("org.freedesktop.NetworkManager.AccessPoint");
|
static const QString accessPointInterfaceString("org.freedesktop.NetworkManager.AccessPoint");
|
||||||
static const QString settingsInterfaceString("org.freedesktop.NetworkManager.Settings");
|
static const QString settingsInterfaceString("org.freedesktop.NetworkManager.Settings");
|
||||||
|
static const QString connectionsInterfaceString("org.freedesktop.NetworkManager.Settings.Connection");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,64 @@
|
|||||||
#include "networkconnection.h"
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2016 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* Guh is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, version 2 of the License. *
|
||||||
|
* *
|
||||||
|
* Guh is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
NetworkConnection::NetworkConnection(QObject *parent) : QObject(parent)
|
#include "networkconnection.h"
|
||||||
|
#include "dbus-interfaces.h"
|
||||||
|
#include "loggingcategories.h"
|
||||||
|
|
||||||
|
#include <QJsonDocument>
|
||||||
|
|
||||||
|
namespace guhserver {
|
||||||
|
|
||||||
|
NetworkConnection::NetworkConnection(const QDBusObjectPath &objectPath, QObject *parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_objectPath(objectPath)
|
||||||
{
|
{
|
||||||
|
qDBusRegisterMetaType<ConnectionSettings>();
|
||||||
|
|
||||||
|
QDBusInterface connectionInterface(serviceString, m_objectPath.path(), connectionsInterfaceString, QDBusConnection::systemBus());
|
||||||
|
if(!connectionInterface.isValid()) {
|
||||||
|
qCWarning(dcNetworkManager()) << "Invalid connection dbus interface";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDBusMessage query = connectionInterface.call("GetSettings");
|
||||||
|
if(query.type() != QDBusMessage::ReplyMessage) {
|
||||||
|
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.arguments().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
||||||
|
ConnectionSettings settingsMap = qdbus_cast<ConnectionSettings>(argument);
|
||||||
|
|
||||||
|
foreach (const QString &category, settingsMap.keys())
|
||||||
|
if (category == "connection")
|
||||||
|
qCDebug(dcNetworkManager()) << " --> " << category << qUtf8Printable(QJsonDocument::fromVariant(settingsMap.value(category)).toJson(QJsonDocument::Indented));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QDBusObjectPath NetworkConnection::objectPath() const
|
||||||
|
{
|
||||||
|
return m_objectPath;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +1,58 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2016 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* Guh is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, version 2 of the License. *
|
||||||
|
* *
|
||||||
|
* Guh is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with guh. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef NETWORKCONNECTION_H
|
#ifndef NETWORKCONNECTION_H
|
||||||
#define NETWORKCONNECTION_H
|
#define NETWORKCONNECTION_H
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QDBusMetaType>
|
||||||
|
#include <QDBusObjectPath>
|
||||||
|
#include <QDBusConnection>
|
||||||
|
#include <QDBusInterface>
|
||||||
|
#include <QDBusArgument>
|
||||||
|
|
||||||
|
namespace guhserver {
|
||||||
|
|
||||||
|
typedef QMap<QString, QVariantMap> ConnectionSettings;
|
||||||
|
|
||||||
class NetworkConnection : public QObject
|
class NetworkConnection : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit NetworkConnection(QObject *parent = 0);
|
explicit NetworkConnection(const QDBusObjectPath &objectPath, QObject *parent = 0);
|
||||||
|
|
||||||
|
QDBusObjectPath objectPath() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QDBusObjectPath m_objectPath;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NETWORKCONNECTION_H
|
}
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(guhserver::ConnectionSettings)
|
||||||
|
|
||||||
|
|
||||||
|
#endif // NETWORKCONNECTION_H
|
||||||
|
|||||||
@ -44,21 +44,7 @@ NetworkManager::NetworkManager(QObject *parent) :
|
|||||||
m_wirelessEnabled = m_networkManagerInterface->property("WirelessEnabled").toBool();
|
m_wirelessEnabled = m_networkManagerInterface->property("WirelessEnabled").toBool();
|
||||||
|
|
||||||
qCDebug(dcNetworkManager()) << "Networkmanager version" << m_version;
|
qCDebug(dcNetworkManager()) << "Networkmanager version" << m_version;
|
||||||
|
loadDevices();
|
||||||
// Get network devices
|
|
||||||
QDBusMessage query = m_networkManagerInterface->call("GetDevices");
|
|
||||||
if(query.type() != QDBusMessage::ReplyMessage) {
|
|
||||||
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
|
||||||
argument.beginArray();
|
|
||||||
while(!argument.atEnd()) {
|
|
||||||
QDBusObjectPath deviceObjectPath = qdbus_cast<QDBusObjectPath>(argument);
|
|
||||||
onDeviceAdded(deviceObjectPath);
|
|
||||||
}
|
|
||||||
argument.endArray();
|
|
||||||
|
|
||||||
// Connect signals
|
// Connect signals
|
||||||
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "StateChanged", this, SLOT(onStateChanged(uint)));
|
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "StateChanged", this, SLOT(onStateChanged(uint)));
|
||||||
@ -66,6 +52,7 @@ NetworkManager::NetworkManager(QObject *parent) :
|
|||||||
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "DeviceRemoved", this, SLOT(onDeviceRemoved(QDBusObjectPath)));
|
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "DeviceRemoved", this, SLOT(onDeviceRemoved(QDBusObjectPath)));
|
||||||
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "PropertiesChanged", this, SLOT(onPropertiesChanged(QVariantMap)));
|
QDBusConnection::systemBus().connect(serviceString, pathString, serviceString, "PropertiesChanged", this, SLOT(onPropertiesChanged(QVariantMap)));
|
||||||
|
|
||||||
|
// Create settings
|
||||||
m_networkSettings = new NetworkSettings(this);
|
m_networkSettings = new NetworkSettings(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -108,6 +95,11 @@ QList<NetworkDevice *> NetworkManager::networkDevices() const
|
|||||||
return m_networkDevices.values();
|
return m_networkDevices.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WirelessNetworkManager *NetworkManager::wirelessNetworkManager() const
|
||||||
|
{
|
||||||
|
return m_wirelessNetworkManager;
|
||||||
|
}
|
||||||
|
|
||||||
QString NetworkManager::version() const
|
QString NetworkManager::version() const
|
||||||
{
|
{
|
||||||
return m_version;
|
return m_version;
|
||||||
@ -174,6 +166,27 @@ bool NetworkManager::enableWireless()
|
|||||||
return m_networkManagerInterface->setProperty("WirelessEnabled", true);
|
return m_networkManagerInterface->setProperty("WirelessEnabled", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkManager::loadDevices()
|
||||||
|
{
|
||||||
|
// Get network devices
|
||||||
|
QDBusMessage query = m_networkManagerInterface->call("GetDevices");
|
||||||
|
if(query.type() != QDBusMessage::ReplyMessage) {
|
||||||
|
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.arguments().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
||||||
|
argument.beginArray();
|
||||||
|
while(!argument.atEnd()) {
|
||||||
|
QDBusObjectPath deviceObjectPath = qdbus_cast<QDBusObjectPath>(argument);
|
||||||
|
onDeviceAdded(deviceObjectPath);
|
||||||
|
}
|
||||||
|
argument.endArray();
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkManager::setVersion(const QString &version)
|
void NetworkManager::setVersion(const QString &version)
|
||||||
{
|
{
|
||||||
m_version = version;
|
m_version = version;
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
#include "networkdevice.h"
|
#include "networkdevice.h"
|
||||||
#include "networksettings.h"
|
#include "networksettings.h"
|
||||||
|
|
||||||
// Note: https://developer.gnome.org/NetworkManager/unstable/spec.html
|
// Docs: https://developer.gnome.org/NetworkManager/unstable/spec.html
|
||||||
|
|
||||||
namespace guhserver {
|
namespace guhserver {
|
||||||
|
|
||||||
@ -71,15 +71,19 @@ public:
|
|||||||
|
|
||||||
QList<NetworkDevice *> networkDevices() const;
|
QList<NetworkDevice *> networkDevices() const;
|
||||||
|
|
||||||
|
WirelessNetworkManager *wirelessNetworkManager() const;
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
QString version() const;
|
QString version() const;
|
||||||
NetworkManagerState state() const;
|
NetworkManagerState state() const;
|
||||||
NetworkManagerConnectivityState connectivityState() const;
|
NetworkManagerConnectivityState connectivityState() const;
|
||||||
|
|
||||||
|
// Networking
|
||||||
bool networkingEnabled() const;
|
bool networkingEnabled() const;
|
||||||
bool enableNetworking();
|
bool enableNetworking();
|
||||||
bool disableNetworking();
|
bool disableNetworking();
|
||||||
|
|
||||||
|
// Wireless Networking
|
||||||
bool wirelessEnabled() const;
|
bool wirelessEnabled() const;
|
||||||
bool enableWireless();
|
bool enableWireless();
|
||||||
bool disableWireless();
|
bool disableWireless();
|
||||||
@ -98,6 +102,8 @@ private:
|
|||||||
bool m_networkingEnabled;
|
bool m_networkingEnabled;
|
||||||
bool m_wirelessEnabled;
|
bool m_wirelessEnabled;
|
||||||
|
|
||||||
|
void loadDevices();
|
||||||
|
|
||||||
void setVersion(const QString &version);
|
void setVersion(const QString &version);
|
||||||
void setNetworkingEnabled(const bool &enabled);
|
void setNetworkingEnabled(const bool &enabled);
|
||||||
void setWirelessEnabled(const bool &enabled);
|
void setWirelessEnabled(const bool &enabled);
|
||||||
|
|||||||
@ -21,29 +21,24 @@
|
|||||||
#include "networksettings.h"
|
#include "networksettings.h"
|
||||||
#include "dbus-interfaces.h"
|
#include "dbus-interfaces.h"
|
||||||
#include "loggingcategories.h"
|
#include "loggingcategories.h"
|
||||||
|
#include "networkconnection.h"
|
||||||
|
|
||||||
namespace guhserver {
|
namespace guhserver {
|
||||||
|
|
||||||
NetworkSettings::NetworkSettings(QObject *parent) : QObject(parent)
|
NetworkSettings::NetworkSettings(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
QDBusConnection systemBus = QDBusConnection::systemBus();
|
|
||||||
if (!systemBus.isConnected()) {
|
|
||||||
qCWarning(dcNetworkManager()) << "System DBus not connected";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_settingsInterface = new QDBusInterface(serviceString, settingsPathString, settingsInterfaceString, QDBusConnection::systemBus(), this);
|
m_settingsInterface = new QDBusInterface(serviceString, settingsPathString, settingsInterfaceString, QDBusConnection::systemBus(), this);
|
||||||
if(!m_settingsInterface->isValid()) {
|
if(!m_settingsInterface->isValid()) {
|
||||||
qCWarning(dcNetworkManager()) << "Invalid DBus network settings interface";
|
qCWarning(dcNetworkManager()) << "Invalid DBus network settings interface";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadConnections();
|
||||||
|
|
||||||
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "NewConnection", this, SLOT(connectionAdded(QDBusObjectPath)));
|
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "NewConnection", this, SLOT(connectionAdded(QDBusObjectPath)));
|
||||||
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "ConnectionRemoved", this, SLOT(connectionRemoved(QDBusObjectPath)));
|
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "ConnectionRemoved", this, SLOT(connectionRemoved(QDBusObjectPath)));
|
||||||
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "PropertiesChanged", this, SLOT(propertiesChanged(QVariantMap)));
|
QDBusConnection::systemBus().connect(serviceString, settingsPathString, settingsInterfaceString, "PropertiesChanged", this, SLOT(propertiesChanged(QVariantMap)));
|
||||||
|
|
||||||
loadConnections();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkSettings::loadConnections()
|
void NetworkSettings::loadConnections()
|
||||||
@ -55,6 +50,9 @@ void NetworkSettings::loadConnections()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.arguments().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
||||||
argument.beginArray();
|
argument.beginArray();
|
||||||
while(!argument.atEnd()) {
|
while(!argument.atEnd()) {
|
||||||
@ -67,7 +65,12 @@ void NetworkSettings::loadConnections()
|
|||||||
|
|
||||||
void NetworkSettings::connectionAdded(const QDBusObjectPath &objectPath)
|
void NetworkSettings::connectionAdded(const QDBusObjectPath &objectPath)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NetworkConnection *connection = new NetworkConnection(objectPath, this);
|
||||||
|
m_connections.insert(objectPath, connection);
|
||||||
|
|
||||||
qCDebug(dcNetworkManager()) << "Settings: [+]" << objectPath.path();
|
qCDebug(dcNetworkManager()) << "Settings: [+]" << objectPath.path();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkSettings::connectionRemoved(const QDBusObjectPath &objectPath)
|
void NetworkSettings::connectionRemoved(const QDBusObjectPath &objectPath)
|
||||||
|
|||||||
@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
namespace guhserver {
|
namespace guhserver {
|
||||||
|
|
||||||
|
class NetworkConnection;
|
||||||
|
|
||||||
class NetworkSettings : public QObject
|
class NetworkSettings : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -37,6 +39,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QDBusInterface *m_settingsInterface;
|
QDBusInterface *m_settingsInterface;
|
||||||
|
QHash<QDBusObjectPath, NetworkConnection *> m_connections;
|
||||||
|
|
||||||
void loadConnections();
|
void loadConnections();
|
||||||
|
|
||||||
|
|||||||
@ -161,12 +161,15 @@ void WirelessNetworkManager::readAccessPoints()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDBusMessage query= wirelessInterface.call("GetAccessPoints");
|
QDBusMessage query = wirelessInterface.call("GetAccessPoints");
|
||||||
if(query.type() != QDBusMessage::ReplyMessage) {
|
if(query.type() != QDBusMessage::ReplyMessage) {
|
||||||
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();
|
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.arguments().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
const QDBusArgument &argument = query.arguments().at(0).value<QDBusArgument>();
|
||||||
argument.beginArray();
|
argument.beginArray();
|
||||||
while(!argument.atEnd()) {
|
while(!argument.atEnd()) {
|
||||||
|
|||||||
@ -25,6 +25,7 @@ HEADERS += $$top_srcdir/server/guhcore.h \
|
|||||||
$$top_srcdir/server/jsonrpc/logginghandler.h \
|
$$top_srcdir/server/jsonrpc/logginghandler.h \
|
||||||
$$top_srcdir/server/jsonrpc/cloudhandler.h \
|
$$top_srcdir/server/jsonrpc/cloudhandler.h \
|
||||||
$$top_srcdir/server/jsonrpc/configurationhandler.h \
|
$$top_srcdir/server/jsonrpc/configurationhandler.h \
|
||||||
|
$$top_srcdir/server/jsonrpc/networkmanagerhandler.h \
|
||||||
$$top_srcdir/server/logging/logging.h \
|
$$top_srcdir/server/logging/logging.h \
|
||||||
$$top_srcdir/server/logging/logengine.h \
|
$$top_srcdir/server/logging/logengine.h \
|
||||||
$$top_srcdir/server/logging/logfilter.h \
|
$$top_srcdir/server/logging/logfilter.h \
|
||||||
@ -90,6 +91,7 @@ SOURCES += $$top_srcdir/server/guhcore.cpp \
|
|||||||
$$top_srcdir/server/jsonrpc/logginghandler.cpp \
|
$$top_srcdir/server/jsonrpc/logginghandler.cpp \
|
||||||
$$top_srcdir/server/jsonrpc/cloudhandler.cpp \
|
$$top_srcdir/server/jsonrpc/cloudhandler.cpp \
|
||||||
$$top_srcdir/server/jsonrpc/configurationhandler.cpp \
|
$$top_srcdir/server/jsonrpc/configurationhandler.cpp \
|
||||||
|
$$top_srcdir/server/jsonrpc/networkmanagerhandler.cpp \
|
||||||
$$top_srcdir/server/logging/logengine.cpp \
|
$$top_srcdir/server/logging/logengine.cpp \
|
||||||
$$top_srcdir/server/logging/logfilter.cpp \
|
$$top_srcdir/server/logging/logfilter.cpp \
|
||||||
$$top_srcdir/server/logging/logentry.cpp \
|
$$top_srcdir/server/logging/logentry.cpp \
|
||||||
|
|||||||
Reference in New Issue
Block a user