summaryrefslogtreecommitdiffstats
path: root/src/plugins/bearer/networkmanager
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@jollamobile.com>2014-10-07 17:18:09 +1000
committerLorn Potter <lorn.potter@gmail.com>2014-10-21 01:01:12 +0200
commit520b10be4cab66f3f66d3692d0bbbef57eff09e1 (patch)
tree48efd3fc95f7d26435cc07e313635ad98f35b96a /src/plugins/bearer/networkmanager
parent151061ad4af9d1b844f0b029b4e84a3577487048 (diff)
Add better mobile connections to QtBearer NetworkManager backend.
Task-number: QTBUG-41807 Change-Id: Ifb5904d4887111416b4bb1a32d6d056029186f5c Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Diffstat (limited to 'src/plugins/bearer/networkmanager')
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp39
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp75
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerservice.h37
3 files changed, 142 insertions, 9 deletions
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
index 105531c7f1..ec5666d36c 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
@@ -67,10 +67,6 @@ QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent)
this, SLOT(deviceAdded(QDBusObjectPath)));
connect(interface, SIGNAL(deviceRemoved(QDBusObjectPath)),
this, SLOT(deviceRemoved(QDBusObjectPath)));
-#if 0
- connect(interface, SIGNAL(stateChanged(QString,quint32)),
- this, SIGNAL(configurationsChanged()));
-#endif
connect(interface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)),
this, SLOT(activationFinished(QDBusPendingCallWatcher*)));
connect(interface, SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)),
@@ -586,7 +582,7 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path, const QDBusObjec
ptr->isValid = true;
ptr->id = objectPath.path();
ptr->type = QNetworkConfiguration::InternetAccessPoint;
- if(accessPoint->flags() == NM_802_11_AP_FLAGS_PRIVACY) {
+ if (accessPoint->flags() == NM_802_11_AP_FLAGS_PRIVACY) {
ptr->purpose = QNetworkConfiguration::PrivatePurpose;
} else {
ptr->purpose = QNetworkConfiguration::PublicPurpose;
@@ -724,7 +720,7 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
const QString connectionSsid = map.value("802-11-wireless").value("ssid").toString();
const QString connectionSecurity = map.value("802-11-wireless").value("security").toString();
- if(!connectionSecurity.isEmpty()) {
+ if (!connectionSecurity.isEmpty()) {
cpPriv->purpose = QNetworkConfiguration::PrivatePurpose;
} else {
cpPriv->purpose = QNetworkConfiguration::PublicPurpose;
@@ -749,9 +745,34 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
break;
}
}
- } else if (connectionType == "gsm") {
- cpPriv->bearerType = QNetworkConfiguration::Bearer2G;
- } else if (connectionType == "cdma") {
+ } else if (connectionType == QLatin1String("gsm")) {
+
+ foreach (const QDBusObjectPath &devicePath, interface->getDevices()) {
+ QNetworkManagerInterfaceDevice device(devicePath.path());
+
+ if (device.deviceType() == DEVICE_TYPE_GSM) {
+ QNetworkManagerInterfaceDeviceModem deviceModem(device.connectionInterface()->path(),this);
+ switch (deviceModem.currentCapabilities()) {
+ case 2:
+ cpPriv->bearerType = QNetworkConfiguration::Bearer2G;
+ break;
+ case 4:
+ cpPriv->bearerType = QNetworkConfiguration::Bearer3G;
+ break;
+ case 8:
+ cpPriv->bearerType = QNetworkConfiguration::Bearer4G;
+ break;
+ default:
+ cpPriv->bearerType = QNetworkConfiguration::BearerUnknown;
+ break;
+ };
+ }
+ }
+
+ cpPriv->purpose = QNetworkConfiguration::PrivatePurpose;
+ cpPriv->state |= QNetworkConfiguration::Discovered;
+ } else if (connectionType == QLatin1String("cdma")) {
+ cpPriv->purpose = QNetworkConfiguration::PrivatePurpose;
cpPriv->bearerType = QNetworkConfiguration::BearerCDMA2000;
}
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
index a7d1289b38..d154f1187e 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
@@ -568,6 +568,81 @@ quint32 QNetworkManagerInterfaceDeviceWireless::wirelessCapabilities() const
return d->connectionInterface->property("WirelelessCapabilities").toUInt();
}
+class QNetworkManagerInterfaceDeviceModemPrivate
+{
+public:
+ QDBusInterface *connectionInterface;
+ QString path;
+ bool valid;
+};
+
+QNetworkManagerInterfaceDeviceModem::QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath, QObject *parent)
+ : QObject(parent), nmDBusHelper(0)
+{
+ d = new QNetworkManagerInterfaceDeviceModemPrivate();
+ d->path = ifaceDevicePath;
+ d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM),
+ QDBusConnection::systemBus(), parent);
+ if (!d->connectionInterface->isValid()) {
+ d->valid = false;
+ return;
+ }
+ d->valid = true;
+}
+
+QNetworkManagerInterfaceDeviceModem::~QNetworkManagerInterfaceDeviceModem()
+{
+ delete d->connectionInterface;
+ delete d;
+}
+
+bool QNetworkManagerInterfaceDeviceModem::isValid()
+{
+
+ return d->valid;
+}
+
+bool QNetworkManagerInterfaceDeviceModem::setConnections()
+{
+ if (!isValid() )
+ return false;
+
+ bool allOk = false;
+
+ delete nmDBusHelper;
+ nmDBusHelper = new QNmDBusHelper(this);
+ connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
+ this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
+ if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM),
+ QLatin1String("PropertiesChanged"),
+ nmDBusHelper,SLOT(slotDevicePropertiesChanged(QMap<QString,QVariant>))) ) {
+ allOk = true;
+ }
+ return allOk;
+}
+
+QDBusInterface *QNetworkManagerInterfaceDeviceModem::connectionInterface() const
+{
+ return d->connectionInterface;
+}
+
+quint32 QNetworkManagerInterfaceDeviceModem::modemCapabilities() const
+{
+ return d->connectionInterface->property("ModemCapabilities").toUInt();
+}
+
+quint32 QNetworkManagerInterfaceDeviceModem::currentCapabilities() const
+{
+ return d->connectionInterface->property("CurrentCapabilities").toUInt();
+}
+
+
+
+
class QNetworkManagerSettingsPrivate
{
public:
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
index 25e6d3cf3a..8cda02482b 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
@@ -98,6 +98,7 @@ typedef enum
#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
#define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired"
#define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless"
+#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
#define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint"
#define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint"
@@ -329,6 +330,42 @@ private:
QNmDBusHelper *nmDBusHelper;
};
+class QNetworkManagerInterfaceDeviceModemPrivate;
+class QNetworkManagerInterfaceDeviceModem : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ enum ModemCapability {
+ None = 0x0,
+ Pots = 0x1,
+ Cmda_Edvo = 0x2,
+ Gsm_Umts = 0x4,
+ Lte = 0x08
+ };
+
+ explicit QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath,
+ QObject *parent = 0);
+ ~QNetworkManagerInterfaceDeviceModem();
+
+ QDBusObjectPath path() const;
+ QDBusInterface *connectionInterface() const;
+
+ bool setConnections();
+ bool isValid();
+
+ quint32 modemCapabilities() const;
+ quint32 currentCapabilities() const;
+
+Q_SIGNALS:
+ void propertiesChanged( const QString &, QMap<QString,QVariant>);
+private:
+ QNetworkManagerInterfaceDeviceModemPrivate *d;
+ QNmDBusHelper *nmDBusHelper;
+};
+
+
class QNetworkManagerSettingsPrivate;
class QNetworkManagerSettings : public QObject
{