File indexing completed on 2024-04-21 15:06:28

0001 /*
0002     SPDX-FileCopyrightText: 2008, 2010 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2011-2013 Lamarque Souza <lamarque@kde.org>
0004     SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com>
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 "manager.h"
0011 #include "manager_p.h"
0012 
0013 #include "macros.h"
0014 
0015 #undef signals
0016 #include <libnm/NetworkManager.h>
0017 #define signals Q_SIGNALS
0018 
0019 #include "adsldevice.h"
0020 #include "bluetoothdevice.h"
0021 #include "bonddevice.h"
0022 #include "bridgedevice.h"
0023 #include "dbus/deviceinterface.h"
0024 #include "device_p.h"
0025 #include "genericdevice.h"
0026 #include "gredevice.h"
0027 #include "infinibanddevice.h"
0028 #include "iptunneldevice.h"
0029 #include "macvlandevice.h"
0030 #include "modemdevice.h"
0031 #include "olpcmeshdevice.h"
0032 #include "settings.h"
0033 #include "settings_p.h"
0034 #include "tundevice.h"
0035 #include "vethdevice.h"
0036 #include "vlandevice.h"
0037 #include "vpnconnection.h"
0038 #include "wimaxdevice.h"
0039 #include "wireddevice.h"
0040 #include "wireguarddevice.h"
0041 #include "wirelessdevice.h"
0042 
0043 #include "nmdebug.h"
0044 
0045 #include <QDBusMetaType>
0046 #include <QDBusReply>
0047 #include <QTimer>
0048 
0049 #define DBUS_OBJECT_MANAGER "org.freedesktop.DBus.ObjectManager"
0050 #define DBUS_PROPERTIES "org.freedesktop.DBus.Properties"
0051 
0052 #ifdef NMQT_STATIC
0053 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1("org.kde.fakenetwork"));
0054 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1("/org/kde/fakenetwork"));
0055 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1("org.kde.fakenetwork"));
0056 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1("/org/kde/fakenetwork/Settings"));
0057 #else
0058 const QString NetworkManager::NetworkManagerPrivate::DBUS_SERVICE(QString::fromLatin1(NM_DBUS_SERVICE));
0059 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH(QString::fromLatin1(NM_DBUS_PATH));
0060 const QString NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_INTERFACE(QString::fromLatin1(NM_DBUS_INTERFACE));
0061 const QString NetworkManager::NetworkManagerPrivate::DBUS_SETTINGS_PATH(QString::fromLatin1(NM_DBUS_PATH_SETTINGS));
0062 #endif
0063 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_PROPERTIES(QString::fromLatin1(DBUS_PROPERTIES));
0064 const QString NetworkManager::NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER(QString::fromLatin1(DBUS_OBJECT_MANAGER));
0065 
0066 Q_GLOBAL_STATIC(NetworkManager::NetworkManagerPrivate, globalNetworkManager)
0067 
0068 NetworkManager::NetworkManagerPrivate::NetworkManagerPrivate()
0069 #ifdef NMQT_STATIC
0070     : watcher(DBUS_SERVICE, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this)
0071     , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::sessionBus())
0072 #else
0073     : watcher(DBUS_SERVICE, QDBusConnection::systemBus(), QDBusServiceWatcher::WatchForOwnerChange, this)
0074     , iface(NetworkManager::NetworkManagerPrivate::DBUS_SERVICE, NetworkManager::NetworkManagerPrivate::DBUS_DAEMON_PATH, QDBusConnection::systemBus())
0075 #endif
0076     , nmState(NetworkManager::Unknown)
0077     , m_connectivity(NetworkManager::UnknownConnectivity)
0078     , m_isNetworkingEnabled(false)
0079     , m_isWimaxEnabled(false)
0080     , m_isWimaxHardwareEnabled(false)
0081     , m_isWirelessEnabled(false)
0082     , m_isWirelessHardwareEnabled(false)
0083     , m_isWwanEnabled(false)
0084     , m_isWwanHardwareEnabled(false)
0085     , m_globalDnsConfiguration(NetworkManager::DnsConfiguration())
0086     , m_supportedInterfaceTypes(NetworkManager::Device::UnknownType)
0087 {
0088     connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceAdded, this, &NetworkManagerPrivate::onDeviceAdded);
0089     connect(&iface, &OrgFreedesktopNetworkManagerInterface::DeviceRemoved, this, &NetworkManagerPrivate::onDeviceRemoved);
0090 
0091 #ifndef NMQT_STATIC
0092     QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE,
0093                                          NetworkManagerPrivate::DBUS_DAEMON_PATH,
0094                                          NetworkManagerPrivate::FDO_DBUS_PROPERTIES,
0095                                          QLatin1String("PropertiesChanged"),
0096                                          this,
0097                                          SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList)));
0098 #else
0099     connect(&iface, &OrgFreedesktopNetworkManagerInterface::PropertiesChanged, this, &NetworkManagerPrivate::propertiesChanged);
0100 #endif
0101 
0102     // We register two listeners here:
0103     // - a ServiceRegistered listener for newer NM versions that connect to the bus when the interfaces
0104     //   we care about are already initialized
0105     // - and an InterfaceAdded listener for older NM versions that connect to the bus early,
0106     //   and then add interfaces dynamically
0107     iface.connection().connect(NetworkManagerPrivate::DBUS_SERVICE,
0108                                "/org/freedesktop",
0109                                NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER,
0110                                QLatin1String("InterfacesAdded"),
0111                                this,
0112                                SLOT(dbusInterfacesAdded(QDBusObjectPath, QVariantMap)));
0113 
0114     connect(&watcher, &QDBusServiceWatcher::serviceRegistered, this, &NetworkManagerPrivate::daemonRegistered);
0115     connect(&watcher, &QDBusServiceWatcher::serviceUnregistered, this, &NetworkManagerPrivate::daemonUnregistered);
0116 
0117     init();
0118 }
0119 
0120 void NetworkManager::NetworkManagerPrivate::parseVersion(const QString &version)
0121 {
0122     const QStringList sl = version.split('.');
0123 
0124     if (sl.size() > 2) {
0125         m_x = sl[0].toInt();
0126         m_y = sl[1].toInt();
0127         m_z = sl[2].toInt();
0128     } else {
0129         m_x = -1;
0130         m_y = -1;
0131         m_z = -1;
0132     }
0133 }
0134 
0135 void NetworkManager::NetworkManagerPrivate::init()
0136 {
0137     qDBusRegisterMetaType<UIntList>();
0138     qDBusRegisterMetaType<UIntListList>();
0139     //     qDBusRegisterMetaType<IpV6DBusAddress>();
0140     //     qDBusRegisterMetaType<IpV6DBusAddressList>();
0141     //     qDBusRegisterMetaType<IpV6DBusNameservers>();
0142     //     qDBusRegisterMetaType<IpV6DBusRoute>();
0143     //     qDBusRegisterMetaType<IpV6DBusRouteList>();
0144     qDBusRegisterMetaType<QList<QDBusObjectPath>>();
0145     qDBusRegisterMetaType<DeviceDBusStateReason>();
0146     qDBusRegisterMetaType<NMVariantMapMap>();
0147     qDBusRegisterMetaType<NMVariantMapList>();
0148     qDBusRegisterMetaType<NMStringMap>();
0149 
0150     m_version = iface.version();
0151     parseVersion(m_version);
0152     /* clang-format off */
0153     m_supportedInterfaceTypes = static_cast<NetworkManager::Device::Types>(
0154         NetworkManager::Device::Ethernet
0155         | NetworkManager::Device::Wifi
0156         | NetworkManager::Device::Modem
0157         | (checkVersion(1, 2, 0) ? 0 : NetworkManager::Device::Wimax)
0158         | NetworkManager::Device::Bluetooth
0159         | NetworkManager::Device::OlpcMesh
0160         | NetworkManager::Device::InfiniBand
0161         | NetworkManager::Device::Bond
0162         | NetworkManager::Device::Vlan
0163         | NetworkManager::Device::Adsl
0164         | NetworkManager::Device::Bridge
0165         | NetworkManager::Device::Generic
0166         | NetworkManager::Device::Team
0167         | NetworkManager::Device::MacVlan
0168         | NetworkManager::Device::Tun
0169         | NetworkManager::Device::Veth
0170         | NetworkManager::Device::IpTunnel
0171         | NetworkManager::Device::WireGuard);
0172     /* clang-format on */
0173 
0174     // Get all Manager's properties async
0175     QVariantMap initialProperties = retrieveInitialProperties(iface.staticInterfaceName(), DBUS_DAEMON_PATH);
0176     if (!initialProperties.isEmpty()) {
0177         propertiesChanged(initialProperties);
0178     }
0179 
0180     QTimer::singleShot(0, [] {
0181         qobject_cast<SettingsPrivate *>(settingsNotifier())->init();
0182     });
0183 
0184     const QList<QDBusObjectPath> devices = iface.devices();
0185     qCDebug(NMQT) << "Device list";
0186     for (const QDBusObjectPath &op : devices) {
0187         networkInterfaceMap.insert(op.path(), Device::Ptr());
0188         Q_EMIT deviceAdded(op.path());
0189         qCDebug(NMQT) << "  " << op.path();
0190     }
0191 }
0192 
0193 NetworkManager::NetworkManagerPrivate::~NetworkManagerPrivate()
0194 {
0195 }
0196 
0197 QString NetworkManager::NetworkManagerPrivate::version() const
0198 {
0199     return m_version;
0200 }
0201 
0202 int NetworkManager::NetworkManagerPrivate::compareVersion(const QString &version)
0203 {
0204     int x;
0205     int y;
0206     int z;
0207 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0208     const auto sl = QStringView(version).split('.');
0209 #else
0210     const auto sl = version.splitRef('.');
0211 #endif
0212     if (sl.size() > 2) {
0213         x = sl[0].toInt();
0214         y = sl[1].toInt();
0215         z = sl[2].toInt();
0216     } else {
0217         x = -1;
0218         y = -1;
0219         z = -1;
0220     }
0221 
0222     return compareVersion(x, y, z);
0223 }
0224 
0225 int NetworkManager::NetworkManagerPrivate::compareVersion(const int x, const int y, const int z) const
0226 {
0227     if (m_x > x) {
0228         return 1;
0229     } else if (m_x < x) {
0230         return -1;
0231     } else if (m_y > y) {
0232         return 1;
0233     } else if (m_y < y) {
0234         return -1;
0235     } else if (m_z > z) {
0236         return 1;
0237     } else if (m_z < z) {
0238         return -1;
0239     }
0240     return 0;
0241 }
0242 
0243 bool NetworkManager::NetworkManagerPrivate::checkVersion(const int x, const int y, const int z) const
0244 {
0245     return 0 <= compareVersion(x, y, z);
0246 }
0247 
0248 NetworkManager::Device::Types NetworkManager::NetworkManagerPrivate::supportedInterfaceTypes() const
0249 {
0250     return m_supportedInterfaceTypes;
0251 }
0252 
0253 QVariantMap NetworkManager::NetworkManagerPrivate::retrieveInitialProperties(const QString &interfaceName, const QString &path)
0254 {
0255     QDBusMessage message = QDBusMessage::createMethodCall(DBUS_SERVICE, path, FDO_DBUS_PROPERTIES, QLatin1String("GetAll"));
0256     message << interfaceName;
0257 #ifdef NMQT_STATIC
0258     QDBusMessage resultMessage = QDBusConnection::sessionBus().call(message);
0259 #else
0260     QDBusMessage resultMessage = QDBusConnection::systemBus().call(message);
0261 #endif
0262     if (resultMessage.type() == QDBusMessage::ReplyMessage) {
0263         QVariantMap result;
0264         QDBusArgument dbusArgument = resultMessage.arguments().at(0).value<QDBusArgument>();
0265         while (!dbusArgument.atEnd()) {
0266             dbusArgument >> result;
0267         }
0268         return result;
0269     }
0270 
0271     return QVariantMap();
0272 }
0273 
0274 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredNetworkInterface(const QString &uni)
0275 {
0276     NetworkManager::Device::Ptr networkInterface;
0277     auto it = networkInterfaceMap.constFind(uni);
0278     if (it != networkInterfaceMap.constEnd()) {
0279         if (*it) {
0280             networkInterface = *it;
0281         } else {
0282             networkInterface = createNetworkInterface(uni);
0283             networkInterfaceMap[uni] = networkInterface;
0284         }
0285     }
0286     return networkInterface;
0287 }
0288 
0289 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::findRegisteredActiveConnection(const QString &uni)
0290 {
0291     NetworkManager::ActiveConnection::Ptr activeConnection;
0292     if (!uni.isEmpty() && uni != QLatin1String("/")) {
0293         const auto it = m_activeConnections.constFind(uni);
0294         const bool contains = it != m_activeConnections.constEnd();
0295         if (contains && *it) {
0296             activeConnection = *it;
0297         } else {
0298             activeConnection = NetworkManager::ActiveConnection::Ptr(new NetworkManager::VpnConnection(uni), &QObject::deleteLater);
0299             if (activeConnection->connection()) {
0300                 m_activeConnections[uni] = activeConnection;
0301                 if (!contains) {
0302                     Q_EMIT activeConnectionAdded(uni);
0303                 }
0304             } else {
0305                 activeConnection.clear();
0306             }
0307         }
0308     }
0309     return activeConnection;
0310 }
0311 
0312 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::createNetworkInterface(const QString &uni)
0313 {
0314     // qCDebug(NMQT);
0315     auto message = QDBusMessage::createMethodCall(DBUS_SERVICE, uni, FDO_DBUS_PROPERTIES, QStringLiteral("Get"));
0316     message.setArguments({QLatin1String(OrgFreedesktopNetworkManagerDeviceInterface::staticInterfaceName()), QStringLiteral("DeviceType")});
0317 #ifdef NMQT_STATIC
0318     auto bus = QDBusConnection::sessionBus();
0319 #else
0320     auto bus = QDBusConnection::systemBus();
0321 #endif
0322     QDBusReply<QVariant> reply = bus.call(message);
0323     Device::Type type = reply.isValid() ? NetworkManager::DevicePrivate::convertType(reply.value().toInt()) : Device::UnknownType;
0324     switch (type) {
0325     case Device::Ethernet:
0326         return Device::Ptr(new NetworkManager::WiredDevice(uni), &QObject::deleteLater);
0327     case Device::Wifi:
0328         return Device::Ptr(new NetworkManager::WirelessDevice(uni), &QObject::deleteLater);
0329     case Device::Modem:
0330         return Device::Ptr(new NetworkManager::ModemDevice(uni), &QObject::deleteLater);
0331     case Device::Bluetooth:
0332         return Device::Ptr(new NetworkManager::BluetoothDevice(uni), &QObject::deleteLater);
0333     case Device::Wimax:
0334         return Device::Ptr(new NetworkManager::WimaxDevice(uni), &QObject::deleteLater);
0335     case Device::OlpcMesh:
0336         return Device::Ptr(new NetworkManager::OlpcMeshDevice(uni), &QObject::deleteLater);
0337     case Device::InfiniBand:
0338         return Device::Ptr(new NetworkManager::InfinibandDevice(uni), &QObject::deleteLater);
0339     case Device::Bond:
0340         return Device::Ptr(new NetworkManager::BondDevice(uni), &QObject::deleteLater);
0341     case Device::Vlan:
0342         return Device::Ptr(new NetworkManager::VlanDevice(uni), &QObject::deleteLater);
0343     case Device::Adsl:
0344         return Device::Ptr(new NetworkManager::AdslDevice(uni), &QObject::deleteLater);
0345     case Device::Bridge:
0346         return Device::Ptr(new NetworkManager::BridgeDevice(uni), &QObject::deleteLater);
0347     // No need to check checkVersion, because we can't get Generic, Gre, MacVlan, Tun & Veth values in incompatible runtime
0348     case Device::Generic:
0349         return Device::Ptr(new NetworkManager::GenericDevice(uni), &QObject::deleteLater);
0350     case Device::Gre:
0351         return Device::Ptr(new NetworkManager::GreDevice(uni), &QObject::deleteLater);
0352     case Device::MacVlan:
0353         return Device::Ptr(new NetworkManager::MacVlanDevice(uni), &QObject::deleteLater);
0354     case Device::Tun:
0355         return Device::Ptr(new NetworkManager::TunDevice(uni), &QObject::deleteLater);
0356     case Device::Veth:
0357         return Device::Ptr(new NetworkManager::VethDevice(uni), &QObject::deleteLater);
0358     case Device::IpTunnel:
0359         return Device::Ptr(new NetworkManager::IpTunnelDevice(uni), &QObject::deleteLater);
0360     case Device::WireGuard:
0361         return Device::Ptr(new NetworkManager::WireGuardDevice(uni), &QObject::deleteLater);
0362     default:
0363         if (uni != QLatin1String("any")) { // VPN connections use "any" as uni for the network interface.
0364             qCDebug(NMQT) << "Can't create device of type" << type << "for" << uni;
0365         }
0366     }
0367 
0368     return Device::Ptr(new Device(uni), &QObject::deleteLater);
0369 }
0370 
0371 NetworkManager::Status NetworkManager::NetworkManagerPrivate::status() const
0372 {
0373     return nmState;
0374 }
0375 
0376 NetworkManager::Device::List NetworkManager::NetworkManagerPrivate::networkInterfaces()
0377 {
0378     Device::List list;
0379 
0380     QMap<QString, Device::Ptr>::const_iterator i;
0381     for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
0382         Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
0383         if (!networkInterface.isNull()) {
0384             list.append(networkInterface);
0385         } else {
0386             qCWarning(NMQT) << "warning: null network Interface for" << i.key();
0387         }
0388     }
0389 
0390     return list;
0391 }
0392 
0393 NetworkManager::Device::Ptr NetworkManager::NetworkManagerPrivate::findDeviceByIpIface(const QString &iface)
0394 {
0395     QMap<QString, Device::Ptr>::const_iterator i;
0396     for (i = networkInterfaceMap.constBegin(); i != networkInterfaceMap.constEnd(); ++i) {
0397         Device::Ptr networkInterface = findRegisteredNetworkInterface(i.key());
0398         if (networkInterface && networkInterface->udi() == iface) {
0399             return networkInterface;
0400         }
0401     }
0402 
0403     return Device::Ptr();
0404 }
0405 
0406 bool NetworkManager::NetworkManagerPrivate::isNetworkingEnabled() const
0407 {
0408     return m_isNetworkingEnabled;
0409 }
0410 
0411 bool NetworkManager::NetworkManagerPrivate::isWirelessEnabled() const
0412 {
0413     return m_isWirelessEnabled;
0414 }
0415 
0416 bool NetworkManager::NetworkManagerPrivate::isWirelessHardwareEnabled() const
0417 {
0418     return m_isWirelessHardwareEnabled;
0419 }
0420 
0421 bool NetworkManager::NetworkManagerPrivate::isWwanEnabled() const
0422 {
0423     return m_isWwanEnabled;
0424 }
0425 
0426 bool NetworkManager::NetworkManagerPrivate::isWwanHardwareEnabled() const
0427 {
0428     return m_isWwanHardwareEnabled;
0429 }
0430 
0431 bool NetworkManager::NetworkManagerPrivate::isWimaxEnabled() const
0432 {
0433     return checkVersion(1, 2, 0) ? false : m_isWimaxEnabled;
0434 }
0435 
0436 bool NetworkManager::NetworkManagerPrivate::isWimaxHardwareEnabled() const
0437 {
0438     return checkVersion(1, 2, 0) ? false : m_isWimaxHardwareEnabled;
0439 }
0440 
0441 QDBusPendingReply<QDBusObjectPath>
0442 NetworkManager::NetworkManagerPrivate::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
0443 {
0444     QString extra_connection_parameter = connectionParameter;
0445     QString extra_interface_parameter = interfaceUni;
0446     if (extra_connection_parameter.isEmpty()) {
0447         extra_connection_parameter = QLatin1String("/");
0448     }
0449     if (extra_interface_parameter.isEmpty()) {
0450         extra_interface_parameter = QLatin1String("/");
0451     }
0452     // TODO store error code
0453     QDBusObjectPath connPath(connectionUni);
0454     QDBusObjectPath interfacePath(interfaceUni);
0455     // qCDebug(NMQT) << "Activating connection" << connPath.path() << "on interface" << interfacePath.path() << "with extra" << extra_connection_parameter;
0456     return iface.ActivateConnection(connPath, QDBusObjectPath(extra_interface_parameter), QDBusObjectPath(extra_connection_parameter));
0457 }
0458 
0459 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath> NetworkManager::NetworkManagerPrivate::addAndActivateConnection(const NMVariantMapMap &connection,
0460                                                                                                                     const QString &interfaceUni,
0461                                                                                                                     const QString &connectionParameter)
0462 {
0463     QString extra_connection_parameter = connectionParameter;
0464     if (extra_connection_parameter.isEmpty()) {
0465         extra_connection_parameter = QLatin1String("/");
0466     }
0467     // TODO store error code
0468     QDBusObjectPath interfacePath(interfaceUni);
0469     return iface.AddAndActivateConnection(connection, interfacePath, QDBusObjectPath(extra_connection_parameter));
0470 }
0471 
0472 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath, QVariantMap>
0473 NetworkManager::NetworkManagerPrivate::addAndActivateConnection2(const NMVariantMapMap &connection,
0474                                                                  const QString &interfaceUni,
0475                                                                  const QString &connectionParameter,
0476                                                                  const QVariantMap &options)
0477 {
0478     QString extra_connection_parameter = connectionParameter;
0479     if (extra_connection_parameter.isEmpty()) {
0480         extra_connection_parameter = QLatin1String("/");
0481     }
0482     // TODO store error code
0483     QDBusObjectPath interfacePath(interfaceUni);
0484     return iface.AddAndActivateConnection2(connection, interfacePath, QDBusObjectPath(extra_connection_parameter), options);
0485 }
0486 
0487 QDBusPendingReply<> NetworkManager::NetworkManagerPrivate::deactivateConnection(const QString &activeConnectionPath)
0488 {
0489     return iface.DeactivateConnection(QDBusObjectPath(activeConnectionPath));
0490 }
0491 
0492 void NetworkManager::NetworkManagerPrivate::setNetworkingEnabled(bool enabled)
0493 {
0494     iface.Enable(enabled);
0495 }
0496 
0497 void NetworkManager::NetworkManagerPrivate::setWirelessEnabled(bool enabled)
0498 {
0499     iface.setWirelessEnabled(enabled);
0500 }
0501 
0502 void NetworkManager::NetworkManagerPrivate::setWwanEnabled(bool enabled)
0503 {
0504     iface.setWwanEnabled(enabled);
0505 }
0506 
0507 void NetworkManager::NetworkManagerPrivate::setWimaxEnabled(bool enabled)
0508 {
0509     if (!checkVersion(1, 2, 0)) {
0510         iface.setWimaxEnabled(enabled);
0511     }
0512 }
0513 
0514 void NetworkManager::NetworkManagerPrivate::sleep(bool sleep)
0515 {
0516     iface.Sleep(sleep);
0517 }
0518 
0519 void NetworkManager::NetworkManagerPrivate::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
0520 {
0521     QString logLevel;
0522     QStringList logDomains;
0523     switch (level) {
0524     case NetworkManager::Error:
0525         logLevel = QLatin1String("ERR");
0526         break;
0527     case NetworkManager::Warning:
0528         logLevel = QLatin1String("WARN");
0529         break;
0530     case NetworkManager::Info:
0531         logLevel = QLatin1String("INFO");
0532         break;
0533     case NetworkManager::Debug:
0534         logLevel = QLatin1String("DEBUG");
0535         break;
0536     case NetworkManager::Trace:
0537         logLevel = QLatin1String("TRACE");
0538         break;
0539     }
0540     if (!domains.testFlag(NoChange)) {
0541         if (domains.testFlag(NetworkManager::None)) {
0542             logDomains << QLatin1String("NONE");
0543         }
0544         if (domains.testFlag(NetworkManager::Hardware)) {
0545             logDomains << QLatin1String("PLATFORM");
0546         }
0547         if (domains.testFlag(NetworkManager::RFKill)) {
0548             logDomains << QLatin1String("RFKILL");
0549         }
0550         if (domains.testFlag(NetworkManager::Ethernet)) {
0551             logDomains << QLatin1String("ETHER");
0552         }
0553         if (domains.testFlag(NetworkManager::WiFi)) {
0554             logDomains << QLatin1String("WIFI");
0555         }
0556         if (domains.testFlag(NetworkManager::Bluetooth)) {
0557             logDomains << QLatin1String("BT");
0558         }
0559         if (domains.testFlag(NetworkManager::MobileBroadBand)) {
0560             logDomains << QLatin1String("MB");
0561         }
0562         if (domains.testFlag(NetworkManager::DHCP4)) {
0563             logDomains << QLatin1String("DHCP4");
0564         }
0565         if (domains.testFlag(NetworkManager::DHCP6)) {
0566             logDomains << QLatin1String("DHCP6");
0567         }
0568         if (domains.testFlag(NetworkManager::PPP)) {
0569             logDomains << QLatin1String("PPP");
0570         }
0571         if (domains.testFlag(NetworkManager::WiFiScan)) {
0572             logDomains << QLatin1String("WIFI_SCAN");
0573         }
0574         if (domains.testFlag(NetworkManager::IPv4)) {
0575             logDomains << QLatin1String("IP4");
0576         }
0577         if (domains.testFlag(NetworkManager::IPv6)) {
0578             logDomains << QLatin1String("IP6");
0579         }
0580         if (domains.testFlag(NetworkManager::AutoIPv4)) {
0581             logDomains << QLatin1String("AUTOIP4");
0582         }
0583         if (domains.testFlag(NetworkManager::DNS)) {
0584             logDomains << QLatin1String("DNS");
0585         }
0586         if (domains.testFlag(NetworkManager::VPN)) {
0587             logDomains << QLatin1String("VPN");
0588         }
0589         if (domains.testFlag(NetworkManager::Sharing)) {
0590             logDomains << QLatin1String("SHARING");
0591         }
0592         if (domains.testFlag(NetworkManager::Supplicant)) {
0593             logDomains << QLatin1String("SUPPLICANT");
0594         }
0595         if (domains.testFlag(NetworkManager::UserSet)) {
0596             logDomains << QLatin1String("USER_SET");
0597         }
0598         if (domains.testFlag(NetworkManager::SysSet)) {
0599             logDomains << QLatin1String("SYS_SET");
0600         }
0601         if (domains.testFlag(NetworkManager::Suspend)) {
0602             logDomains << QLatin1String("SUSPEND");
0603         }
0604         if (domains.testFlag(NetworkManager::Core)) {
0605             logDomains << QLatin1String("CORE");
0606         }
0607         if (domains.testFlag(NetworkManager::Devices)) {
0608             logDomains << QLatin1String("DEVICE");
0609         }
0610         if (domains.testFlag(NetworkManager::OLPC)) {
0611             logDomains << QLatin1String("OLPC");
0612         }
0613         if (domains.testFlag(NetworkManager::Wimax)) {
0614             logDomains << QLatin1String("WIMAX");
0615         }
0616         if (domains.testFlag(NetworkManager::Infiniband)) {
0617             logDomains << QLatin1String("INFINIBAND");
0618         }
0619         if (domains.testFlag(NetworkManager::Firewall)) {
0620             logDomains << QLatin1String("FIREWALL");
0621         }
0622         if (domains.testFlag(NetworkManager::Adsl)) {
0623             logDomains << QLatin1String("ADSL");
0624         }
0625         if (domains.testFlag(NetworkManager::Bond)) {
0626             logDomains << QLatin1String("BOND");
0627         }
0628         if (domains.testFlag(NetworkManager::Vlan)) {
0629             logDomains << QLatin1String("VLAN");
0630         }
0631         if (domains.testFlag(NetworkManager::Agents)) {
0632             logDomains << QLatin1String("AGENTS");
0633         }
0634         if (domains.testFlag(NetworkManager::Settings)) {
0635             logDomains << QLatin1String("SETTINGS");
0636         }
0637         if (domains.testFlag(NetworkManager::DbusProps)) {
0638             logDomains << QLatin1String("DBUS_PROPS");
0639         }
0640         if (domains.testFlag(NetworkManager::Team)) {
0641             logDomains << QLatin1String("TEAM");
0642         }
0643         if (domains.testFlag(NetworkManager::ConCheck)) {
0644             logDomains << QLatin1String("CONCHECK");
0645         }
0646         if (domains.testFlag(NetworkManager::Dcb)) {
0647             logDomains << QLatin1String("DCB");
0648         }
0649         if (domains.testFlag(NetworkManager::Dispatch)) {
0650             logDomains << QLatin1String("DISPATCH");
0651         }
0652     }
0653     iface.SetLogging(logLevel, logDomains.join(QLatin1Char(',')));
0654 }
0655 
0656 NMStringMap NetworkManager::NetworkManagerPrivate::permissions()
0657 {
0658     return iface.GetPermissions();
0659 }
0660 
0661 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::connectivity() const
0662 {
0663     return m_connectivity;
0664 }
0665 
0666 QDBusPendingReply<uint> NetworkManager::NetworkManagerPrivate::checkConnectivity()
0667 {
0668     return iface.CheckConnectivity();
0669 }
0670 
0671 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::primaryConnection()
0672 {
0673     return findRegisteredActiveConnection(m_primaryConnection);
0674 }
0675 
0676 NetworkManager::ActiveConnection::Ptr NetworkManager::NetworkManagerPrivate::activatingConnection()
0677 {
0678     return findRegisteredActiveConnection(m_activatingConnection);
0679 }
0680 
0681 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::NetworkManagerPrivate::primaryConnectionType()
0682 {
0683     return checkVersion(1, 0, 0) ? m_primaryConnectionType : NetworkManager::ConnectionSettings::Unknown;
0684 }
0685 
0686 bool NetworkManager::NetworkManagerPrivate::isStartingUp() const
0687 {
0688     return iface.startup();
0689 }
0690 
0691 NetworkManager::Device::MeteredStatus NetworkManager::NetworkManagerPrivate::metered() const
0692 {
0693     return checkVersion(1, 0, 6) ? m_metered : NetworkManager::Device::UnknownStatus;
0694 }
0695 
0696 NetworkManager::DnsConfiguration NetworkManager::NetworkManagerPrivate::globalDnsConfiguration() const
0697 {
0698     return m_globalDnsConfiguration;
0699 }
0700 
0701 void NetworkManager::NetworkManagerPrivate::setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
0702 {
0703     m_globalDnsConfiguration = configuration;
0704     iface.setGlobalDnsConfiguration(m_globalDnsConfiguration.toMap());
0705 }
0706 
0707 void NetworkManager::NetworkManagerPrivate::onDeviceAdded(const QDBusObjectPath &objpath)
0708 {
0709     // qCDebug(NMQT);
0710     if (!networkInterfaceMap.contains(objpath.path())) {
0711         networkInterfaceMap.insert(objpath.path(), Device::Ptr());
0712         Q_EMIT deviceAdded(objpath.path());
0713     }
0714 }
0715 
0716 void NetworkManager::NetworkManagerPrivate::onDeviceRemoved(const QDBusObjectPath &objpath)
0717 {
0718     // qCDebug(NMQT);
0719     networkInterfaceMap.remove(objpath.path());
0720     Q_EMIT deviceRemoved(objpath.path());
0721 }
0722 
0723 void NetworkManager::NetworkManagerPrivate::connectivityChanged(uint connectivity)
0724 {
0725     NetworkManager::Connectivity newConnectivity = convertConnectivity(connectivity);
0726     if (m_connectivity != newConnectivity) {
0727         m_connectivity = newConnectivity;
0728         Q_EMIT Notifier::connectivityChanged(newConnectivity);
0729     }
0730 }
0731 
0732 void NetworkManager::NetworkManagerPrivate::stateChanged(uint state)
0733 {
0734     NetworkManager::Status newStatus = convertNMState(state);
0735     if (nmState != newStatus) {
0736         nmState = newStatus;
0737         Q_EMIT Notifier::statusChanged(newStatus);
0738     }
0739 }
0740 
0741 void NetworkManager::NetworkManagerPrivate::dbusPropertiesChanged(const QString &interfaceName,
0742                                                                   const QVariantMap &properties,
0743                                                                   const QStringList &invalidatedProperties)
0744 {
0745     Q_UNUSED(invalidatedProperties);
0746     if (interfaceName == QLatin1String("org.freedesktop.NetworkManager")) {
0747         propertiesChanged(properties);
0748     }
0749 }
0750 
0751 void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap &changedProperties)
0752 {
0753     // qCDebug(NMQT) << Q_FUNC_INFO << changedProperties;
0754 
0755     QVariantMap::const_iterator it = changedProperties.constBegin();
0756     while (it != changedProperties.constEnd()) {
0757         const QString property = it.key();
0758         if (property == QLatin1String("ActiveConnections")) {
0759             const QList<QDBusObjectPath> activePaths = qdbus_cast<QList<QDBusObjectPath>>(*it);
0760             if (activePaths.isEmpty()) {
0761                 QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
0762                 while (it != m_activeConnections.constEnd()) {
0763                     Q_EMIT activeConnectionRemoved(it.key());
0764                     ++it;
0765                 }
0766                 m_activeConnections.clear();
0767             } else {
0768                 QStringList knownConnections = m_activeConnections.keys();
0769                 for (const QDBusObjectPath &ac : activePaths) {
0770                     if (!m_activeConnections.contains(ac.path())) {
0771                         m_activeConnections.insert(ac.path(), NetworkManager::ActiveConnection::Ptr());
0772                         Q_EMIT activeConnectionAdded(ac.path());
0773                     } else {
0774                         knownConnections.removeOne(ac.path());
0775                     }
0776                     // qCDebug(NMQT) << "  " << ac.path();
0777                 }
0778                 for (const QString &path : std::as_const(knownConnections)) {
0779                     m_activeConnections.remove(path);
0780                     Q_EMIT activeConnectionRemoved(path);
0781                 }
0782             }
0783             Q_EMIT activeConnectionsChanged();
0784         } else if (property == QLatin1String("NetworkingEnabled")) {
0785             m_isNetworkingEnabled = it->toBool();
0786             qCDebug(NMQT) << property << m_isNetworkingEnabled;
0787             Q_EMIT networkingEnabledChanged(m_isNetworkingEnabled);
0788         } else if (property == QLatin1String("WirelessHardwareEnabled")) {
0789             m_isWirelessHardwareEnabled = it->toBool();
0790             qCDebug(NMQT) << property << m_isWirelessHardwareEnabled;
0791             Q_EMIT wirelessHardwareEnabledChanged(m_isWirelessHardwareEnabled);
0792         } else if (property == QLatin1String("WirelessEnabled")) {
0793             m_isWirelessEnabled = it->toBool();
0794             qCDebug(NMQT) << property << m_isWirelessEnabled;
0795             Q_EMIT wirelessEnabledChanged(m_isWirelessEnabled);
0796         } else if (property == QLatin1String("WwanHardwareEnabled")) {
0797             m_isWwanHardwareEnabled = it->toBool();
0798             qCDebug(NMQT) << property << m_isWwanHardwareEnabled;
0799             Q_EMIT wwanHardwareEnabledChanged(m_isWwanHardwareEnabled);
0800         } else if (property == QLatin1String("WwanEnabled")) {
0801             m_isWwanEnabled = it->toBool();
0802             qCDebug(NMQT) << property << m_isWwanEnabled;
0803             Q_EMIT wwanEnabledChanged(m_isWwanEnabled);
0804         } else if (property == QLatin1String("WimaxHardwareEnabled")) {
0805             m_isWimaxHardwareEnabled = it->toBool();
0806             qCDebug(NMQT) << property << m_isWimaxHardwareEnabled;
0807             Q_EMIT wimaxHardwareEnabledChanged(m_isWimaxHardwareEnabled);
0808         } else if (property == QLatin1String("WimaxEnabled")) {
0809             m_isWimaxEnabled = it->toBool();
0810             qCDebug(NMQT) << property << m_isWimaxEnabled;
0811             Q_EMIT wimaxEnabledChanged(m_isWimaxEnabled);
0812         } else if (property == QLatin1String("Version")) {
0813             m_version = it->toString();
0814             parseVersion(m_version);
0815         } else if (property == QLatin1String("State")) {
0816             stateChanged(it->toUInt());
0817         } else if (property == QLatin1String("Connectivity")) {
0818             connectivityChanged(it->toUInt());
0819         } else if (property == QLatin1String("PrimaryConnection")) {
0820             m_primaryConnection = it->value<QDBusObjectPath>().path();
0821             Q_EMIT primaryConnectionChanged(m_primaryConnection);
0822         } else if (property == QLatin1String("ActivatingConnection")) {
0823             m_activatingConnection = it->value<QDBusObjectPath>().path();
0824             Q_EMIT activatingConnectionChanged(m_activatingConnection);
0825         } else if (property == QLatin1String("PrimaryConnectionType")) {
0826             m_primaryConnectionType = NetworkManager::ConnectionSettings::typeFromString(it->toString());
0827             Q_EMIT primaryConnectionTypeChanged(m_primaryConnectionType);
0828         } else if (property == QLatin1String("Startup")) {
0829             Q_EMIT isStartingUpChanged();
0830         } else if (property == QLatin1String("Metered")) {
0831             m_metered = (NetworkManager::Device::MeteredStatus)it->toUInt();
0832             Q_EMIT meteredChanged(m_metered);
0833         } else if (property == QLatin1String("GlobalDnsConfiguration")) {
0834             m_globalDnsConfiguration.fromMap(qdbus_cast<QVariantMap>(*it));
0835             Q_EMIT globalDnsConfigurationChanged(m_globalDnsConfiguration);
0836         } else {
0837             qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled property" << property;
0838         }
0839         ++it;
0840     }
0841 }
0842 
0843 NetworkManager::Connectivity NetworkManager::NetworkManagerPrivate::convertConnectivity(uint connectivity)
0844 {
0845     NetworkManager::Connectivity convertedConnectivity = NetworkManager::UnknownConnectivity;
0846     switch (connectivity) {
0847     case NM_CONNECTIVITY_UNKNOWN:
0848         convertedConnectivity = NetworkManager::UnknownConnectivity;
0849         break;
0850     case NM_CONNECTIVITY_NONE:
0851         convertedConnectivity = NetworkManager::NoConnectivity;
0852         break;
0853     case NM_CONNECTIVITY_PORTAL:
0854         convertedConnectivity = NetworkManager::Portal;
0855         break;
0856     case NM_CONNECTIVITY_LIMITED:
0857         convertedConnectivity = NetworkManager::Limited;
0858         break;
0859     case NM_CONNECTIVITY_FULL:
0860         convertedConnectivity = NetworkManager::Full;
0861         break;
0862     }
0863     return convertedConnectivity;
0864 }
0865 
0866 NetworkManager::Status NetworkManager::NetworkManagerPrivate::convertNMState(uint state)
0867 {
0868     NetworkManager::Status status = NetworkManager::Unknown;
0869     switch (state) {
0870     case NM_STATE_UNKNOWN:
0871         status = NetworkManager::Unknown;
0872         break;
0873     case NM_STATE_ASLEEP:
0874         status = NetworkManager::Asleep;
0875         break;
0876     case NM_STATE_DISCONNECTED:
0877         status = NetworkManager::Disconnected;
0878         break;
0879     case NM_STATE_DISCONNECTING:
0880         status = NetworkManager::Disconnecting;
0881         break;
0882     case NM_STATE_CONNECTING:
0883         status = NetworkManager::Connecting;
0884         break;
0885     case NM_STATE_CONNECTED_LOCAL:
0886         status = NetworkManager::ConnectedLinkLocal;
0887         break;
0888     case NM_STATE_CONNECTED_SITE:
0889         status = NetworkManager::ConnectedSiteOnly;
0890         break;
0891     case NM_STATE_CONNECTED_GLOBAL:
0892         status = NetworkManager::Connected;
0893         break;
0894     }
0895     return status;
0896 }
0897 
0898 void NetworkManager::NetworkManagerPrivate::dbusInterfacesAdded(const QDBusObjectPath &path, const QVariantMap &addedInterfaces)
0899 {
0900     Q_UNUSED(path);
0901 
0902     if (!addedInterfaces.contains(NetworkManagerPrivate::DBUS_DAEMON_INTERFACE)) {
0903         return;
0904     }
0905 
0906     daemonRegistered();
0907 }
0908 
0909 void NetworkManager::NetworkManagerPrivate::daemonRegistered()
0910 {
0911     if (iface.version().isEmpty()) {
0912         // If this call fails, we've probably been called from ServiceRegistered on an old NM,
0913         // and the interface isn't ready yet. Just exit and hope we get called again on InterfacesAdded.
0914         return;
0915     }
0916 
0917     init();
0918     Q_EMIT serviceAppeared();
0919 }
0920 
0921 void NetworkManager::NetworkManagerPrivate::daemonUnregistered()
0922 {
0923     stateChanged(NM_STATE_UNKNOWN);
0924     QMap<QString, Device::Ptr>::const_iterator i = networkInterfaceMap.constBegin();
0925     while (i != networkInterfaceMap.constEnd()) {
0926         Q_EMIT deviceRemoved(i.key());
0927         ++i;
0928     }
0929     networkInterfaceMap.clear();
0930 
0931     QMap<QString, ActiveConnection::Ptr>::const_iterator it = m_activeConnections.constBegin();
0932     while (it != m_activeConnections.constEnd()) {
0933         Q_EMIT activeConnectionRemoved(it.key());
0934         ++it;
0935     }
0936     m_activeConnections.clear();
0937 
0938     qobject_cast<SettingsPrivate *>(settingsNotifier())->daemonUnregistered();
0939 
0940     Q_EMIT activeConnectionsChanged();
0941     Q_EMIT serviceDisappeared();
0942 }
0943 
0944 NetworkManager::ActiveConnection::List NetworkManager::NetworkManagerPrivate::activeConnections()
0945 {
0946     NetworkManager::ActiveConnection::List list;
0947 
0948     // Take a copy because findRegisteredActiveConnection() may change m_activeConnections.
0949     const QStringList keyList = m_activeConnections.keys();
0950     for (const QString &key : keyList) {
0951         NetworkManager::ActiveConnection::Ptr activeConnection = findRegisteredActiveConnection(key);
0952 
0953         if (activeConnection) {
0954             list << activeConnection;
0955         }
0956     }
0957     return list;
0958 }
0959 
0960 QStringList NetworkManager::NetworkManagerPrivate::activeConnectionsPaths() const
0961 {
0962     return m_activeConnections.keys();
0963 }
0964 
0965 QDBusPendingReply<QString, QString> NetworkManager::NetworkManagerPrivate::getLogging()
0966 {
0967     return iface.GetLogging();
0968 }
0969 
0970 QString NetworkManager::version()
0971 {
0972     return globalNetworkManager->version();
0973 }
0974 
0975 int NetworkManager::compareVersion(const QString &version)
0976 {
0977     return globalNetworkManager->compareVersion(version);
0978 }
0979 
0980 int NetworkManager::compareVersion(const int x, const int y, const int z)
0981 {
0982     return globalNetworkManager->compareVersion(x, y, z);
0983 }
0984 
0985 bool NetworkManager::checkVersion(const int x, const int y, const int z)
0986 {
0987     return globalNetworkManager->checkVersion(x, y, z);
0988 }
0989 
0990 NetworkManager::Status NetworkManager::status()
0991 {
0992     return globalNetworkManager->status();
0993 }
0994 
0995 NetworkManager::ActiveConnection::List NetworkManager::activeConnections()
0996 {
0997     return globalNetworkManager->activeConnections();
0998 }
0999 
1000 QStringList NetworkManager::activeConnectionsPaths()
1001 {
1002     return globalNetworkManager->activeConnectionsPaths();
1003 }
1004 
1005 NetworkManager::ActiveConnection::Ptr NetworkManager::findActiveConnection(const QString &uni)
1006 {
1007     return globalNetworkManager->findRegisteredActiveConnection(uni);
1008 }
1009 
1010 NetworkManager::Device::List NetworkManager::networkInterfaces()
1011 {
1012     return globalNetworkManager->networkInterfaces();
1013 }
1014 
1015 bool NetworkManager::isNetworkingEnabled()
1016 {
1017     return globalNetworkManager->isNetworkingEnabled();
1018 }
1019 
1020 bool NetworkManager::isWirelessEnabled()
1021 {
1022     return globalNetworkManager->isWirelessEnabled();
1023 }
1024 
1025 bool NetworkManager::isWirelessHardwareEnabled()
1026 {
1027     return globalNetworkManager->isWirelessHardwareEnabled();
1028 }
1029 
1030 NetworkManager::Device::Ptr NetworkManager::findNetworkInterface(const QString &uni)
1031 {
1032     return globalNetworkManager->findRegisteredNetworkInterface(uni);
1033 }
1034 
1035 NetworkManager::Device::Ptr NetworkManager::findDeviceByIpFace(const QString &iface)
1036 {
1037     return globalNetworkManager->findDeviceByIpIface(iface);
1038 }
1039 
1040 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath>
1041 NetworkManager::addAndActivateConnection(const NMVariantMapMap &connection, const QString &interfaceUni, const QString &connectionParameter)
1042 {
1043     return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1044 }
1045 
1046 QDBusPendingReply<QDBusObjectPath, QDBusObjectPath, QVariantMap> NetworkManager::addAndActivateConnection2(const NMVariantMapMap &connection,
1047                                                                                                            const QString &interfaceUni,
1048                                                                                                            const QString &connectionParameter,
1049                                                                                                            const QVariantMap &options)
1050 {
1051     if (checkVersion(1, 16, 0)) {
1052         return globalNetworkManager->addAndActivateConnection2(connection, interfaceUni, connectionParameter, options);
1053     } else {
1054         return globalNetworkManager->addAndActivateConnection(connection, interfaceUni, connectionParameter);
1055     }
1056 }
1057 
1058 QDBusPendingReply<QDBusObjectPath>
1059 NetworkManager::activateConnection(const QString &connectionUni, const QString &interfaceUni, const QString &connectionParameter)
1060 {
1061     return globalNetworkManager->activateConnection(connectionUni, interfaceUni, connectionParameter);
1062 }
1063 
1064 QDBusPendingReply<> NetworkManager::deactivateConnection(const QString &activeConnectionPath)
1065 {
1066     return globalNetworkManager->deactivateConnection(activeConnectionPath);
1067 }
1068 
1069 QDBusPendingReply<QString, QString> NetworkManager::getLogging()
1070 {
1071     return globalNetworkManager->getLogging();
1072 }
1073 
1074 void NetworkManager::setNetworkingEnabled(bool enabled)
1075 {
1076     globalNetworkManager->setNetworkingEnabled(enabled);
1077 }
1078 
1079 void NetworkManager::setWirelessEnabled(bool enabled)
1080 {
1081     globalNetworkManager->setWirelessEnabled(enabled);
1082 }
1083 
1084 bool NetworkManager::isWwanEnabled()
1085 {
1086     return globalNetworkManager->isWwanEnabled();
1087 }
1088 
1089 bool NetworkManager::isWwanHardwareEnabled()
1090 {
1091     return globalNetworkManager->isWwanHardwareEnabled();
1092 }
1093 
1094 void NetworkManager::setWwanEnabled(bool enabled)
1095 {
1096     globalNetworkManager->setWwanEnabled(enabled);
1097 }
1098 
1099 bool NetworkManager::isWimaxEnabled()
1100 {
1101     return globalNetworkManager->isWimaxEnabled();
1102 }
1103 
1104 bool NetworkManager::isWimaxHardwareEnabled()
1105 {
1106     return globalNetworkManager->isWimaxHardwareEnabled();
1107 }
1108 
1109 void NetworkManager::setWimaxEnabled(bool enabled)
1110 {
1111     globalNetworkManager->setWimaxEnabled(enabled);
1112 }
1113 
1114 void NetworkManager::sleep(bool sleep)
1115 {
1116     globalNetworkManager->sleep(sleep);
1117 }
1118 
1119 void NetworkManager::setLogging(NetworkManager::LogLevel level, NetworkManager::LogDomains domains)
1120 {
1121     globalNetworkManager->setLogging(level, domains);
1122 }
1123 
1124 NMStringMap NetworkManager::permissions()
1125 {
1126     return globalNetworkManager->permissions();
1127 }
1128 
1129 NetworkManager::Device::Types NetworkManager::supportedInterfaceTypes()
1130 {
1131     return globalNetworkManager->supportedInterfaceTypes();
1132 }
1133 
1134 NetworkManager::Connectivity NetworkManager::connectivity()
1135 {
1136     return globalNetworkManager->connectivity();
1137 }
1138 
1139 QDBusPendingReply<uint> NetworkManager::checkConnectivity()
1140 {
1141     return globalNetworkManager->checkConnectivity();
1142 }
1143 
1144 NetworkManager::ActiveConnection::Ptr NetworkManager::primaryConnection()
1145 {
1146     return globalNetworkManager->primaryConnection();
1147 }
1148 
1149 NetworkManager::ActiveConnection::Ptr NetworkManager::activatingConnection()
1150 {
1151     return globalNetworkManager->activatingConnection();
1152 }
1153 
1154 NetworkManager::ConnectionSettings::ConnectionType NetworkManager::primaryConnectionType()
1155 {
1156     return globalNetworkManager->primaryConnectionType();
1157 }
1158 
1159 bool NetworkManager::isStartingUp()
1160 {
1161     return globalNetworkManager->isStartingUp();
1162 }
1163 
1164 NetworkManager::Device::MeteredStatus NetworkManager::metered()
1165 {
1166     return globalNetworkManager->metered();
1167 }
1168 
1169 NetworkManager::DnsConfiguration NetworkManager::globalDnsConfiguration()
1170 {
1171     return globalNetworkManager->globalDnsConfiguration();
1172 }
1173 
1174 void NetworkManager::setGlobalDnsConfiguration(const NetworkManager::DnsConfiguration &configuration)
1175 {
1176     globalNetworkManager->setGlobalDnsConfiguration(configuration);
1177 }
1178 
1179 NetworkManager::Notifier *NetworkManager::notifier()
1180 {
1181     return globalNetworkManager;
1182 }
1183 
1184 #include "moc_manager.cpp"
1185 #include "moc_manager_p.cpp"