| /**************************************************************************** |
| ** |
| ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). |
| ** All rights reserved. |
| ** Contact: Nokia Corporation (qt-info@nokia.com) |
| ** |
| ** This file is part of the plugins of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** GNU Lesser General Public License Usage |
| ** This file may be used under the terms of the GNU Lesser General Public |
| ** License version 2.1 as published by the Free Software Foundation and |
| ** appearing in the file LICENSE.LGPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU Lesser |
| ** General Public License version 2.1 requirements will be met: |
| ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
| ** |
| ** In addition, as a special exception, Nokia gives you certain additional |
| ** rights. These rights are described in the Nokia Qt LGPL Exception |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU General |
| ** Public License version 3.0 as published by the Free Software Foundation |
| ** and appearing in the file LICENSE.GPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU General |
| ** Public License version 3.0 requirements will be met: |
| ** http://www.gnu.org/copyleft/gpl.html. |
| ** |
| ** Other Usage |
| ** Alternatively, this file may be used in accordance with the terms and |
| ** conditions contained in a signed written agreement between you and Nokia. |
| ** |
| ** |
| ** |
| ** |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef QICDENGINE_H |
| #define QICDENGINE_H |
| |
| #include <QtNetwork/private/qbearerengine_p.h> |
| |
| #include <QtCore/qtimer.h> |
| |
| #include "maemo_icd.h" |
| |
| QT_BEGIN_NAMESPACE |
| |
| class QNetworkConfigurationPrivate; |
| class IapMonitor; |
| class QDBusInterface; |
| class QDBusServiceWatcher; |
| |
| inline QNetworkConfiguration::BearerType bearerTypeFromIapType(const QString &iapType) |
| { |
| if (iapType == QLatin1String("WLAN_INFRA") || |
| iapType == QLatin1String("WLAN_ADHOC")) { |
| return QNetworkConfiguration::BearerWLAN; |
| } else if (iapType == QLatin1String("GPRS")) { |
| return QNetworkConfiguration::BearerHSPA; |
| } else { |
| return QNetworkConfiguration::BearerUnknown; |
| } |
| } |
| |
| class IcdNetworkConfigurationPrivate : public QNetworkConfigurationPrivate |
| { |
| public: |
| IcdNetworkConfigurationPrivate(); |
| ~IcdNetworkConfigurationPrivate(); |
| |
| virtual QString bearerTypeName() const; |
| |
| // In Maemo the id field (defined in QNetworkConfigurationPrivate) |
| // is the IAP id (which typically is UUID) |
| QByteArray network_id; // typically WLAN ssid or similar |
| QString iap_type; // is this one WLAN or GPRS |
| |
| QString service_type; |
| QString service_id; |
| quint32 service_attrs; |
| |
| // Network attributes for this IAP, this is the value returned by icd and |
| // passed to it when connecting. |
| quint32 network_attrs; |
| }; |
| |
| inline IcdNetworkConfigurationPrivate *toIcdConfig(QNetworkConfigurationPrivatePointer ptr) |
| { |
| return static_cast<IcdNetworkConfigurationPrivate *>(ptr.data()); |
| } |
| |
| class QIcdEngine : public QBearerEngine |
| { |
| Q_OBJECT |
| |
| public: |
| QIcdEngine(QObject *parent = 0); |
| ~QIcdEngine(); |
| |
| bool hasIdentifier(const QString &id); |
| |
| Q_INVOKABLE void initialize(); |
| Q_INVOKABLE void requestUpdate(); |
| |
| QNetworkConfigurationManager::Capabilities capabilities() const; |
| |
| QNetworkSessionPrivate *createSessionBackend(); |
| |
| QNetworkConfigurationPrivatePointer defaultConfiguration(); |
| |
| void deleteConfiguration(const QString &iap_id); |
| |
| inline QNetworkConfigurationPrivatePointer configuration(const QString &id) |
| { |
| QMutexLocker locker(&mutex); |
| |
| return accessPointConfigurations.value(id); |
| } |
| |
| inline void addSessionConfiguration(QNetworkConfigurationPrivatePointer ptr) |
| { |
| QMutexLocker locker(&mutex); |
| |
| accessPointConfigurations.insert(ptr->id, ptr); |
| |
| locker.unlock(); |
| emit configurationAdded(ptr); |
| } |
| |
| inline void changedSessionConfiguration(QNetworkConfigurationPrivatePointer ptr) |
| { |
| emit configurationChanged(ptr); |
| } |
| |
| void cleanup(); |
| |
| void addConfiguration(QString &iap_id); |
| |
| Q_SIGNALS: |
| void iapStateChanged(const QString& iapid, uint icd_connection_state); |
| |
| private Q_SLOTS: |
| void finishAsyncConfigurationUpdate(); |
| void asyncUpdateConfigurationsSlot(QDBusMessage msg); |
| void connectionStateSignalsSlot(QDBusMessage msg); |
| void icdServiceOwnerChanged(const QString &serviceName, const QString &oldOwner, |
| const QString &newOwner); |
| |
| private: |
| void startListeningStateSignalsForAllConnections(); |
| void doRequestUpdate(QList<Maemo::IcdScanResult> scanned = QList<Maemo::IcdScanResult>()); |
| void cancelAsyncConfigurationUpdate(); |
| void getIcdInitialState(); |
| bool ensureDBusConnection(); |
| |
| private: |
| IapMonitor *iapMonitor; |
| QDBusInterface *m_dbusInterface; |
| QTimer m_scanTimer; |
| QString m_onlineIapId; |
| QStringList m_typesToBeScanned; |
| QList<Maemo::IcdScanResult> m_scanResult; |
| |
| QDBusServiceWatcher *m_icdServiceWatcher; |
| |
| bool firstUpdate; |
| bool m_scanGoingOn; |
| }; |
| |
| QT_END_NAMESPACE |
| |
| #endif // QICDENGINE_H |