Warning, file /frameworks/networkmanager-qt/src/connection.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2008, 2009 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net>
0004     SPDX-FileCopyrightText: 2011-2013 Lamarque V. Souza <lamarque@kde.org>
0005     SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0008 */
0009 
0010 #include "connection_p.h"
0011 
0012 #undef signals
0013 #include <libnm/NetworkManager.h>
0014 #define signals Q_SIGNALS
0015 
0016 #include <QDBusConnection>
0017 #include <QDBusPendingCallWatcher>
0018 
0019 #include "nmdebug.h"
0020 
0021 NetworkManager::ConnectionPrivate::ConnectionPrivate(const QString &path, Connection *q)
0022 #ifdef NMQT_STATIC
0023     : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::sessionBus())
0024 #else
0025     : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::systemBus())
0026 #endif
0027     , q_ptr(q)
0028 {
0029 }
0030 
0031 NetworkManager::Connection::Connection(const QString &path, QObject *parent)
0032     : QObject(parent)
0033     , d_ptr(new ConnectionPrivate(path, this))
0034 {
0035     Q_D(Connection);
0036 
0037     qDBusRegisterMetaType<NMVariantMapMap>();
0038     QDBusReply<NMVariantMapMap> reply = d->iface.GetSettings();
0039     if (reply.isValid()) {
0040         d->updateSettings(reply.value());
0041     } else {
0042         d->updateSettings();
0043     }
0044     d->path = path;
0045     // qCDebug(NMQT) << m_connection;
0046 
0047     connect(&d->iface, &OrgFreedesktopNetworkManagerSettingsConnectionInterface::Updated, d, &ConnectionPrivate::onConnectionUpdated);
0048     connect(&d->iface, &OrgFreedesktopNetworkManagerSettingsConnectionInterface::Removed, d, &ConnectionPrivate::onConnectionRemoved);
0049 
0050     QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE,
0051                                          d->path,
0052                                          NetworkManagerPrivate::FDO_DBUS_PROPERTIES,
0053                                          QLatin1String("PropertiesChanged"),
0054                                          d,
0055                                          SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList)));
0056     d->unsaved = d->iface.unsaved();
0057 }
0058 
0059 NetworkManager::Connection::~Connection()
0060 {
0061     delete d_ptr;
0062 }
0063 
0064 bool NetworkManager::Connection::isValid() const
0065 {
0066     Q_D(const Connection);
0067     return d->iface.isValid();
0068 }
0069 
0070 QString NetworkManager::Connection::uuid() const
0071 {
0072     Q_D(const Connection);
0073     return d->uuid;
0074 }
0075 
0076 QString NetworkManager::Connection::name() const
0077 {
0078     Q_D(const Connection);
0079     return d->id;
0080 }
0081 
0082 bool NetworkManager::Connection::isUnsaved() const
0083 {
0084     Q_D(const Connection);
0085     return d->unsaved;
0086 }
0087 
0088 NetworkManager::ConnectionSettings::Ptr NetworkManager::Connection::settings()
0089 {
0090     Q_D(Connection);
0091 
0092     if (d->connection.isNull()) {
0093         d->connection = ConnectionSettings::Ptr(new ConnectionSettings(d->settings));
0094     }
0095     return d->connection;
0096 }
0097 
0098 QDBusPendingReply<NMVariantMapMap> NetworkManager::Connection::secrets(const QString &setting)
0099 {
0100     Q_D(Connection);
0101     return d->iface.GetSecrets(setting);
0102 }
0103 
0104 QDBusPendingReply<> NetworkManager::Connection::update(const NMVariantMapMap &settings)
0105 {
0106     Q_D(Connection);
0107     return d->iface.Update(settings);
0108 }
0109 
0110 QDBusPendingReply<> NetworkManager::Connection::updateUnsaved(const NMVariantMapMap &settings)
0111 {
0112     Q_D(Connection);
0113     return d->iface.UpdateUnsaved(settings);
0114 }
0115 
0116 QDBusPendingReply<> NetworkManager::Connection::save()
0117 {
0118     Q_D(Connection);
0119     return d->iface.Save();
0120 }
0121 
0122 QDBusPendingReply<> NetworkManager::Connection::clearSecrets()
0123 {
0124     Q_D(Connection);
0125     return d->iface.ClearSecrets();
0126 }
0127 
0128 QDBusPendingReply<> NetworkManager::Connection::remove()
0129 {
0130     Q_D(Connection);
0131     return d->iface.Delete();
0132 }
0133 
0134 QString NetworkManager::Connection::path() const
0135 {
0136     Q_D(const Connection);
0137     return d->path;
0138 }
0139 
0140 void NetworkManager::ConnectionPrivate::onConnectionUpdated()
0141 {
0142     Q_Q(Connection);
0143     QDBusReply<NMVariantMapMap> reply = iface.GetSettings();
0144     if (reply.isValid()) {
0145         updateSettings(reply.value());
0146     } else {
0147         updateSettings();
0148     }
0149     Q_EMIT q->updated();
0150 }
0151 
0152 void NetworkManager::ConnectionPrivate::onConnectionRemoved()
0153 {
0154     Q_Q(Connection);
0155     QString tmpPath = path;
0156     updateSettings();
0157     Q_EMIT q->removed(tmpPath);
0158 }
0159 
0160 void NetworkManager::ConnectionPrivate::dbusPropertiesChanged(const QString &interfaceName,
0161                                                               const QVariantMap &properties,
0162                                                               const QStringList &invalidatedProperties)
0163 {
0164     Q_UNUSED(invalidatedProperties);
0165     if (interfaceName == QLatin1String("org.freedesktop.NetworkManager.Settings.Connection")) {
0166         onPropertiesChanged(properties);
0167     }
0168 }
0169 
0170 void NetworkManager::ConnectionPrivate::onPropertiesChanged(const QVariantMap &properties)
0171 {
0172     Q_Q(Connection);
0173     QVariantMap::const_iterator it = properties.constBegin();
0174     while (it != properties.constEnd()) {
0175         const QString property = it.key();
0176         if (property == QLatin1String("Unsaved")) {
0177             unsaved = it->toBool();
0178             Q_EMIT q->unsavedChanged(unsaved);
0179         } else {
0180             qCWarning(NMQT) << Q_FUNC_INFO << "Unhandled property" << property;
0181         }
0182         ++it;
0183     }
0184 }
0185 
0186 void NetworkManager::ConnectionPrivate::updateSettings(const NMVariantMapMap &newSettings)
0187 {
0188     settings = newSettings;
0189     if (settings.contains(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME))) {
0190         QVariantMap connectionSetting = settings.value(QLatin1String(NM_SETTING_CONNECTION_SETTING_NAME));
0191         if (connectionSetting.contains(QLatin1String(NM_SETTING_CONNECTION_UUID))) {
0192             uuid = connectionSetting.value(QLatin1String(NM_SETTING_CONNECTION_UUID)).toString();
0193         }
0194         if (connectionSetting.contains(QLatin1String(NM_SETTING_CONNECTION_ID))) {
0195             id = connectionSetting.value(QLatin1String(NM_SETTING_CONNECTION_ID)).toString();
0196         }
0197     } else if (newSettings.isEmpty()) {
0198         uuid.clear();
0199         id.clear();
0200     }
0201     connection.clear();
0202 }