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 }