summaryrefslogtreecommitdiffstats
path: root/src/network/bearer
diff options
context:
space:
mode:
authorAaron McCarthy <aaron.mccarthy@nokia.com>2009-12-07 06:11:11 (GMT)
committerAaron McCarthy <aaron.mccarthy@nokia.com>2010-01-04 01:00:58 (GMT)
commit63d59200884a68e569cce9d0ee470447b8239f6b (patch)
tree80c4f5086a4c0ba6300c8a7588a55a7d9f8e5b19 /src/network/bearer
parent19e64169b8f3b0b0c12d99327e8c68c5c8a26498 (diff)
downloadQt-63d59200884a68e569cce9d0ee470447b8239f6b.zip
Qt-63d59200884a68e569cce9d0ee470447b8239f6b.tar.gz
Qt-63d59200884a68e569cce9d0ee470447b8239f6b.tar.bz2
Convert generic engine plugin to be incremental.
Diffstat (limited to 'src/network/bearer')
-rw-r--r--src/network/bearer/qnetworkconfigmanager.cpp66
-rw-r--r--src/network/bearer/qnetworkconfigmanager_p.cpp318
-rw-r--r--src/network/bearer/qnetworkconfigmanager_p.h70
-rw-r--r--src/network/bearer/qnetworkconfiguration_p.h3
-rw-r--r--src/network/bearer/qnetworksessionengine.cpp11
-rw-r--r--src/network/bearer/qnetworksessionengine_p.h23
6 files changed, 160 insertions, 331 deletions
diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp
index 02cc652..6c0b17d 100644
--- a/src/network/bearer/qnetworkconfigmanager.cpp
+++ b/src/network/bearer/qnetworkconfigmanager.cpp
@@ -45,6 +45,7 @@
#include "qnetworkconfigmanager_s60_p.h"
#else
#include "qnetworkconfigmanager_p.h"
+#include "qnetworksessionengine_p.h"
#endif
QT_BEGIN_NAMESPACE
@@ -234,28 +235,31 @@ QList<QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(QNe
{
QList<QNetworkConfiguration> result;
QNetworkConfigurationManagerPrivate* conPriv = connManager();
- QList<QString> cpsIdents = conPriv->accessPointConfigurations.keys();
-
- //find all InternetAccessPoints
- foreach( QString ii, cpsIdents) {
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> p =
- conPriv->accessPointConfigurations.value(ii);
- if ( (p->state & filter) == filter ) {
- QNetworkConfiguration pt;
- pt.d = conPriv->accessPointConfigurations.value(ii);
- result << pt;
+
+ foreach (QNetworkSessionEngine *engine, conPriv->sessionEngines) {
+ QStringList cpsIdents = engine->accessPointConfigurations.keys();
+
+ //find all InternetAccessPoints
+ foreach (const QString &ii, cpsIdents) {
+ QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> p =
+ engine->accessPointConfigurations.value(ii);
+ if ((p->state & filter) == filter) {
+ QNetworkConfiguration pt;
+ pt.d = engine->accessPointConfigurations.value(ii);
+ result << pt;
+ }
}
- }
- //find all service networks
- cpsIdents = conPriv->snapConfigurations.keys();
- foreach( QString ii, cpsIdents) {
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> p =
- conPriv->snapConfigurations.value(ii);
- if ( (p->state & filter) == filter ) {
- QNetworkConfiguration pt;
- pt.d = conPriv->snapConfigurations.value(ii);
- result << pt;
+ //find all service networks
+ cpsIdents = engine->snapConfigurations.keys();
+ foreach (const QString &ii, cpsIdents) {
+ QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> p =
+ engine->snapConfigurations.value(ii);
+ if ((p->state & filter) == filter) {
+ QNetworkConfiguration pt;
+ pt.d = engine->snapConfigurations.value(ii);
+ result << pt;
+ }
}
}
@@ -271,15 +275,23 @@ QList<QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(QNe
QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(const QString& identifier) const
{
QNetworkConfigurationManagerPrivate* conPriv = connManager();
+
QNetworkConfiguration item;
- if (conPriv->accessPointConfigurations.contains(identifier))
- item.d = conPriv->accessPointConfigurations.value(identifier);
- else if (conPriv->snapConfigurations.contains(identifier))
- item.d = conPriv->snapConfigurations.value(identifier);
- else if (conPriv->userChoiceConfigurations.contains(identifier))
- item.d = conPriv->userChoiceConfigurations.value(identifier);
- return item;
+ foreach (QNetworkSessionEngine *engine, conPriv->sessionEngines) {
+ if (engine->accessPointConfigurations.contains(identifier))
+ item.d = engine->accessPointConfigurations.value(identifier);
+ else if (engine->snapConfigurations.contains(identifier))
+ item.d = engine->snapConfigurations.value(identifier);
+ else if (engine->userChoiceConfigurations.contains(identifier))
+ item.d = engine->userChoiceConfigurations.value(identifier);
+ else
+ continue;
+
+ return item;
+ }
+
+ return item;
}
/*!
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp
index f8e0d7b..09714e5 100644
--- a/src/network/bearer/qnetworkconfigmanager_p.cpp
+++ b/src/network/bearer/qnetworkconfigmanager_p.cpp
@@ -53,50 +53,34 @@ QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QBearerEngineFactoryInterface_iid, QLatin1String("/bearer")))
+QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate()
+{
+ while (!sessionEngines.isEmpty())
+ delete sessionEngines.takeFirst();
+}
+
void QNetworkConfigurationManagerPrivate::registerPlatformCapabilities()
{
capFlags = QNetworkConfigurationManager::ForcedRoaming;
}
-void QNetworkConfigurationManagerPrivate::configurationAdded(QNetworkConfigurationPrivate *cpPriv, QNetworkSessionEngine *engine)
+void QNetworkConfigurationManagerPrivate::configurationAdded(QNetworkConfigurationPrivatePointer ptr)
{
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> ptr(new QNetworkConfigurationPrivate);
-
- ptr.data()->isValid = cpPriv->isValid;
- ptr.data()->name = cpPriv->name;
- ptr.data()->id = cpPriv->id;
- ptr.data()->state = cpPriv->state;
- ptr.data()->type = cpPriv->type;
- ptr.data()->roamingSupported = cpPriv->roamingSupported;
- ptr.data()->purpose = cpPriv->purpose;
- ptr.data()->internet = cpPriv->internet;
-
- accessPointConfigurations.insert(cpPriv->id, ptr);
- configurationEngine.insert(cpPriv->id, engine);
-
if (!firstUpdate) {
QNetworkConfiguration item;
item.d = ptr;
emit configurationAdded(item);
}
- if (ptr.data()->state == QNetworkConfiguration::Active) {
+ if (ptr->state == QNetworkConfiguration::Active) {
++onlineConfigurations;
if (!firstUpdate && onlineConfigurations == 1)
emit onlineStateChanged(true);
}
}
-void QNetworkConfigurationManagerPrivate::configurationRemoved(const QString &id)
+void QNetworkConfigurationManagerPrivate::configurationRemoved(QNetworkConfigurationPrivatePointer ptr)
{
- if (!accessPointConfigurations.contains(id))
- return;
-
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> ptr =
- accessPointConfigurations.take(id);
-
- configurationEngine.remove(id);
-
ptr.data()->isValid = false;
if (!firstUpdate) {
@@ -112,57 +96,34 @@ void QNetworkConfigurationManagerPrivate::configurationRemoved(const QString &id
}
}
-void QNetworkConfigurationManagerPrivate::configurationChanged(QNetworkConfigurationPrivate *cpPriv)
+void QNetworkConfigurationManagerPrivate::configurationChanged(QNetworkConfigurationPrivatePointer ptr)
{
- if (!accessPointConfigurations.contains(cpPriv->id))
- return;
-
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> ptr =
- accessPointConfigurations.value(cpPriv->id);
-
- if (ptr.data()->isValid != cpPriv->isValid ||
- ptr.data()->name != cpPriv->name ||
- ptr.data()->id != cpPriv->id ||
- ptr.data()->state != cpPriv->state ||
- ptr.data()->type != cpPriv->type ||
- ptr.data()->roamingSupported != cpPriv->roamingSupported ||
- ptr.data()->purpose != cpPriv->purpose ||
- ptr.data()->internet != cpPriv->internet) {
-
- const QNetworkConfiguration::StateFlags oldState = ptr.data()->state;
-
- ptr.data()->isValid = cpPriv->isValid;
- ptr.data()->name = cpPriv->name;
- ptr.data()->id = cpPriv->id;
- ptr.data()->state = cpPriv->state;
- ptr.data()->type = cpPriv->type;
- ptr.data()->roamingSupported = cpPriv->roamingSupported;
- ptr.data()->purpose = cpPriv->purpose;
- ptr.data()->internet = cpPriv->internet;
+ if (!firstUpdate) {
+ QNetworkConfiguration item;
+ item.d = ptr;
+ emit configurationChanged(item);
+ }
- if (!firstUpdate) {
- QNetworkConfiguration item;
- item.d = ptr;
- emit configurationChanged(item);
- }
+ qDebug() << "Need to recalculate online state.";
+ QNetworkConfiguration::StateFlags oldState = ptr->state;
- if (ptr.data()->state == QNetworkConfiguration::Active && oldState != ptr.data()->state) {
- // configuration went online
- ++onlineConfigurations;
- if (!firstUpdate && onlineConfigurations == 1)
- emit onlineStateChanged(true);
- } else if (ptr.data()->state != QNetworkConfiguration::Active && oldState == QNetworkConfiguration::Active) {
- // configuration went offline
- --onlineConfigurations;
- if (!firstUpdate && onlineConfigurations == 0)
- emit onlineStateChanged(false);
- }
+ if (ptr->state == QNetworkConfiguration::Active && oldState != ptr->state) {
+ // configuration went online
+ ++onlineConfigurations;
+ if (!firstUpdate && onlineConfigurations == 1)
+ emit onlineStateChanged(true);
+ } else if (ptr->state != QNetworkConfiguration::Active && oldState == QNetworkConfiguration::Active) {
+ // configuration went offline
+ --onlineConfigurations;
+ if (!firstUpdate && onlineConfigurations == 0)
+ emit onlineStateChanged(false);
}
}
void QNetworkConfigurationManagerPrivate::updateInternetServiceConfiguration()
{
- if (!snapConfigurations.contains(QLatin1String("Internet Service Network"))) {
+#if 0
+ if (!generic->snapConfigurations.contains(QLatin1String("Internet Service Network"))) {
QNetworkConfigurationPrivate *serviceNetwork = new QNetworkConfigurationPrivate;
serviceNetwork->name = tr("Internet");
serviceNetwork->isValid = true;
@@ -172,7 +133,7 @@ void QNetworkConfigurationManagerPrivate::updateInternetServiceConfiguration()
QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> ptr(serviceNetwork);
- snapConfigurations.insert(serviceNetwork->id, ptr);
+ generic->snapConfigurations.insert(serviceNetwork->id, ptr);
if (!firstUpdate) {
QNetworkConfiguration item;
@@ -182,15 +143,15 @@ void QNetworkConfigurationManagerPrivate::updateInternetServiceConfiguration()
}
QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> ptr =
- snapConfigurations.value(QLatin1String("Internet Service Network"));
+ generic->snapConfigurations.value(QLatin1String("Internet Service Network"));
QList<QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> > serviceNetworkMembers;
QHash<QString, QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> >::const_iterator i =
- accessPointConfigurations.constBegin();
+ generic->accessPointConfigurations.constBegin();
QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Defined;
- while (i != accessPointConfigurations.constEnd()) {
+ while (i != generic->accessPointConfigurations.constEnd()) {
QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> child = i.value();
if (child.data()->internet && ((child.data()->state & QNetworkConfiguration::Defined)
@@ -212,186 +173,92 @@ void QNetworkConfigurationManagerPrivate::updateInternetServiceConfiguration()
item.d = ptr;
emit configurationChanged(item);
}
+#endif
}
void QNetworkConfigurationManagerPrivate::updateConfigurations()
{
if (firstUpdate) {
- updateState = NotUpdating;
onlineConfigurations = 0;
QFactoryLoader *l = loader();
QStringList keys = l->keys();
-#if defined (Q_OS_DARWIN)
- coreWifi = 0;
if (keys.contains(QLatin1String("corewlan"))) {
QBearerEnginePlugin *coreWlanPlugin =
qobject_cast<QBearerEnginePlugin *>(l->instance(QLatin1String("corewlan")));
if (coreWlanPlugin) {
- coreWifi = coreWlanPlugin->create(QLatin1String("corewlan"));
+ QNetworkSessionEngine *coreWifi = coreWlanPlugin->create(QLatin1String("corewlan"));
if (coreWifi) {
- connect(coreWifi, SIGNAL(configurationsChanged()),
- this, SLOT(updateConfigurations()));
+ sessionEngines.append(coreWifi);
}
}
}
-#else
-#ifdef BACKEND_NM
- nmWifi = 0;
+
if (keys.contains(QLatin1String("networkmanager"))) {
QBearerEnginePlugin *nmPlugin =
qobject_cast<QBearerEnginePlugin *>(l->instance(QLatin1String("networkmanager")));
if (nmPlugin) {
- nmWifi = nmPlugin->create(QLatin1String("networkmanager"));
+ QNetworkSessionEngine *nmWifi = nmPlugin->create(QLatin1String("networkmanager"));
if (nmWifi) {
- connect(nmWifi, SIGNAL(configurationsChanged()),
- this, SLOT(updateConfigurations()));
+ sessionEngines.append(nmWifi);
}
}
}
-#endif
- generic = 0;
if (keys.contains(QLatin1String("generic"))) {
QBearerEnginePlugin *genericPlugin =
qobject_cast<QBearerEnginePlugin *>(l->instance(QLatin1String("generic")));
if (genericPlugin) {
- generic = genericPlugin->create(QLatin1String("generic"));
+ QNetworkSessionEngine *generic = genericPlugin->create(QLatin1String("generic"));
if (generic) {
- connect(generic, SIGNAL(configurationsChanged()),
- this, SLOT(updateConfigurations()));
+ sessionEngines.append(generic);
+ connect(generic, SIGNAL(updateCompleted()),
+ this, SIGNAL(configurationUpdateComplete()));
+ connect(generic, SIGNAL(configurationAdded(QNetworkConfigurationPrivatePointer)),
+ this, SLOT(configurationAdded(QNetworkConfigurationPrivatePointer)));
+ connect(generic, SIGNAL(configurationRemoved(QNetworkConfigurationPrivatePointer)),
+ this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer)));
+ connect(generic, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)),
+ this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)));
}
}
}
-#endif
-#ifdef Q_OS_WIN
- nla = 0;
if (keys.contains(QLatin1String("nla"))) {
QBearerEnginePlugin *nlaPlugin =
qobject_cast<QBearerEnginePlugin *>(l->instance(QLatin1String("nla")));
if (nlaPlugin) {
- qDebug() << "creating nla backend";
- nla = nlaPlugin->create(QLatin1String("nla"));
+ QNetworkSessionEngine *nla = nlaPlugin->create(QLatin1String("nla"));
if (nla) {
- connect(nla, SIGNAL(configurationsChanged()),
- this, SLOT(updateConfigurations()));
+ sessionEngines.append(nla);
}
}
}
-#endif
-#ifdef Q_OS_WIN32
- nativeWifi = 0;
if (keys.contains(QLatin1String("nativewifi"))) {
QBearerEnginePlugin *nativeWifiPlugin =
qobject_cast<QBearerEnginePlugin *>(l->instance(QLatin1String("nativewifi")));
if (nativeWifiPlugin) {
- qDebug() << "Creating native wifi backend";
- nativeWifi = nativeWifiPlugin->create(QLatin1String("nativewifi"));
+ QNetworkSessionEngine *nativeWifi = nativeWifiPlugin->create(QLatin1String("nativewifi"));
if (nativeWifi) {
- connect(nativeWifi, SIGNAL(configurationsChanged()),
- this, SLOT(updateConfigurations()));
+ sessionEngines.append(nativeWifi);
capFlags |= QNetworkConfigurationManager::CanStartAndStopInterfaces;
}
}
}
-#endif
}
QNetworkSessionEngine *engine = qobject_cast<QNetworkSessionEngine *>(sender());
- if (updateState & Updating && engine) {
-#if defined (Q_OS_DARWIN)
- if (engine == coreWifi)
- updateState &= ~CoreWifiUpdating;
-#else
-#if defined(BACKEND_NM)
- if (engine == nmWifi)
- updateState &= ~NmUpdating;
- if (engine == generic)
- updateState &= ~GenericUpdating;
-#else
- if (engine == generic)
- updateState &= ~GenericUpdating;
-#endif
-#endif
-
-#ifdef Q_OS_WIN
- else if (engine == nla)
- updateState &= ~NlaUpdating;
-#ifdef Q_OS_WIN32
- else if (engine == nativeWifi)
- updateState &= ~NativeWifiUpdating;
-#endif
-#endif
- }
- QList<QNetworkSessionEngine *> engines;
- if (firstUpdate) {
-#if defined (Q_OS_DARWIN)
- if (coreWifi)
- engines << coreWifi;
-#else
-#if defined(BACKEND_NM)
- if (nmWifi)
- engines << nmWifi;
- if (generic)
- engines << generic;
-#else
- if (generic)
- engines << generic;
-#endif
-#endif
-
-#ifdef Q_OS_WIN
- if (nla)
- engines << nla;
-#ifdef Q_OS_WIN32
- if (nativeWifi)
- engines << nativeWifi;
-#endif
-#endif
- } else if (engine) {
- engines << engine;
- }
-
- while (!engines.isEmpty()) {
- engine = engines.takeFirst();
-
- bool ok;
- QList<QNetworkConfigurationPrivate *> foundConfigurations = engine->getConfigurations(&ok);
-
- // Find removed configurations.
- QList<QString> removedIdentifiers = configurationEngine.keys();
- for (int i = 0; i < foundConfigurations.count(); ++i)
- removedIdentifiers.removeOne(foundConfigurations.at(i)->id);
-
- // Update or add configurations.
- while (!foundConfigurations.isEmpty()) {
- QNetworkConfigurationPrivate *cpPriv = foundConfigurations.takeFirst();
-
- if (accessPointConfigurations.contains(cpPriv->id))
- configurationChanged(cpPriv);
- else
- configurationAdded(cpPriv, engine);
-
- delete cpPriv;
- }
-
- // Remove configurations.
- while (!removedIdentifiers.isEmpty()) {
- const QString id = removedIdentifiers.takeFirst();
-
- if (configurationEngine.value(id) == engine)
- configurationRemoved(id);
- }
+ if (!updatingEngines.isEmpty() && engine) {
+ int index = sessionEngines.indexOf(engine);
+ if (index >= 0)
+ updatingEngines.remove(index);
}
- updateInternetServiceConfiguration();
-
- if (updateState == Updating) {
- updateState = NotUpdating;
+ if (updating && updatingEngines.isEmpty()) {
+ updating = false;
emit configurationUpdateComplete();
}
@@ -407,22 +274,25 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
*/
QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration()
{
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> firstActive;
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> firstDiscovered;
+ QNetworkConfigurationPrivatePointer firstActive;
+ QNetworkConfigurationPrivatePointer firstDiscovered;
- QHash<QString, QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> >::const_iterator i =
- accessPointConfigurations.constBegin();
- while (i != accessPointConfigurations.constEnd()) {
- QNetworkConfigurationPrivate *priv = i.value().data();
+ foreach (QNetworkSessionEngine *engine, sessionEngines) {
+ QHash<QString, QNetworkConfigurationPrivatePointer>::const_iterator i =
+ engine->accessPointConfigurations.constBegin();
- if (!firstActive && priv->isValid &&
- (priv->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active)
- firstActive = i.value();
- if (!firstDiscovered && priv->isValid &&
- (priv->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered)
- firstDiscovered = i.value();
+ while (i != engine->accessPointConfigurations.constEnd()) {
+ QNetworkConfigurationPrivatePointer priv = i.value();
- ++i;
+ if (!firstActive && priv->isValid &&
+ (priv->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active)
+ firstActive = priv;
+ if (!firstDiscovered && priv->isValid &&
+ (priv->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered)
+ firstDiscovered = priv;
+
+ ++i;
+ }
}
QNetworkConfiguration item;
@@ -437,42 +307,12 @@ QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(
void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate()
{
- updateState = Updating;
-#if defined (Q_OS_DARWIN)
- if (coreWifi) {
- updateState |= CoreWifiUpdating;
- coreWifi->requestUpdate();
- }
-#else
-#if defined(BACKEND_NM)
- if (nmWifi) {
- updateState |= NmUpdating;
- nmWifi->requestUpdate();
- }
- if (generic) {
- updateState |= GenericUpdating;
- generic->requestUpdate();
- }
-#else
- if (generic) {
- updateState |= GenericUpdating;
- generic->requestUpdate();
- }
-#endif
-#endif
-#ifdef Q_OS_WIN
- if (nla) {
- updateState |= NlaUpdating;
- nla->requestUpdate();
- }
-#endif
+ updating = true;
-#ifdef Q_OS_WIN32
- if (nativeWifi) {
- updateState |= NativeWifiUpdating;
- nativeWifi->requestUpdate();
+ for (int i = 0; i < sessionEngines.count(); ++i) {
+ updatingEngines.insert(i);
+ sessionEngines.at(i)->requestUpdate();
}
-#endif
}
QT_END_NAMESPACE
diff --git a/src/network/bearer/qnetworkconfigmanager_p.h b/src/network/bearer/qnetworkconfigmanager_p.h
index 95358bc..27a0252 100644
--- a/src/network/bearer/qnetworkconfigmanager_p.h
+++ b/src/network/bearer/qnetworkconfigmanager_p.h
@@ -56,20 +56,9 @@
#include "qnetworkconfigmanager.h"
#include "qnetworkconfiguration_p.h"
-#include <QHash>
-#include <QStringList>
-
QT_BEGIN_NAMESPACE
-#ifdef BEARER_ENGINE
class QNetworkSessionEngine;
-class QGenericEngine;
-class QNlaEngine;
-class QNativeWifiEngine;
-class QNmWifiEngine;
-class QCoreWlanEngine;
-#endif
-
class QNetworkConfigurationManagerPrivate : public QObject
{
@@ -82,22 +71,7 @@ public:
updateConfigurations();
}
- virtual ~QNetworkConfigurationManagerPrivate()
- {
- QList<QString> configIdents = snapConfigurations.keys();
- foreach(const QString oldIface, configIdents) {
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> priv = snapConfigurations.take(oldIface);
- priv->isValid = false;
- priv->id.clear();
- }
-
- configIdents = accessPointConfigurations.keys();
- foreach(const QString oldIface, configIdents) {
- QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> priv = accessPointConfigurations.take(oldIface);
- priv->isValid = false;
- priv->id.clear();
- }
- }
+ virtual ~QNetworkConfigurationManagerPrivate();
QNetworkConfiguration defaultConfiguration();
@@ -106,12 +80,6 @@ public:
void performAsyncConfigurationUpdate();
- //this table contains an up to date list of all configs at any time.
- //it must be updated if configurations change, are added/removed or
- //the members of ServiceNetworks change
- QHash<QString, QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> > accessPointConfigurations;
- QHash<QString, QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> > snapConfigurations;
- QHash<QString, QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> > userChoiceConfigurations;
#ifdef BEARER_ENGINE
QHash<QString, QNetworkSessionEngine *> configurationEngine;
#endif
@@ -135,41 +103,21 @@ private:
#endif
#ifdef BEARER_ENGINE
- QNetworkSessionEngine *generic;
-#ifdef Q_OS_WIN
- QNetworkSessionEngine *nla;
-#ifndef Q_OS_WINCE
- QNetworkSessionEngine *nativeWifi;
-#endif
-#endif
-#ifdef BACKEND_NM
- QNetworkSessionEngine *nmWifi;
-#endif
-#ifdef Q_OS_DARWIN
- QNetworkSessionEngine *coreWifi;
-#endif
+public:
+ QList<QNetworkSessionEngine *> sessionEngines;
+private:
uint onlineConfigurations;
- enum EngineUpdate {
- NotUpdating = 0x00,
- Updating = 0x01,
- GenericUpdating = 0x02,
- NlaUpdating = 0x04,
- NativeWifiUpdating = 0x08,
- NmUpdating = 0x20,
- CoreWifiUpdating = 0x40,
- };
- Q_DECLARE_FLAGS(EngineUpdateState, EngineUpdate)
-
- EngineUpdateState updateState;
+ bool updating;
+ QSet<int> updatingEngines;
#endif
private Q_SLOTS:
#ifdef BEARER_ENGINE
- void configurationAdded(QNetworkConfigurationPrivate *cpPriv, QNetworkSessionEngine *engine);
- void configurationRemoved(const QString &id);
- void configurationChanged(QNetworkConfigurationPrivate *cpPriv);
+ void configurationAdded(QNetworkConfigurationPrivatePointer ptr);
+ void configurationRemoved(QNetworkConfigurationPrivatePointer ptr);
+ void configurationChanged(QNetworkConfigurationPrivatePointer ptr);
#endif
};
diff --git a/src/network/bearer/qnetworkconfiguration_p.h b/src/network/bearer/qnetworkconfiguration_p.h
index f00bcfa..8e69248 100644
--- a/src/network/bearer/qnetworkconfiguration_p.h
+++ b/src/network/bearer/qnetworkconfiguration_p.h
@@ -59,6 +59,7 @@
QT_BEGIN_NAMESPACE
+typedef QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> QNetworkConfigurationPrivatePointer;
class QNetworkConfigurationPrivate : public QSharedData
{
public:
@@ -89,7 +90,7 @@ public:
bool internet;
#endif
- QList<QExplicitlySharedDataPointer<QNetworkConfigurationPrivate> > serviceNetworkMembers;
+ QList<QNetworkConfigurationPrivatePointer> serviceNetworkMembers;
QNetworkInterface serviceInterface;
private:
diff --git a/src/network/bearer/qnetworksessionengine.cpp b/src/network/bearer/qnetworksessionengine.cpp
index 9e6839e..0aa9d19 100644
--- a/src/network/bearer/qnetworksessionengine.cpp
+++ b/src/network/bearer/qnetworksessionengine.cpp
@@ -50,6 +50,17 @@ QNetworkSessionEngine::QNetworkSessionEngine(QObject *parent)
QNetworkSessionEngine::~QNetworkSessionEngine()
{
+ foreach (const QString &oldIface, snapConfigurations.keys()) {
+ QNetworkConfigurationPrivatePointer priv = snapConfigurations.take(oldIface);
+ priv->isValid = false;
+ priv->id.clear();
+ }
+
+ foreach (const QString &oldIface, accessPointConfigurations.keys()) {
+ QNetworkConfigurationPrivatePointer priv = accessPointConfigurations.take(oldIface);
+ priv->isValid = false;
+ priv->id.clear();
+ }
}
#include "moc_qnetworksessionengine_p.cpp"
diff --git a/src/network/bearer/qnetworksessionengine_p.h b/src/network/bearer/qnetworksessionengine_p.h
index 9fbd4ac..0145976 100644
--- a/src/network/bearer/qnetworksessionengine_p.h
+++ b/src/network/bearer/qnetworksessionengine_p.h
@@ -53,14 +53,19 @@
// We mean it.
//
+#include "qnetworkconfiguration_p.h"
+
#include <QtCore/qobject.h>
#include <QtCore/qglobal.h>
#include <QtCore/qlist.h>
#include <QtCore/qstring.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qsharedpointer.h>
QT_BEGIN_NAMESPACE
-class QNetworkConfigurationPrivate;
+class QNetworkConfiguration;
+
class Q_NETWORK_EXPORT QNetworkSessionEngine : public QObject
{
Q_OBJECT
@@ -76,7 +81,6 @@ public:
QNetworkSessionEngine(QObject *parent = 0);
virtual ~QNetworkSessionEngine();
- virtual QList<QNetworkConfigurationPrivate *> getConfigurations(bool *ok = 0) = 0;
virtual QString getInterfaceFromId(const QString &id) = 0;
virtual bool hasIdentifier(const QString &id) = 0;
@@ -87,8 +91,21 @@ public:
virtual void requestUpdate() = 0;
+public:
+ //this table contains an up to date list of all configs at any time.
+ //it must be updated if configurations change, are added/removed or
+ //the members of ServiceNetworks change
+ QHash<QString, QNetworkConfigurationPrivatePointer> accessPointConfigurations;
+ QHash<QString, QNetworkConfigurationPrivatePointer> snapConfigurations;
+ QHash<QString, QNetworkConfigurationPrivatePointer> userChoiceConfigurations;
+
Q_SIGNALS:
- void configurationsChanged();
+ void configurationAdded(QNetworkConfigurationPrivatePointer config);
+ void configurationRemoved(QNetworkConfigurationPrivatePointer config);
+ void configurationChanged(QNetworkConfigurationPrivatePointer config);
+
+ void updateCompleted();
+
void connectionError(const QString &id, QNetworkSessionEngine::ConnectionError error);
};