1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). 4 ** Contact: http://www.qt-project.org/legal 5 ** 6 ** This file is part of the QtSystems module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and Digia. For licensing terms and 14 ** conditions see http://qt.digia.com/licensing. For further information 15 ** use the contact form at http://qt.digia.com/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 2.1 requirements 23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 24 ** 25 ** In addition, as a special exception, Digia gives you certain additional 26 ** rights. These rights are described in the Digia Qt LGPL Exception 27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 28 ** 29 ** GNU General Public License Usage 30 ** Alternatively, this file may be used under the terms of the GNU 31 ** General Public License version 3.0 as published by the Free Software 32 ** Foundation and appearing in the file LICENSE.GPL included in the 33 ** packaging of this file. Please review the following information to 34 ** ensure the GNU General Public License version 3.0 requirements will be 35 ** met: http://www.gnu.org/copyleft/gpl.html. 36 ** 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 // 43 // W A R N I N G 44 // ------------- 45 // 46 // This file is not part of the Qt API. It exists purely as an 47 // implementation detail. This header file may change from version to 48 // version without notice, or even be removed. 49 // 50 // We mean it. 51 // 52 53 #ifndef QNETWORKINFO_LINUX_P_H 54 #define QNETWORKINFO_LINUX_P_H 55 56 #include <qnetworkinfo.h> 57 58 #include <QtCore/qmap.h> 59 60 #if !defined(QT_NO_UDEV) 61 struct udev; 62 struct udev_monitor; 63 #endif // QT_NO_UDEV 64 65 QT_BEGIN_NAMESPACE 66 67 class QTimer; 68 69 #if !defined(QT_NO_OFONO) 70 class QOfonoWrapper; 71 #endif 72 73 #if !defined(QT_NO_UDEV) 74 class QSocketNotifier; 75 #endif // QT_NO_UDEV 76 77 class QNetworkInfoPrivate : public QObject 78 { 79 Q_OBJECT 80 81 public: 82 QNetworkInfoPrivate(QNetworkInfo *parent = nullptr); 83 ~QNetworkInfoPrivate() override; 84 85 int networkInterfaceCount(QNetworkInfo::NetworkMode mode); 86 int networkSignalStrength(QNetworkInfo::NetworkMode mode, int interface); 87 QNetworkInfo::CellDataTechnology currentCellDataTechnology(int interface); 88 QNetworkInfo::NetworkMode currentNetworkMode(); 89 QNetworkInfo::NetworkStatus networkStatus(QNetworkInfo::NetworkMode mode, int interface); 90 #ifndef QT_NO_NETWORKINTERFACE 91 QNetworkInterface interfaceForMode(QNetworkInfo::NetworkMode mode, int interface); 92 #endif // QT_NO_NETWORKINTERFACE 93 QString cellId(int interface); 94 QString currentMobileCountryCode(int interface); 95 QString currentMobileNetworkCode(int interface); 96 QString homeMobileCountryCode(int interface); 97 QString homeMobileNetworkCode(int interface); 98 QString imsi(int interface); 99 QString locationAreaCode(int interface); 100 QString macAddress(QNetworkInfo::NetworkMode mode, int interface); 101 QString networkName(QNetworkInfo::NetworkMode mode, int interface); 102 103 Q_SIGNALS: 104 void cellIdChanged(int interface, const QString &id); 105 void currentCellDataTechnologyChanged(int interface, QNetworkInfo::CellDataTechnology tech); 106 void currentMobileCountryCodeChanged(int interface, const QString &mcc); 107 void currentMobileNetworkCodeChanged(int interface, const QString &mnc); 108 void currentNetworkModeChanged(QNetworkInfo::NetworkMode mode); 109 void locationAreaCodeChanged(int interface, const QString &lac); 110 void networkInterfaceCountChanged(QNetworkInfo::NetworkMode mode, int count); 111 void networkNameChanged(QNetworkInfo::NetworkMode mode, int interface, const QString &name); 112 void networkSignalStrengthChanged(QNetworkInfo::NetworkMode mode, int interface, int strength); 113 void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); 114 115 protected: 116 void connectNotify(const QMetaMethod &signal) override; 117 void disconnectNotify(const QMetaMethod &signal) override; 118 119 private Q_SLOTS: 120 #if !defined(QT_NO_UDEV) 121 void onUdevChanged(); 122 #endif // QT_NO_UDEV 123 124 void onTimeout(); 125 126 private: 127 QNetworkInfo * const q_ptr; 128 Q_DECLARE_PUBLIC(QNetworkInfo) 129 130 int getNetworkInterfaceCount(QNetworkInfo::NetworkMode mode); 131 int getNetworkSignalStrength(QNetworkInfo::NetworkMode mode, int interface); 132 QNetworkInfo::NetworkMode getCurrentNetworkMode(); 133 QNetworkInfo::NetworkStatus getNetworkStatus(QNetworkInfo::NetworkMode mode, int interface); 134 QString getNetworkName(QNetworkInfo::NetworkMode mode, int interface); 135 136 bool watchCurrentNetworkMode{false}; 137 bool watchNetworkInterfaceCount{false}; 138 bool watchNetworkSignalStrength{false}; 139 bool watchNetworkStatus{false}; 140 bool watchNetworkName{false}; 141 QNetworkInfo::NetworkMode currentMode; 142 QMap<QNetworkInfo::NetworkMode, int> networkInterfaceCounts; 143 QMap<QPair<QNetworkInfo::NetworkMode, int>, int> networkSignalStrengths; 144 QMap<QPair<QNetworkInfo::NetworkMode, int>, QNetworkInfo::NetworkStatus> networkStatuses; 145 QMap<QPair<QNetworkInfo::NetworkMode, int>, QString> networkNames; 146 147 QTimer *timer{nullptr}; 148 149 #if !defined(QT_NO_OFONO) 150 QOfonoWrapper *ofonoWrapper; 151 #endif 152 153 #if !defined(QT_NO_UDEV) 154 QSocketNotifier *udevNotifier; 155 struct udev *udevHandle; 156 struct udev_monitor *udevMonitor; 157 #endif // QT_NO_UDEV 158 }; 159 160 QT_END_NAMESPACE 161 162 #endif // QNETWORKINFO_LINUX_P_H 163