From d8b49e6b51007d6f0a9faec82a66b95dc7ccf541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 4 Mar 2020 16:33:51 +0100 Subject: QtNetwork: Delete bearer management All remaining pieces are gone, configuration included. Relevant CMakeLists and configure.cmake were regenerated. Fixes: QTBUG-76502 Change-Id: I667b5da7e3802830d236d50b5e9190c2ee9c19e2 Reviewed-by: Lars Knoll --- src/network/.prev_CMakeLists.txt | 24 - src/network/CMakeLists.txt | 24 - src/network/access/qnetworkrequest.cpp | 2 - src/network/bearer/bearer.pri | 22 - src/network/bearer/qbearerengine.cpp | 101 -- src/network/bearer/qbearerengine_impl_p.h | 85 -- src/network/bearer/qbearerengine_p.h | 115 --- src/network/bearer/qbearerplugin.cpp | 57 -- src/network/bearer/qbearerplugin_p.h | 81 -- src/network/bearer/qnetworkconfigmanager.cpp | 389 -------- src/network/bearer/qnetworkconfigmanager.h | 109 --- src/network/bearer/qnetworkconfigmanager_p.cpp | 517 ---------- src/network/bearer/qnetworkconfigmanager_p.h | 141 --- src/network/bearer/qnetworkconfiguration.cpp | 596 ------------ src/network/bearer/qnetworkconfiguration.h | 147 --- src/network/bearer/qnetworkconfiguration_p.h | 99 -- src/network/bearer/qnetworksession.cpp | 743 -------------- src/network/bearer/qnetworksession.h | 159 --- src/network/bearer/qnetworksession_impl.cpp | 439 --------- src/network/bearer/qnetworksession_impl_p.h | 134 --- src/network/bearer/qnetworksession_p.h | 157 --- src/network/bearer/qsharednetworksession.cpp | 102 -- src/network/bearer/qsharednetworksession_p.h | 92 -- src/network/configure.cmake | 8 - src/network/configure.json | 11 - .../src_network_access_qnetworkaccessmanager.cpp | 9 - .../src_network_bearer_qnetworkconfigmanager.cpp | 58 -- .../code/src_network_bearer_qnetworksession.cpp | 60 -- src/network/doc/src/bearermanagement.qdoc | 242 ----- src/network/doc/src/network-programming.qdoc | 3 - src/network/kernel/qhostinfo.cpp | 1 - src/network/kernel/qhostinfo_p.h | 1 - src/network/kernel/qnetworkproxy.h | 1 - src/network/network.pro | 12 - src/plugins/CMakeLists.txt | 3 - src/plugins/bearer/.prev_CMakeLists.txt | 12 - src/plugins/bearer/CMakeLists.txt | 14 - src/plugins/bearer/android/CMakeLists.txt | 4 - src/plugins/bearer/android/android.pro | 4 - .../bearer/android/jar/.prev_CMakeLists.txt | 16 - src/plugins/bearer/android/jar/CMakeLists.txt | 22 - src/plugins/bearer/android/jar/jar.pro | 15 - .../qt5/android/bearer/QtNetworkReceiver.java | 92 -- src/plugins/bearer/android/src/CMakeLists.txt | 19 - src/plugins/bearer/android/src/android.json | 3 - src/plugins/bearer/android/src/main.cpp | 63 -- .../bearer/android/src/qandroidbearerengine.cpp | 391 -------- .../bearer/android/src/qandroidbearerengine.h | 95 -- src/plugins/bearer/android/src/src.pro | 14 - .../src/wrappers/androidconnectivitymanager.cpp | 387 -------- .../src/wrappers/androidconnectivitymanager.h | 168 ---- .../bearer/android/src/wrappers/wrappers.pri | 6 - src/plugins/bearer/bearer.pro | 11 - src/plugins/bearer/connman/.prev_CMakeLists.txt | 26 - src/plugins/bearer/connman/CMakeLists.txt | 22 - src/plugins/bearer/connman/connman.json | 3 - src/plugins/bearer/connman/connman.pro | 16 - src/plugins/bearer/connman/main.cpp | 85 -- src/plugins/bearer/connman/qconnmanengine.cpp | 570 ----------- src/plugins/bearer/connman/qconnmanengine.h | 145 --- .../bearer/connman/qconnmanservice_linux.cpp | 516 ---------- .../bearer/connman/qconnmanservice_linux_p.h | 230 ----- src/plugins/bearer/corewlan/CMakeLists.txt | 30 - src/plugins/bearer/corewlan/corewlan.json | 3 - src/plugins/bearer/corewlan/corewlan.pro | 20 - src/plugins/bearer/corewlan/main.cpp | 82 -- src/plugins/bearer/corewlan/qcorewlanengine.h | 147 --- src/plugins/bearer/corewlan/qcorewlanengine.mm | 862 ----------------- src/plugins/bearer/generic/CMakeLists.txt | 28 - src/plugins/bearer/generic/generic.json | 3 - src/plugins/bearer/generic/generic.pro | 16 - src/plugins/bearer/generic/main.cpp | 78 -- src/plugins/bearer/generic/qgenericengine.cpp | 446 --------- src/plugins/bearer/generic/qgenericengine.h | 90 -- src/plugins/bearer/nativewifi/main.cpp | 127 --- src/plugins/bearer/nativewifi/nativewifi.json | 3 - src/plugins/bearer/nativewifi/nativewifi.pro | 15 - src/plugins/bearer/nativewifi/platformdefs.h | 327 ------- .../bearer/nativewifi/qnativewifiengine.cpp | 622 ------------ src/plugins/bearer/nativewifi/qnativewifiengine.h | 106 -- .../bearer/networkmanager/.prev_CMakeLists.txt | 26 - src/plugins/bearer/networkmanager/CMakeLists.txt | 22 - src/plugins/bearer/networkmanager/main.cpp | 84 -- .../bearer/networkmanager/networkmanager.json | 3 - .../bearer/networkmanager/networkmanager.pro | 16 - .../networkmanager/qnetworkmanagerengine.cpp | 935 ------------------ .../bearer/networkmanager/qnetworkmanagerengine.h | 153 --- .../networkmanager/qnetworkmanagerservice.cpp | 1019 -------------------- .../bearer/networkmanager/qnetworkmanagerservice.h | 500 ---------- src/plugins/bearer/nla/main.cpp | 78 -- src/plugins/bearer/nla/nla.json | 3 - src/plugins/bearer/nla/nla.pro | 17 - src/plugins/bearer/nla/qnlaengine.cpp | 639 ------------ src/plugins/bearer/nla/qnlaengine.h | 110 --- src/plugins/bearer/platformdefs_win.h | 142 --- src/plugins/plugins.pro | 1 - src/tools/uic/qclass_lib_map.h | 3 - 97 files changed, 14449 deletions(-) delete mode 100644 src/network/bearer/bearer.pri delete mode 100644 src/network/bearer/qbearerengine.cpp delete mode 100644 src/network/bearer/qbearerengine_impl_p.h delete mode 100644 src/network/bearer/qbearerengine_p.h delete mode 100644 src/network/bearer/qbearerplugin.cpp delete mode 100644 src/network/bearer/qbearerplugin_p.h delete mode 100644 src/network/bearer/qnetworkconfigmanager.cpp delete mode 100644 src/network/bearer/qnetworkconfigmanager.h delete mode 100644 src/network/bearer/qnetworkconfigmanager_p.cpp delete mode 100644 src/network/bearer/qnetworkconfigmanager_p.h delete mode 100644 src/network/bearer/qnetworkconfiguration.cpp delete mode 100644 src/network/bearer/qnetworkconfiguration.h delete mode 100644 src/network/bearer/qnetworkconfiguration_p.h delete mode 100644 src/network/bearer/qnetworksession.cpp delete mode 100644 src/network/bearer/qnetworksession.h delete mode 100644 src/network/bearer/qnetworksession_impl.cpp delete mode 100644 src/network/bearer/qnetworksession_impl_p.h delete mode 100644 src/network/bearer/qnetworksession_p.h delete mode 100644 src/network/bearer/qsharednetworksession.cpp delete mode 100644 src/network/bearer/qsharednetworksession_p.h delete mode 100644 src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp delete mode 100644 src/network/doc/snippets/code/src_network_bearer_qnetworksession.cpp delete mode 100644 src/network/doc/src/bearermanagement.qdoc delete mode 100644 src/plugins/bearer/.prev_CMakeLists.txt delete mode 100644 src/plugins/bearer/CMakeLists.txt delete mode 100644 src/plugins/bearer/android/CMakeLists.txt delete mode 100644 src/plugins/bearer/android/android.pro delete mode 100644 src/plugins/bearer/android/jar/.prev_CMakeLists.txt delete mode 100644 src/plugins/bearer/android/jar/CMakeLists.txt delete mode 100644 src/plugins/bearer/android/jar/jar.pro delete mode 100644 src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java delete mode 100644 src/plugins/bearer/android/src/CMakeLists.txt delete mode 100644 src/plugins/bearer/android/src/android.json delete mode 100644 src/plugins/bearer/android/src/main.cpp delete mode 100644 src/plugins/bearer/android/src/qandroidbearerengine.cpp delete mode 100644 src/plugins/bearer/android/src/qandroidbearerengine.h delete mode 100644 src/plugins/bearer/android/src/src.pro delete mode 100644 src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp delete mode 100644 src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.h delete mode 100644 src/plugins/bearer/android/src/wrappers/wrappers.pri delete mode 100644 src/plugins/bearer/bearer.pro delete mode 100644 src/plugins/bearer/connman/.prev_CMakeLists.txt delete mode 100644 src/plugins/bearer/connman/CMakeLists.txt delete mode 100644 src/plugins/bearer/connman/connman.json delete mode 100644 src/plugins/bearer/connman/connman.pro delete mode 100644 src/plugins/bearer/connman/main.cpp delete mode 100644 src/plugins/bearer/connman/qconnmanengine.cpp delete mode 100644 src/plugins/bearer/connman/qconnmanengine.h delete mode 100644 src/plugins/bearer/connman/qconnmanservice_linux.cpp delete mode 100644 src/plugins/bearer/connman/qconnmanservice_linux_p.h delete mode 100644 src/plugins/bearer/corewlan/CMakeLists.txt delete mode 100644 src/plugins/bearer/corewlan/corewlan.json delete mode 100644 src/plugins/bearer/corewlan/corewlan.pro delete mode 100644 src/plugins/bearer/corewlan/main.cpp delete mode 100644 src/plugins/bearer/corewlan/qcorewlanengine.h delete mode 100644 src/plugins/bearer/corewlan/qcorewlanengine.mm delete mode 100644 src/plugins/bearer/generic/CMakeLists.txt delete mode 100644 src/plugins/bearer/generic/generic.json delete mode 100644 src/plugins/bearer/generic/generic.pro delete mode 100644 src/plugins/bearer/generic/main.cpp delete mode 100644 src/plugins/bearer/generic/qgenericengine.cpp delete mode 100644 src/plugins/bearer/generic/qgenericengine.h delete mode 100644 src/plugins/bearer/nativewifi/main.cpp delete mode 100644 src/plugins/bearer/nativewifi/nativewifi.json delete mode 100644 src/plugins/bearer/nativewifi/nativewifi.pro delete mode 100644 src/plugins/bearer/nativewifi/platformdefs.h delete mode 100644 src/plugins/bearer/nativewifi/qnativewifiengine.cpp delete mode 100644 src/plugins/bearer/nativewifi/qnativewifiengine.h delete mode 100644 src/plugins/bearer/networkmanager/.prev_CMakeLists.txt delete mode 100644 src/plugins/bearer/networkmanager/CMakeLists.txt delete mode 100644 src/plugins/bearer/networkmanager/main.cpp delete mode 100644 src/plugins/bearer/networkmanager/networkmanager.json delete mode 100644 src/plugins/bearer/networkmanager/networkmanager.pro delete mode 100644 src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp delete mode 100644 src/plugins/bearer/networkmanager/qnetworkmanagerengine.h delete mode 100644 src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp delete mode 100644 src/plugins/bearer/networkmanager/qnetworkmanagerservice.h delete mode 100644 src/plugins/bearer/nla/main.cpp delete mode 100644 src/plugins/bearer/nla/nla.json delete mode 100644 src/plugins/bearer/nla/nla.pro delete mode 100644 src/plugins/bearer/nla/qnlaengine.cpp delete mode 100644 src/plugins/bearer/nla/qnlaengine.h delete mode 100644 src/plugins/bearer/platformdefs_win.h (limited to 'src') diff --git a/src/network/.prev_CMakeLists.txt b/src/network/.prev_CMakeLists.txt index a1d30b6c83..6b0af4bcc9 100644 --- a/src/network/.prev_CMakeLists.txt +++ b/src/network/.prev_CMakeLists.txt @@ -70,30 +70,6 @@ qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i3 "/BASE:0x64000000" ) -if(ANDROID AND (QT_FEATURE_bearermanagement)) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES - jar/QtAndroidBearer.jar - ) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES - plugins/bearer/libplugins_bearer_qandroidbearer.so - ) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS - android.permission.ACCESS_NETWORK_STATE - ) -endif() - -qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement - SOURCES - bearer/qbearerengine.cpp bearer/qbearerengine_p.h - bearer/qbearerengine_impl_p.h - bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h - bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h - bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h - bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h - bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h - bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h -) - qt_extend_target(Network CONDITION QT_FEATURE_ftp SOURCES access/qftp.cpp access/qftp_p.h diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 86eadf653c..a779eeb6a0 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -70,30 +70,6 @@ qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i3 "/BASE:0x64000000" ) -if(ANDROID AND (QT_FEATURE_bearermanagement)) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES - jar/QtAndroidBearer.jar - ) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES - plugins/bearer/libplugins_bearer_qandroidbearer.so - ) - set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS - android.permission.ACCESS_NETWORK_STATE - ) -endif() - -qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement - SOURCES - bearer/qbearerengine.cpp bearer/qbearerengine_p.h - bearer/qbearerengine_impl_p.h - bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h - bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h - bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h - bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h - bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h - bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h -) - qt_extend_target(Network CONDITION QT_FEATURE_ftp SOURCES access/qftp.cpp access/qftp_p.h diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 33526bb7d5..f8cb3feb69 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -269,8 +269,6 @@ QT_BEGIN_NAMESPACE Indicates that this is a background transfer, rather than a user initiated transfer. Depending on the platform, background transfers may be subject to different policies. - The QNetworkSession ConnectInBackground property will be set according to - this attribute. \value Http2AllowedAttribute Requests only, type: QMetaType::Bool (default: false) diff --git a/src/network/bearer/bearer.pri b/src/network/bearer/bearer.pri deleted file mode 100644 index bcb7a5971e..0000000000 --- a/src/network/bearer/bearer.pri +++ /dev/null @@ -1,22 +0,0 @@ -# Qt network bearer management module - -HEADERS += bearer/qnetworkconfiguration.h \ - bearer/qnetworksession.h \ - bearer/qnetworkconfigmanager.h \ - bearer/qnetworkconfigmanager_p.h \ - bearer/qnetworkconfiguration_p.h \ - bearer/qnetworksession_p.h \ - bearer/qnetworksession_impl_p.h \ - bearer/qbearerengine_p.h \ - bearer/qbearerengine_impl_p.h \ - bearer/qbearerplugin_p.h \ - bearer/qsharednetworksession_p.h - -SOURCES += bearer/qnetworksession.cpp \ - bearer/qnetworksession_impl.cpp \ - bearer/qnetworkconfigmanager.cpp \ - bearer/qnetworkconfiguration.cpp \ - bearer/qnetworkconfigmanager_p.cpp \ - bearer/qbearerengine.cpp \ - bearer/qbearerplugin.cpp \ - bearer/qsharednetworksession.cpp diff --git a/src/network/bearer/qbearerengine.cpp b/src/network/bearer/qbearerengine.cpp deleted file mode 100644 index 06bf449611..0000000000 --- a/src/network/bearer/qbearerengine.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qbearerengine_p.h" -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -static void cleanUpConfigurations(QHash &configurations) -{ - for (auto &ptr : qExchange(configurations, {})) { - ptr->isValid = false; - ptr->id.clear(); - } -} - -static bool hasUsedConfiguration(const QHash &configurations) -{ - auto isUsed = [](const QNetworkConfigurationPrivatePointer &ptr) { - return ptr->ref.loadRelaxed() > 1; - }; - const auto end = configurations.end(); - return std::find_if(configurations.begin(), end, isUsed) != end; -} - -QBearerEngine::QBearerEngine(QObject *parent) - : QObject(parent) -{ -} - -QBearerEngine::~QBearerEngine() -{ - cleanUpConfigurations(snapConfigurations); - cleanUpConfigurations(accessPointConfigurations); - cleanUpConfigurations(userChoiceConfigurations); -} - -bool QBearerEngine::requiresPolling() const -{ - return false; -} - -/* - Returns \c true if configurations are in use; otherwise returns \c false. - - If configurations are in use and requiresPolling() returns \c true, polling will be enabled for - this engine. -*/ -bool QBearerEngine::configurationsInUse() const -{ - const auto locker = qt_scoped_lock(mutex); - return hasUsedConfiguration(accessPointConfigurations) - || hasUsedConfiguration(snapConfigurations) - || hasUsedConfiguration(userChoiceConfigurations); -} - -QT_END_NAMESPACE - -#include "moc_qbearerengine_p.cpp" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qbearerengine_impl_p.h b/src/network/bearer/qbearerengine_impl_p.h deleted file mode 100644 index 4221b73276..0000000000 --- a/src/network/bearer/qbearerengine_impl_p.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QBEARERENGINE_IMPL_H -#define QBEARERENGINE_IMPL_H - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class Q_NETWORK_EXPORT QBearerEngineImpl : public QBearerEngine -{ - Q_OBJECT - -public: - enum ConnectionError { - InterfaceLookupError = 0, - ConnectError, - OperationNotSupported, - DisconnectionError, - }; - - QBearerEngineImpl(QObject *parent = nullptr) : QBearerEngine(parent) {} - ~QBearerEngineImpl() {} - - virtual void connectToId(const QString &id) = 0; - virtual void disconnectFromId(const QString &id) = 0; - - virtual QString getInterfaceFromId(const QString &id) = 0; - - virtual QNetworkSession::State sessionStateForId(const QString &id) = 0; - - virtual quint64 bytesWritten(const QString &) { return Q_UINT64_C(0); } - virtual quint64 bytesReceived(const QString &) { return Q_UINT64_C(0); } - virtual quint64 startTime(const QString &) { return Q_UINT64_C(0); } - -Q_SIGNALS: - void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); -}; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QBearerEngineImpl::ConnectionError) - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QBEARERENGINE_IMPL_H diff --git a/src/network/bearer/qbearerengine_p.h b/src/network/bearer/qbearerengine_p.h deleted file mode 100644 index c69f478b26..0000000000 --- a/src/network/bearer/qbearerengine_p.h +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QBEARERENGINE_P_H -#define QBEARERENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qnetworkconfiguration_p.h" -#include "qnetworksession.h" -#include "qnetworkconfigmanager.h" - -#include -#include -#include -#include -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QNetworkConfiguration; - -class Q_NETWORK_EXPORT QBearerEngine : public QObject -{ - Q_OBJECT - - friend class QNetworkConfigurationManagerPrivate; - -public: - explicit QBearerEngine(QObject *parent = nullptr); - virtual ~QBearerEngine(); - - virtual bool hasIdentifier(const QString &id) = 0; - - virtual QNetworkConfigurationManager::Capabilities capabilities() const = 0; - - virtual QNetworkSessionPrivate *createSessionBackend() = 0; - - virtual QNetworkConfigurationPrivatePointer defaultConfiguration() = 0; - - virtual bool requiresPolling() const; - bool configurationsInUse() const; - -Q_SIGNALS: - void configurationAdded(QNetworkConfigurationPrivatePointer config); - void configurationRemoved(QNetworkConfigurationPrivatePointer config); - void configurationChanged(QNetworkConfigurationPrivatePointer config); - void updateCompleted(); - -protected: - //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 accessPointConfigurations; - QHash snapConfigurations; - QHash userChoiceConfigurations; - - mutable QRecursiveMutex mutex; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QBEARERENGINE_P_H diff --git a/src/network/bearer/qbearerplugin.cpp b/src/network/bearer/qbearerplugin.cpp deleted file mode 100644 index ec0d06e94c..0000000000 --- a/src/network/bearer/qbearerplugin.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qbearerplugin_p.h" - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -QBearerEnginePlugin::QBearerEnginePlugin(QObject *parent) - : QObject(parent) -{ -} - -QBearerEnginePlugin::~QBearerEnginePlugin() -{ -} - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qbearerplugin_p.h b/src/network/bearer/qbearerplugin_p.h deleted file mode 100644 index ac787d0541..0000000000 --- a/src/network/bearer/qbearerplugin_p.h +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QBEARERPLUGIN_P_H -#define QBEARERPLUGIN_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qbearerengine_p.h" - -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - - -#define QBearerEngineFactoryInterface_iid "org.qt-project.Qt.QBearerEngineFactoryInterface" - -class Q_NETWORK_EXPORT QBearerEnginePlugin : public QObject -{ - Q_OBJECT -public: - explicit QBearerEnginePlugin(QObject *parent = nullptr); - virtual ~QBearerEnginePlugin(); - - virtual QBearerEngine *create(const QString &key) const = 0; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QBEARERPLUGIN_P_H diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp deleted file mode 100644 index eb3eb59c83..0000000000 --- a/src/network/bearer/qnetworkconfigmanager.cpp +++ /dev/null @@ -1,389 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include "qnetworkconfigmanager.h" - -#include "qnetworkconfigmanager_p.h" -#include "qbearerengine_p.h" - -#include -#include -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -static QBasicAtomicPointer connManager_ptr; -static QBasicAtomicInt appShutdown; - -static void connManager_prepare() -{ - int shutdown = appShutdown.fetchAndStoreAcquire(0); - Q_ASSERT(shutdown == 0 || shutdown == 1); - Q_UNUSED(shutdown); -} - -static void connManager_cleanup() -{ - // this is not atomic or thread-safe! - int shutdown = appShutdown.fetchAndStoreAcquire(1); - Q_ASSERT(shutdown == 0); - Q_UNUSED(shutdown); - QNetworkConfigurationManagerPrivate *cmp = connManager_ptr.fetchAndStoreAcquire(nullptr); - if (cmp) - cmp->cleanup(); -} - -void QNetworkConfigurationManagerPrivate::addPreAndPostRoutine() -{ - qAddPreRoutine(connManager_prepare); - qAddPostRoutine(connManager_cleanup); -} - -QNetworkConfigurationManagerPrivate *qNetworkConfigurationManagerPrivate() -{ - QNetworkConfigurationManagerPrivate *ptr = connManager_ptr.loadAcquire(); - int shutdown = appShutdown.loadAcquire(); - if (!ptr && !shutdown) { - static QBasicMutex connManager_mutex; - QMutexLocker locker(&connManager_mutex); - if (!(ptr = connManager_ptr.loadAcquire())) { - ptr = new QNetworkConfigurationManagerPrivate; - - if (QCoreApplicationPrivate::mainThread() == QThread::currentThread()) { - // right thread or no main thread yet - ptr->addPreAndPostRoutine(); - ptr->initialize(); - } else { - // wrong thread, we need to make the main thread do this - QObject *obj = new QObject; - QObject::connect(obj, SIGNAL(destroyed()), ptr, SLOT(addPreAndPostRoutine()), Qt::DirectConnection); - ptr->initialize(); // this moves us to the right thread - obj->moveToThread(QCoreApplicationPrivate::mainThread()); - obj->deleteLater(); - } - - connManager_ptr.storeRelease(ptr); - } - } - return ptr; -} - -/*! - \class QNetworkConfigurationManager - \obsolete - - \brief The QNetworkConfigurationManager class manages the network configurations provided - by the system. - - \since 4.7 - - \inmodule QtNetwork - \ingroup network - - QNetworkConfigurationManager provides access to the network configurations known to the system and - enables applications to detect the system capabilities (with regards to network sessions) at runtime. - - A QNetworkConfiguration abstracts a set of configuration options describing how a - network interface has to be configured to connect to a particular target network. - QNetworkConfigurationManager maintains and updates the global list of - QNetworkConfigurations. Applications can access and filter this list via - allConfigurations(). If a new configuration is added or an existing one is removed or changed - the configurationAdded(), configurationRemoved() and configurationChanged() signals are emitted - respectively. - - The defaultConfiguration() can be used when intending to immediately create a new - network session without caring about the particular configuration. It returns - a \l QNetworkConfiguration::Discovered configuration. If there are not any - discovered ones an invalid configuration is returned. - - Some configuration updates may require some time to perform updates. A WLAN scan is - such an example. Unless the platform performs internal updates it may be required to - manually trigger configuration updates via QNetworkConfigurationManager::updateConfigurations(). - The completion of the update process is indicated by emitting the updateCompleted() - signal. The update process ensures that every existing QNetworkConfiguration instance - is updated. There is no need to ask for a renewed configuration list via allConfigurations(). - - \sa QNetworkConfiguration -*/ - -/*! - \fn void QNetworkConfigurationManager::configurationAdded(const QNetworkConfiguration &config) - - This signal is emitted whenever a new network configuration is added to the system. The new - configuration is specified by \a config. -*/ - -/*! - \fn void QNetworkConfigurationManager::configurationRemoved(const QNetworkConfiguration &config) - - This signal is emitted when a configuration is about to be removed from the system. The removed - configuration, specified by \a config, is invalid but retains name and identifier. -*/ - -/*! - \fn void QNetworkConfigurationManager::updateCompleted() - - This signal is emitted when the configuration update has been completed. Such an update can - be initiated via \l updateConfigurations(). -*/ - -/*! \fn void QNetworkConfigurationManager::configurationChanged(const QNetworkConfiguration &config) - - This signal is emitted when the \l {QNetworkConfiguration::state()}{state} of \a config changes. -*/ - -/*! - \fn void QNetworkConfigurationManager::onlineStateChanged(bool isOnline) - - This signal is emitted when the device changes from online to offline mode or vice versa. - \a isOnline represents the new state of the device. - - The state is considered to be online for as long as - \l{allConfigurations()}{allConfigurations}(QNetworkConfiguration::Active) returns a list with - at least one entry. -*/ - -/*! - \enum QNetworkConfigurationManager::Capability - - Specifies the system capabilities of the bearer API. The possible values are: - - \value CanStartAndStopInterfaces Network sessions and their underlying access points can be - started and stopped. If this flag is not set QNetworkSession - can only monitor but not influence the state of access points. - On some platforms this feature may require elevated user - permissions. This option is platform specific and may not - always be available. - \value DirectConnectionRouting Network sessions and their sockets can be bound to a - particular network interface. Any packet that passes through - the socket goes to the specified network interface and thus - disregards standard routing table entries. This may be useful - when two interfaces can reach overlapping IP ranges or an - application has specific needs in regards to target networks. - This option is platform specific and may not always be - available. - \value SystemSessionSupport If this flag is set the underlying platform ensures that a - network interface is not shut down until the last network - session has been \l{QNetworkSession::close()}{closed()}. This - works across multiple processes. If the platform session - support is missing this API can only ensure the above behavior - for network sessions within the same process. - In general mobile platforms have such - support whereas most desktop platform lack this capability. - \value ApplicationLevelRoaming The system gives applications control over the systems roaming - behavior. Applications can initiate roaming (in case the - current link is not suitable) and are consulted if the system - has identified a more suitable access point. - \value ForcedRoaming The system disconnects an existing access point and reconnects - via a more suitable one. The application does not have any - control over this process and has to reconnect its active - sockets. - \value DataStatistics If this flag is set QNetworkSession can provide statistics - about transmitted and received data. - \value NetworkSessionRequired If this flag is set the platform requires that a network - session is created before network operations can be performed. -*/ - -/*! - Constructs a QNetworkConfigurationManager with the given \a parent. - - Note that to ensure a valid list of current configurations immediately available, updating - is done during construction which causes some delay. -*/ -QNetworkConfigurationManager::QNetworkConfigurationManager(QObject *parent) - : QObject(parent) -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) { - connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)), - this, SIGNAL(configurationAdded(QNetworkConfiguration))); - connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)), - this, SIGNAL(configurationRemoved(QNetworkConfiguration))); - connect(priv, SIGNAL(configurationChanged(QNetworkConfiguration)), - this, SIGNAL(configurationChanged(QNetworkConfiguration))); - connect(priv, SIGNAL(onlineStateChanged(bool)), - this, SIGNAL(onlineStateChanged(bool))); - connect(priv, SIGNAL(configurationUpdateComplete()), - this, SIGNAL(updateCompleted())); - - priv->enablePolling(); - } -} - -/*! - Frees the resources associated with the QNetworkConfigurationManager object. -*/ -QNetworkConfigurationManager::~QNetworkConfigurationManager() -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - priv->disablePolling(); -} - - -/*! - Returns the default configuration to be used. This function always returns a discovered - configuration; otherwise an invalid configuration. - - In some cases it may be required to call updateConfigurations() and wait for the - updateCompleted() signal before calling this function. - - \sa allConfigurations() -*/ -QNetworkConfiguration QNetworkConfigurationManager::defaultConfiguration() const -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - return priv->defaultConfiguration(); - - return QNetworkConfiguration(); -} - -/*! - Returns the list of configurations which comply with the given \a filter. - - By default this function returns all (defined and undefined) configurations. - - A wireless network with a particular SSID may only be accessible in a - certain area despite the fact that the system has a valid configuration - for it. Therefore the filter flag may be used to limit the list to - discovered and possibly connected configurations only. - - If \a filter is set to zero this function returns all possible configurations. - - Note that this function returns the states for all configurations as they are known at - the time of this function call. If for instance a configuration of type WLAN is defined - the system may have to perform a WLAN scan in order to determine whether it is - actually available. To obtain the most accurate state updateConfigurations() should - be used to update each configuration's state. Note that such an update may require - some time. It's completion is signalled by updateCompleted(). In the absence of a - configuration update this function returns the best estimate at the time of the call. - Therefore, if WLAN configurations are of interest, it is recommended that - updateConfigurations() is called once after QNetworkConfigurationManager - instantiation (WLAN scans are too time consuming to perform in constructor). - After this the data is kept automatically up-to-date as the system reports - any changes. -*/ -QList QNetworkConfigurationManager::allConfigurations(QNetworkConfiguration::StateFlags filter) const -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - return priv->allConfigurations(filter); - - return QList(); -} - -/*! - Returns the QNetworkConfiguration for \a identifier; otherwise returns an - invalid QNetworkConfiguration. - - \sa QNetworkConfiguration::identifier() -*/ -QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(const QString &identifier) const -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - return priv->configurationFromIdentifier(identifier); - - return QNetworkConfiguration(); -} - -/*! - Returns \c true if the system is considered to be connected to another device via an active - network interface; otherwise returns \c false. - - This is equivalent to the following code snippet: - - \snippet code/src_network_bearer_qnetworkconfigmanager.cpp 0 - - \sa onlineStateChanged() -*/ -bool QNetworkConfigurationManager::isOnline() const -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - return priv->isOnline(); - - return false; -} - -/*! - Returns the capabilities supported by the current platform. -*/ -QNetworkConfigurationManager::Capabilities QNetworkConfigurationManager::capabilities() const -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - return priv->capabilities(); - - return {}; -} - -/*! - Initiates an update of all configurations. This may be used to initiate WLAN scans or other - time consuming updates which may be required to obtain the correct state for configurations. - - This call is asynchronous. On completion of this update the updateCompleted() signal is - emitted. If new configurations are discovered or old ones were removed or changed the update - process may trigger the emission of one or multiple configurationAdded(), - configurationRemoved() and configurationChanged() signals. - - If a configuration state changes as a result of this update all existing QNetworkConfiguration - instances are updated automatically. - - \sa allConfigurations() -*/ -void QNetworkConfigurationManager::updateConfigurations() -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) - priv->performAsyncConfigurationUpdate(); -} - -QT_END_NAMESPACE - -#include "moc_qnetworkconfigmanager.cpp" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworkconfigmanager.h b/src/network/bearer/qnetworkconfigmanager.h deleted file mode 100644 index b8f09f3d68..0000000000 --- a/src/network/bearer/qnetworkconfigmanager.h +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKCONFIGMANAGER_H -#define QNETWORKCONFIGMANAGER_H - -#if 0 -#pragma qt_class(QNetworkConfigurationManager) -#endif - -#include -#include -#include - -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationManagerPrivate; -class QT_DEPRECATED_BEARER_MANAGEMENT Q_NETWORK_EXPORT QNetworkConfigurationManager : public QObject -{ - Q_OBJECT - -public: - enum Capability { - CanStartAndStopInterfaces = 0x00000001, - DirectConnectionRouting = 0x00000002, - SystemSessionSupport = 0x00000004, - ApplicationLevelRoaming = 0x00000008, - ForcedRoaming = 0x00000010, - DataStatistics = 0x00000020, - NetworkSessionRequired = 0x00000040 - }; - - Q_DECLARE_FLAGS(Capabilities, Capability) - - explicit QNetworkConfigurationManager(QObject *parent = nullptr); - virtual ~QNetworkConfigurationManager(); - - QNetworkConfigurationManager::Capabilities capabilities() const; - - QNetworkConfiguration defaultConfiguration() const; - QList allConfigurations(QNetworkConfiguration::StateFlags flags = QNetworkConfiguration::StateFlags()) const; - QNetworkConfiguration configurationFromIdentifier(const QString &identifier) const; - - bool isOnline() const; - -public Q_SLOTS: - void updateConfigurations(); - -Q_SIGNALS: - void configurationAdded(const QNetworkConfiguration &config); - void configurationRemoved(const QNetworkConfiguration &config); - void configurationChanged(const QNetworkConfiguration &config); - void onlineStateChanged(bool isOnline); - void updateCompleted(); - -private: - Q_DISABLE_COPY(QNetworkConfigurationManager) -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkConfigurationManager::Capabilities) - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -QT_WARNING_POP - -#endif // QNETWORKCONFIGMANAGER_H diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp deleted file mode 100644 index f0aa452dd3..0000000000 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnetworkconfigmanager_p.h" -#include "qbearerplugin_p.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() - : QObject(), pollTimer(nullptr), - loader(QBearerEngineFactoryInterface_iid, QLatin1String("/bearer")), - forcedPolling(0), firstUpdate(true) -{ - qRegisterMetaType(); - qRegisterMetaType(); -} - -void QNetworkConfigurationManagerPrivate::initialize() -{ - //Two stage construction, because we only want to do this heavyweight work for the winner of the Q_GLOBAL_STATIC race. - bearerThread = new QDaemonThread(); - bearerThread->setObjectName(QStringLiteral("Qt bearer thread")); - - bearerThread->moveToThread(QCoreApplicationPrivate::mainThread()); // because cleanup() is called in main thread context. - moveToThread(bearerThread); - bearerThread->start(); - updateConfigurations(); -} - -QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate() -{ - QMutexLocker locker(&mutex); - - qDeleteAll(sessionEngines); - sessionEngines.clear(); - if (bearerThread) - bearerThread->quit(); -} - -void QNetworkConfigurationManagerPrivate::cleanup() -{ - QThread* thread = bearerThread; - deleteLater(); - if (thread->wait(QDeadlineTimer(5000))) - delete thread; -} - -QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration() const -{ - QMutexLocker locker(&mutex); - - for (QBearerEngine *engine : sessionEngines) { - QNetworkConfigurationPrivatePointer ptr = engine->defaultConfiguration(); - if (ptr) { - QNetworkConfiguration config; - config.d = ptr; - return config; - } - } - - // Engines don't have a default configuration. - - // Return first active snap - QNetworkConfigurationPrivatePointer defaultConfiguration; - - for (QBearerEngine *engine : sessionEngines) { - const auto locker = qt_scoped_lock(engine->mutex); - - for (const auto &ptr : qAsConst(engine->snapConfigurations)) { - const auto locker = qt_scoped_lock(ptr->mutex); - - if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - QNetworkConfiguration config; - config.d = ptr; - return config; - } else if (!defaultConfiguration) { - if ((ptr->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) - defaultConfiguration = ptr; - } - } - } - - // No Active SNAPs return first Discovered SNAP. - if (defaultConfiguration) { - QNetworkConfiguration config; - config.d = defaultConfiguration; - return config; - } - - /* - No Active or Discovered SNAPs, find the perferred access point. - The following priority order is used: - - 1. Active Ethernet - 2. Active WLAN - 3. Active Other - 4. Discovered Ethernet - 5. Discovered WLAN - 6. Discovered Other - */ - - for (QBearerEngine *engine : sessionEngines) { - - QMutexLocker locker(&engine->mutex); - - for (const auto &ptr : qAsConst(engine->accessPointConfigurations)) { - - QMutexLocker configLocker(&ptr->mutex); - QNetworkConfiguration::BearerType bearerType = ptr->bearerType; - - if ((ptr->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { - if (!defaultConfiguration) { - defaultConfiguration = ptr; - } else { - QMutexLocker defaultConfigLocker(&defaultConfiguration->mutex); - - if (defaultConfiguration->state == ptr->state) { - switch (defaultConfiguration->bearerType) { - case QNetworkConfiguration::BearerEthernet: - // do nothing - break; - case QNetworkConfiguration::BearerWLAN: - // Ethernet beats WLAN - defaultConfiguration = ptr; - break; - default: - // Ethernet and WLAN beats other - if (bearerType == QNetworkConfiguration::BearerEthernet || - bearerType == QNetworkConfiguration::BearerWLAN) { - defaultConfiguration = ptr; - } - } - } else { - // active beats discovered - if ((defaultConfiguration->state & QNetworkConfiguration::Active) != - QNetworkConfiguration::Active) { - defaultConfiguration = ptr; - } - } - } - } - } - } - - // No Active InternetAccessPoint return first Discovered InternetAccessPoint. - if (defaultConfiguration) { - QNetworkConfiguration config; - config.d = defaultConfiguration; - return config; - } - - return QNetworkConfiguration(); -} - -QList QNetworkConfigurationManagerPrivate::allConfigurations(QNetworkConfiguration::StateFlags filter) const -{ - QList result; - - QMutexLocker locker(&mutex); - - for (QBearerEngine *engine : sessionEngines) { - - const auto locker = qt_scoped_lock(engine->mutex); - - //find all InternetAccessPoints - for (const auto &ptr : qAsConst(engine->accessPointConfigurations)) { - const auto locker = qt_scoped_lock(ptr->mutex); - - if ((ptr->state & filter) == filter) { - QNetworkConfiguration pt; - pt.d = ptr; - result << pt; - } - } - - //find all service networks - for (const auto &ptr : qAsConst(engine->snapConfigurations)) { - const auto locker = qt_scoped_lock(ptr->mutex); - - if ((ptr->state & filter) == filter) { - QNetworkConfiguration pt; - pt.d = ptr; - result << pt; - } - } - } - - return result; -} - -QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(const QString &identifier) const -{ - QNetworkConfiguration item; - - const auto locker = qt_scoped_lock(mutex); - - for (QBearerEngine *engine : sessionEngines) { - const auto locker = qt_scoped_lock(engine->mutex); - if (auto ptr = engine->accessPointConfigurations.value(identifier)) { - item.d = std::move(ptr); - break; - } - if (auto ptr = engine->snapConfigurations.value(identifier)) { - item.d = std::move(ptr); - break; - } - if (auto ptr = engine->userChoiceConfigurations.value(identifier)) { - item.d = std::move(ptr); - break; - } - } - - return item; -} - -bool QNetworkConfigurationManagerPrivate::isOnline() const -{ - const auto locker = qt_scoped_lock(mutex); - - // We need allConfigurations since onlineConfigurations is filled with queued connections - // and thus is not always (more importantly just after creation) up to date - return !allConfigurations(QNetworkConfiguration::Active).isEmpty(); -} - -QNetworkConfigurationManager::Capabilities QNetworkConfigurationManagerPrivate::capabilities() const -{ - const auto locker = qt_scoped_lock(mutex); - - QNetworkConfigurationManager::Capabilities capFlags; - - for (QBearerEngine *engine : sessionEngines) - capFlags |= engine->capabilities(); - - return capFlags; -} - -void QNetworkConfigurationManagerPrivate::configurationAdded(QNetworkConfigurationPrivatePointer ptr) -{ - const auto locker = qt_scoped_lock(mutex); - - if (!firstUpdate) { - QNetworkConfiguration item; - item.d = ptr; - emit configurationAdded(item); - } - - auto ptrLocker = qt_unique_lock(ptr->mutex); - if (ptr->state == QNetworkConfiguration::Active) { - const auto id = ptr->id; - ptrLocker.unlock(); - onlineConfigurations.insert(id); - if (!firstUpdate && onlineConfigurations.count() == 1) - emit onlineStateChanged(true); - } -} - -void QNetworkConfigurationManagerPrivate::configurationRemoved(QNetworkConfigurationPrivatePointer ptr) -{ - const auto locker = qt_scoped_lock(mutex); - - { - const auto locker = qt_scoped_lock(ptr->mutex); - ptr->isValid = false; - } - - if (!firstUpdate) { - QNetworkConfiguration item; - item.d = ptr; - emit configurationRemoved(item); - } - - onlineConfigurations.remove(ptr->id); - if (!firstUpdate && onlineConfigurations.isEmpty()) - emit onlineStateChanged(false); -} - -void QNetworkConfigurationManagerPrivate::configurationChanged(QNetworkConfigurationPrivatePointer ptr) -{ - const auto locker = qt_scoped_lock(mutex); - - if (!firstUpdate) { - QNetworkConfiguration item; - item.d = ptr; - emit configurationChanged(item); - } - - bool previous = !onlineConfigurations.isEmpty(); - - { - const auto locker = qt_scoped_lock(ptr->mutex); - if (ptr->state == QNetworkConfiguration::Active) - onlineConfigurations.insert(ptr->id); - else - onlineConfigurations.remove(ptr->id); - } - - bool online = !onlineConfigurations.isEmpty(); - - if (!firstUpdate && online != previous) - emit onlineStateChanged(online); -} - -void QNetworkConfigurationManagerPrivate::updateConfigurations() -{ - typedef QMultiMap PluginKeyMap; - typedef PluginKeyMap::const_iterator PluginKeyMapConstIterator; - - auto locker = qt_unique_lock(mutex); - - if (firstUpdate) { - if (qobject_cast(sender())) - return; - - updating = false; - - bool envOK = false; - const int skipGeneric = qEnvironmentVariableIntValue("QT_EXCLUDE_GENERIC_BEARER", &envOK); - QBearerEngine *generic = nullptr; - QFactoryLoader *l = &loader; - const PluginKeyMap keyMap = l->keyMap(); - const PluginKeyMapConstIterator cend = keyMap.constEnd(); - QStringList addedEngines; - for (PluginKeyMapConstIterator it = keyMap.constBegin(); it != cend; ++it) { - const QString &key = it.value(); - if (addedEngines.contains(key)) - continue; - - addedEngines.append(key); - if (QBearerEngine *engine = qLoadPlugin(l, key)) { - if (key == QLatin1String("generic")) - generic = engine; - else - sessionEngines.append(engine); - - engine->moveToThread(bearerThread); - - connect(engine, SIGNAL(updateCompleted()), - this, SLOT(updateConfigurations()), - Qt::QueuedConnection); - connect(engine, SIGNAL(configurationAdded(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationAdded(QNetworkConfigurationPrivatePointer)), - Qt::QueuedConnection); - connect(engine, SIGNAL(configurationRemoved(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer)), - Qt::QueuedConnection); - connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)), - Qt::QueuedConnection); - } - } - - if (generic) { - if (!envOK || skipGeneric <= 0) - sessionEngines.append(generic); - else - delete generic; - } - } - - QBearerEngine *engine = qobject_cast(sender()); - if (engine && !updatingEngines.isEmpty()) - updatingEngines.remove(engine); - - if (updating && updatingEngines.isEmpty()) { - updating = false; - emit configurationUpdateComplete(); - } - - if (engine && !pollingEngines.isEmpty()) { - pollingEngines.remove(engine); - if (pollingEngines.isEmpty()) - startPolling(); - } - - if (firstUpdate) { - firstUpdate = false; - const QList enginesToInitialize = sessionEngines; //shallow copy the list in case it is modified when we unlock mutex - locker.unlock(); - for (QBearerEngine* engine : enginesToInitialize) - QMetaObject::invokeMethod(engine, "initialize", Qt::BlockingQueuedConnection); - } -} - -void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate() -{ - const auto locker = qt_scoped_lock(mutex); - - if (sessionEngines.isEmpty()) { - emit configurationUpdateComplete(); - return; - } - - updating = true; - - for (QBearerEngine *engine : qAsConst(sessionEngines)) { - updatingEngines.insert(engine); - QMetaObject::invokeMethod(engine, "requestUpdate"); - } -} - -QList QNetworkConfigurationManagerPrivate::engines() const -{ - const auto locker = qt_scoped_lock(mutex); - - return sessionEngines; -} - -void QNetworkConfigurationManagerPrivate::startPolling() -{ - const auto locker = qt_scoped_lock(mutex); - if (!pollTimer) { - pollTimer = new QTimer(this); - bool ok; - int interval = qEnvironmentVariableIntValue("QT_BEARER_POLL_TIMEOUT", &ok); - if (!ok) - interval = 10000;//default 10 seconds - pollTimer->setInterval(interval); - pollTimer->setSingleShot(true); - connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollEngines())); - } - - if (pollTimer->isActive()) - return; - - for (QBearerEngine *engine : qAsConst(sessionEngines)) { - if (engine->requiresPolling() && (forcedPolling || engine->configurationsInUse())) { - pollTimer->start(); - break; - } - } - performAsyncConfigurationUpdate(); -} - -void QNetworkConfigurationManagerPrivate::pollEngines() -{ - const auto locker = qt_scoped_lock(mutex); - - for (QBearerEngine *engine : qAsConst(sessionEngines)) { - if (engine->requiresPolling() && (forcedPolling || engine->configurationsInUse())) { - pollingEngines.insert(engine); - QMetaObject::invokeMethod(engine, "requestUpdate"); - } - } -} - -void QNetworkConfigurationManagerPrivate::enablePolling() -{ - const auto locker = qt_scoped_lock(mutex); - - ++forcedPolling; - - if (forcedPolling == 1) - QMetaObject::invokeMethod(this, "startPolling"); -} - -void QNetworkConfigurationManagerPrivate::disablePolling() -{ - const auto locker = qt_scoped_lock(mutex); - - --forcedPolling; -} - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworkconfigmanager_p.h b/src/network/bearer/qnetworkconfigmanager_p.h deleted file mode 100644 index 4819c2027c..0000000000 --- a/src/network/bearer/qnetworkconfigmanager_p.h +++ /dev/null @@ -1,141 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKCONFIGMANAGER_P_H -#define QNETWORKCONFIGMANAGER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qnetworkconfigmanager.h" -#include "qnetworkconfiguration_p.h" - -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QBearerEngine; -class QTimer; - -class Q_NETWORK_EXPORT QNetworkConfigurationManagerPrivate : public QObject -{ - Q_OBJECT - -public: - QNetworkConfigurationManagerPrivate(); - virtual ~QNetworkConfigurationManagerPrivate(); - - QNetworkConfiguration defaultConfiguration() const; - QList allConfigurations(QNetworkConfiguration::StateFlags filter) const; - QNetworkConfiguration configurationFromIdentifier(const QString &identifier) const; - - bool isOnline() const; - - QNetworkConfigurationManager::Capabilities capabilities() const; - - void performAsyncConfigurationUpdate(); - - QList engines() const; - - void enablePolling(); - void disablePolling(); - - void initialize(); - void cleanup(); -public Q_SLOTS: - void updateConfigurations(); - - static void addPreAndPostRoutine(); - -Q_SIGNALS: - void configurationAdded(const QNetworkConfiguration &config); - void configurationRemoved(const QNetworkConfiguration &config); - void configurationChanged(const QNetworkConfiguration &config); - void configurationUpdateComplete(); - void onlineStateChanged(bool isOnline); - -private Q_SLOTS: - void configurationAdded(QNetworkConfigurationPrivatePointer ptr); - void configurationRemoved(QNetworkConfigurationPrivatePointer ptr); - void configurationChanged(QNetworkConfigurationPrivatePointer ptr); - - void pollEngines(); - - -private: - Q_INVOKABLE void startPolling(); - QTimer *pollTimer; - QThread *bearerThread; - -private: - mutable QRecursiveMutex mutex; - - QFactoryLoader loader; - QList sessionEngines; - - QSet onlineConfigurations; - - QSet pollingEngines; - QSet updatingEngines; - int forcedPolling; - bool updating; - - bool firstUpdate; -}; - -Q_NETWORK_EXPORT QNetworkConfigurationManagerPrivate *qNetworkConfigurationManagerPrivate(); - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QNETWORKCONFMANAGER_P_H diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp deleted file mode 100644 index f016dea590..0000000000 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ /dev/null @@ -1,596 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include "qnetworkconfiguration.h" -#include "qnetworkconfiguration_p.h" -#include - -QT_BEGIN_NAMESPACE - -/*! - \class QNetworkConfiguration - \obsolete - - \brief The QNetworkConfiguration class provides an abstraction of one or more access point configurations. - - \since 4.7 - - \inmodule QtNetwork - \ingroup network - \ingroup shared - - QNetworkConfiguration encapsulates a single access point or service network. - In most cases a single access point configuration can be mapped to one network - interface. However a single network interface may not always map to only one - access point configuration. Multiple configurations for the same - network device may enable multiple access points. An example - device that could exhibit such a configuration might be a - Smartphone which allows the user to manage multiple WLAN - configurations while the device itself has only one WLAN network device. - - The QNetworkConfiguration also supports the concept of service networks. - This concept allows the grouping of multiple access point configurations - into one entity. Such a group is called service network and can be - beneficial in cases whereby a network session to a - particular destination network is required (e.g. a company network). - When using a service network the user doesn't usually care which one of the - connectivity options is chosen (e.g. corporate WLAN or VPN via GPRS) - as long as he can reach the company's target server. Depending - on the current position and time some of the access points that make - up the service network may not even be available. Furthermore - automated access point roaming can be enabled which enables the device - to change the network interface configuration dynamically while maintaining - the applications connection to the target network. It allows adaption - to the changing environment and may enable optimization with regards to - cost, speed or other network parameters. - - Special configurations of type UserChoice provide a placeholder configuration which is - resolved to an actual network configuration by the platform when a - \l {QNetworkSession}{session} is \l {QNetworkSession::open()}{opened}. Not all platforms - support the concept of a user choice configuration. - - \section1 Configuration States - - The list of available configurations can be obtained via - QNetworkConfigurationManager::allConfigurations(). A configuration can have - multiple states. The \l Defined configuration state indicates that the configuration - is stored on the device. However the configuration is not yet ready to be activated - as e.g. a WLAN may not be available at the current time. - - The \l Discovered state implies that the configuration is \l Defined and - the outside conditions are such that the configuration can be used immediately - to open a new network session. An example of such an outside condition may be - that the Ethernet cable is actually connected to the device or that the WLAN - with the specified SSID is in range. - - The \l Active state implies that the configuration is \l Discovered. A configuration - in this state is currently being used by an application. The underlying network - interface has a valid IP configuration and can transfer IP packets between the - device and the target network. - - The \l Undefined state indicates that the system has knowledge of possible target - networks but cannot actually use that knowledge to connect to it. An example - for such a state could be an encrypted WLAN that has been discovered - but the user hasn't actually saved a configuration including the required password - which would allow the device to connect to it. - - Depending on the type of configuration some states are transient in nature. A GPRS/UMTS - connection may almost always be \l Discovered if the GSM/UMTS network is available. - However if the GSM/UMTS network loses the connection the associated configuration may change its state - from \l Discovered to \l Defined as well. A similar use case might be triggered by - WLAN availability. QNetworkConfigurationManager::updateConfigurations() can be used to - manually trigger updates of states. Note that some platforms do not require such updates - as they implicitly change the state once it has been discovered. If the state of a - configuration changes all related QNetworkConfiguration instances change their state automatically. - - \sa QNetworkSession, QNetworkConfigurationManager -*/ - -/*! - \enum QNetworkConfiguration::Type - - This enum describes the type of configuration. - - \value InternetAccessPoint The configuration specifies the details for a single access point. - Note that configurations of type InternetAccessPoint may be part - of other QNetworkConfigurations of type ServiceNetwork. - \value ServiceNetwork The configuration is based on a group of QNetworkConfigurations of - type InternetAccessPoint. All group members can reach the same - target network. This type of configuration is a mandatory - requirement for roaming enabled network sessions. On some - platforms this form of configuration may also be called Service - Network Access Point (SNAP). - \value UserChoice The configuration is a placeholder which will be resolved to an - actual configuration by the platform when a session is opened. Depending - on the platform the selection may generate a popup dialog asking the user - for his preferred choice. - \value Invalid The configuration is invalid. -*/ - -/*! - \enum QNetworkConfiguration::StateFlag - - Specifies the configuration states. - - \value Undefined This state is used for transient configurations such as newly discovered - WLANs for which the user has not actually created a configuration yet. - \value Defined Defined configurations are known to the system but are not immediately - usable (e.g. a configured WLAN is not within range or the Ethernet cable - is currently not plugged into the machine). - \value Discovered A discovered configuration can be immediately used to create a new - QNetworkSession. An example of a discovered configuration could be a WLAN - which is within in range. If the device moves out of range the discovered - flag is dropped. A second example is a GPRS configuration which generally - remains discovered for as long as the device has network coverage. A - configuration that has this state is also in state - QNetworkConfiguration::Defined. If the configuration is a service network - this flag is set if at least one of the underlying access points - configurations has the Discovered state. - \value Active The configuration is currently used by an open network session - (see \l QNetworkSession::isOpen()). However this does not mean that the - current process is the entity that created the open session. It merely - indicates that if a new QNetworkSession were to be constructed based on - this configuration \l QNetworkSession::state() would return - \l QNetworkSession::Connected. This state implies the - QNetworkConfiguration::Discovered state. -*/ - -/*! - \enum QNetworkConfiguration::Purpose - - Specifies the purpose of the configuration. - - \value UnknownPurpose The configuration doesn't specify any purpose. This is the default value. - \value PublicPurpose The configuration can be used for general purpose internet access. - \value PrivatePurpose The configuration is suitable to access a private network such as an office Intranet. - \value ServiceSpecificPurpose The configuration can be used for operator specific services (e.g. - receiving MMS messages or content streaming). -*/ - -/*! - \enum QNetworkConfiguration::BearerType - - Specifies the type of bearer used by a configuration. - - \value BearerUnknown The type of bearer is unknown or unspecified. The bearerTypeName() - function may return additional information. - \value BearerEthernet The configuration is for an Ethernet interfaces. - \value BearerWLAN The configuration is for a Wireless LAN interface. - \value Bearer2G The configuration is for a CSD, GPRS, HSCSD, EDGE or cdmaOne interface. - \value Bearer3G The configuration is for a 3G interface. - \value Bearer4G The configuration is for a 4G interface. - \value BearerCDMA2000 The configuration is for CDMA interface. - \value BearerWCDMA The configuration is for W-CDMA/UMTS interface. - \value BearerHSPA The configuration is for High Speed Packet Access (HSPA) interface. - \value BearerBluetooth The configuration is for a Bluetooth interface. - \value BearerWiMAX The configuration is for a WiMAX interface. - \value BearerEVDO The configuration is for an EVDO (3G) interface. - \value BearerLTE The configuration is for a LTE (4G) interface. -*/ - -/*! - Constructs an invalid configuration object. - - \sa isValid() -*/ -QNetworkConfiguration::QNetworkConfiguration() - : d(nullptr) -{ -} - -/*! - Creates a copy of the QNetworkConfiguration object contained in \a other. -*/ -QNetworkConfiguration::QNetworkConfiguration(const QNetworkConfiguration &other) - : d(other.d) -{ -} - -/*! - Frees the resources associated with the QNetworkConfiguration object. -*/ -QNetworkConfiguration::~QNetworkConfiguration() -{ -} - -/*! - Copies the content of the QNetworkConfiguration object contained in \a other into this one. -*/ -QNetworkConfiguration &QNetworkConfiguration::operator=(const QNetworkConfiguration &other) -{ - d = other.d; - return *this; -} - -/*! - \fn void QNetworkConfiguration::swap(QNetworkConfiguration &other) - \since 5.0 - - Swaps this network configuration with \a other. This function is - very fast and never fails. -*/ - -/*! - Returns \c true, if this configuration is the same as the \a other - configuration given; otherwise returns \c false. -*/ -bool QNetworkConfiguration::operator==(const QNetworkConfiguration &other) const -{ - return (d == other.d); -} - -/*! - \fn bool QNetworkConfiguration::operator!=(const QNetworkConfiguration &other) const - - Returns \c true if this configuration is not the same as the \a other - configuration given; otherwise returns \c false. -*/ - -/*! - Returns the user visible name of this configuration. - - The name may either be the name of the underlying access point or the - name for service network that this configuration represents. -*/ -QString QNetworkConfiguration::name() const -{ - if (!d) - return QString(); - - QMutexLocker locker(&d->mutex); - return d->name; -} - -/*! - Returns the unique and platform specific identifier for this network configuration; - otherwise an empty string. -*/ -QString QNetworkConfiguration::identifier() const -{ - if (!d) - return QString(); - - QMutexLocker locker(&d->mutex); - return d->id; -} - -/*! - Returns the type of the configuration. - - A configuration can represent a single access point configuration or - a set of access point configurations. Such a set is called service network. - A configuration that is based on a service network can potentially support - roaming of network sessions. -*/ -QNetworkConfiguration::Type QNetworkConfiguration::type() const -{ - if (!d) - return QNetworkConfiguration::Invalid; - - QMutexLocker locker(&d->mutex); - return d->type; -} - -/*! - Returns \c true if this QNetworkConfiguration object is valid. - A configuration may become invalid if the user deletes the configuration or - the configuration was default-constructed. - - The addition and removal of configurations can be monitored via the - QNetworkConfigurationManager. - - \sa QNetworkConfigurationManager -*/ -bool QNetworkConfiguration::isValid() const -{ - if (!d) - return false; - - QMutexLocker locker(&d->mutex); - return d->isValid; -} - -/*! - \since 5.9 - - Returns the connect timeout of this configuration. - - \sa setConnectTimeout -*/ -int QNetworkConfiguration::connectTimeout() const -{ - if (!d) - return QNetworkConfigurationPrivate::DefaultTimeout; - QMutexLocker locker(&d->mutex); - return d->timeout; -} - -/*! - \since 5.9 - - Sets the connect timeout of this configuration to \a timeout. - This allows control of the timeout used by \c QAbstractSocket - to establish a connection. - - \note \a timeout is in millisecond. - - \warning This will have no effect if the bearer plugin doesn't have - the CanStartAndStopInterfaces capability. - - Returns true if succeeded. - - \sa connectTimeout -*/ -bool QNetworkConfiguration::setConnectTimeout(int timeout) -{ - if (!d) - return false; - QMutexLocker locker(&d->mutex); - d->timeout = timeout; - return true; -} - -/*! - Returns the current state of the configuration. -*/ -QNetworkConfiguration::StateFlags QNetworkConfiguration::state() const -{ - if (!d) - return QNetworkConfiguration::Undefined; - - QMutexLocker locker(&d->mutex); - return d->state; -} - -/*! - Returns the purpose of this configuration. - - The purpose field may be used to programmatically determine the - purpose of a configuration. Such information is usually part of the - access point or service network meta data. -*/ -QNetworkConfiguration::Purpose QNetworkConfiguration::purpose() const -{ - if (!d) - return QNetworkConfiguration::UnknownPurpose; - - QMutexLocker locker(&d->mutex); - return d->purpose; -} - -/*! - Returns \c true if this configuration supports roaming; otherwise false. -*/ -bool QNetworkConfiguration::isRoamingAvailable() const -{ - if (!d) - return false; - - QMutexLocker locker(&d->mutex); - return d->roamingSupported; -} - -/*! - Returns all sub configurations of this network configuration in priority order. The first sub - configuration in the list has the highest priority. - - Only network configurations of type \l ServiceNetwork can have children. Otherwise this - function returns an empty list. -*/ -QList QNetworkConfiguration::children() const -{ - return {}; -} - -/*! - Returns the type of bearer used by this network configuration. - - If the bearer type is \l {QNetworkConfiguration::BearerUnknown}{unknown} the bearerTypeName() - function can be used to retrieve a textural type name for the bearer. - - An invalid network configuration always returns the BearerUnknown value. - - \sa bearerTypeName(), bearerTypeFamily() -*/ -QNetworkConfiguration::BearerType QNetworkConfiguration::bearerType() const -{ - if (!isValid()) - return BearerUnknown; - - QMutexLocker locker(&d->mutex); - return d->bearerType; -} - -/*! - \since 5.2 - - Returns the bearer type family used by this network configuration. - The following table lists how bearerType() values map to - bearerTypeFamily() values: - - \table - \header - \li bearer type - \li bearer type family - \row - \li BearerUnknown, Bearer2G, BearerEthernet, BearerWLAN, - BearerBluetooth - \li (same type) - \row - \li BearerCDMA2000, BearerEVDO, BearerWCDMA, BearerHSPA, Bearer3G - \li Bearer3G - \row - \li BearerWiMAX, BearerLTE, Bearer4G - \li Bearer4G - \endtable - - An invalid network configuration always returns the BearerUnknown value. - - \sa bearerType(), bearerTypeName() -*/ -QNetworkConfiguration::BearerType QNetworkConfiguration::bearerTypeFamily() const -{ - QNetworkConfiguration::BearerType type = bearerType(); - switch (type) { - case QNetworkConfiguration::BearerUnknown: // fallthrough - case QNetworkConfiguration::Bearer2G: // fallthrough - case QNetworkConfiguration::BearerEthernet: // fallthrough - case QNetworkConfiguration::BearerWLAN: // fallthrough - case QNetworkConfiguration::BearerBluetooth: - return type; - case QNetworkConfiguration::BearerCDMA2000: // fallthrough - case QNetworkConfiguration::BearerEVDO: // fallthrough - case QNetworkConfiguration::BearerWCDMA: // fallthrough - case QNetworkConfiguration::BearerHSPA: // fallthrough - case QNetworkConfiguration::Bearer3G: - return QNetworkConfiguration::Bearer3G; - case QNetworkConfiguration::BearerWiMAX: // fallthrough - case QNetworkConfiguration::BearerLTE: // fallthrough - case QNetworkConfiguration::Bearer4G: - return QNetworkConfiguration::Bearer4G; - default: - qWarning() << "unknown bearer type" << type; - return QNetworkConfiguration::BearerUnknown; - } -} -/*! - Returns the type of bearer used by this network configuration as a string. - - The string is not translated and therefore cannot be shown to the user. The subsequent table - shows the fixed mappings between BearerType and the bearer type name for known types. If the - BearerType is unknown this function may return additional information if it is available; - otherwise an empty string will be returned. - - \table - \header - \li BearerType - \li Value - \row - \li BearerUnknown - \li The session is based on an unknown or unspecified bearer type. The value of the - string returned describes the bearer type. - \row - \li BearerEthernet - \li Ethernet - \row - \li BearerWLAN - \li WLAN - \row - \li Bearer2G - \li 2G - \row - \li Bearer3G - \li 3G - \row - \li Bearer4G - \li 4G - \row - \li BearerCDMA2000 - \li CDMA2000 - \row - \li BearerWCDMA - \li WCDMA - \row - \li BearerHSPA - \li HSPA - \row - \li BearerBluetooth - \li Bluetooth - \row - \li BearerWiMAX - \li WiMAX - \row - \li BearerEVDO - \li EVDO - \row - \li BearerLTE - \li LTE - \endtable - - This function returns an empty string if this is an invalid configuration, a network - configuration of type \l QNetworkConfiguration::ServiceNetwork or - \l QNetworkConfiguration::UserChoice. - - \sa bearerType(), bearerTypeFamily() -*/ -QString QNetworkConfiguration::bearerTypeName() const -{ - if (!isValid()) - return QString(); - - QMutexLocker locker(&d->mutex); - - if (d->type == QNetworkConfiguration::ServiceNetwork || - d->type == QNetworkConfiguration::UserChoice) - return QString(); - - switch (d->bearerType) { - case BearerEthernet: - return QStringLiteral("Ethernet"); - case BearerWLAN: - return QStringLiteral("WLAN"); - case Bearer2G: - return QStringLiteral("2G"); - case Bearer3G: - return QStringLiteral("3G"); - case Bearer4G: - return QStringLiteral("4G"); - case BearerCDMA2000: - return QStringLiteral("CDMA2000"); - case BearerWCDMA: - return QStringLiteral("WCDMA"); - case BearerHSPA: - return QStringLiteral("HSPA"); - case BearerBluetooth: - return QStringLiteral("Bluetooth"); - case BearerWiMAX: - return QStringLiteral("WiMAX"); - case BearerEVDO: - return QStringLiteral("EVDO"); - case BearerLTE: - return QStringLiteral("LTE"); - case BearerUnknown: - break; - } - return QStringLiteral("Unknown"); -} - -QT_END_NAMESPACE diff --git a/src/network/bearer/qnetworkconfiguration.h b/src/network/bearer/qnetworkconfiguration.h deleted file mode 100644 index 69864a3165..0000000000 --- a/src/network/bearer/qnetworkconfiguration.h +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKCONFIGURATION_H -#define QNETWORKCONFIGURATION_H - -#if 0 -#pragma qt_class(QNetworkConfiguration) -#endif - -#include - -#include -#include -#include -#include - -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -class QT_DEPRECATED_BEARER_MANAGEMENT Q_NETWORK_EXPORT QNetworkConfiguration -{ -public: - QNetworkConfiguration(); - QNetworkConfiguration(const QNetworkConfiguration& other); - QNetworkConfiguration &operator=(QNetworkConfiguration &&other) noexcept { swap(other); return *this; } - QNetworkConfiguration &operator=(const QNetworkConfiguration &other); - ~QNetworkConfiguration(); - - void swap(QNetworkConfiguration &other) noexcept { qSwap(d, other.d); } - - bool operator==(const QNetworkConfiguration &other) const; - inline bool operator!=(const QNetworkConfiguration &other) const - { return !operator==(other); } - - enum Type { - InternetAccessPoint = 0, - ServiceNetwork, - UserChoice, - Invalid - }; - - enum Purpose { - UnknownPurpose = 0, - PublicPurpose, - PrivatePurpose, - ServiceSpecificPurpose - }; - - enum StateFlag { - Undefined = 0x0000001, - Defined = 0x0000002, - Discovered = 0x0000006, - Active = 0x000000e - }; - Q_DECLARE_FLAGS(StateFlags, StateFlag) - - enum BearerType { - BearerUnknown, - BearerEthernet, - BearerWLAN, - Bearer2G, - BearerCDMA2000, - BearerWCDMA, - BearerHSPA, - BearerBluetooth, - BearerWiMAX, - BearerEVDO, - BearerLTE, - Bearer3G, - Bearer4G - }; - - StateFlags state() const; - Type type() const; - Purpose purpose() const; - - BearerType bearerType() const; - BearerType bearerTypeFamily() const; - QString bearerTypeName() const; - - QString identifier() const; - bool isRoamingAvailable() const; - QList children() const; - - QString name() const; - bool isValid() const; - - int connectTimeout() const; - bool setConnectTimeout(int timeout); - -private: - friend class QNetworkConfigurationPrivate; - friend class QNetworkConfigurationManager; - friend class QNetworkConfigurationManagerPrivate; - friend class QNetworkSessionPrivate; - QExplicitlySharedDataPointer d; -}; - -Q_DECLARE_SHARED(QNetworkConfiguration) - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QNetworkConfiguration) - -QT_WARNING_POP - -#endif // QNETWORKCONFIGURATION_H diff --git a/src/network/bearer/qnetworkconfiguration_p.h b/src/network/bearer/qnetworkconfiguration_p.h deleted file mode 100644 index 96854fe831..0000000000 --- a/src/network/bearer/qnetworkconfiguration_p.h +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKCONFIGURATIONPRIVATE_H -#define QNETWORKCONFIGURATIONPRIVATE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qnetworkconfiguration.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -typedef QExplicitlySharedDataPointer QNetworkConfigurationPrivatePointer; -class QNetworkConfigurationPrivate : public QSharedData -{ -public: - QNetworkConfigurationPrivate() : - type(QNetworkConfiguration::Invalid), - purpose(QNetworkConfiguration::UnknownPurpose), - bearerType(QNetworkConfiguration::BearerUnknown), - isValid(false), roamingSupported(false), - timeout(DefaultTimeout) - {} - - mutable QRecursiveMutex mutex; - - QString name; - QString id; - - QNetworkConfiguration::StateFlags state; - QNetworkConfiguration::Type type; - QNetworkConfiguration::Purpose purpose; - QNetworkConfiguration::BearerType bearerType; - - bool isValid; - bool roamingSupported; - int timeout; - - static Q_CONSTEXPR int DefaultTimeout = 30000; - -private: - Q_DISABLE_COPY_MOVE(QNetworkConfigurationPrivate) -}; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QNetworkConfigurationPrivatePointer) - -#endif // QNETWORKCONFIGURATIONPRIVATE_H diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp deleted file mode 100644 index 4e8ed1619b..0000000000 --- a/src/network/bearer/qnetworksession.cpp +++ /dev/null @@ -1,743 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include "qnetworksession.h" -#include "qnetworksession_p.h" -#include "qbearerengine_p.h" - -#include -#include -#include -#include - -#include "qnetworkconfigmanager_p.h" - -// for QNetworkSession::interface -#ifdef interface -# undef interface -#endif - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -/*! - \class QNetworkSession - \obsolete - - \brief The QNetworkSession class provides control over the system's access points - and enables session management for cases when multiple clients access the same access point. - - \since 4.7 - - \inmodule QtNetwork - \ingroup network - - A QNetworkSession enables control over the system's network interfaces. The session's configuration - parameter are determined via the QNetworkConfiguration object to which it is bound. Depending on the - type of the session (single access point or service network) a session may be linked to one or more - network interfaces. By means of \l{open()}{opening} and \l{close()}{closing} of network sessions - a developer can start and stop the systems network interfaces. If the configuration represents - multiple access points (see \l QNetworkConfiguration::ServiceNetwork) more advanced features such as roaming may be supported. - - QNetworkSession supports session management within the same process and depending on the platform's - capabilities may support out-of-process sessions. If the same - network configuration is used by multiple open sessions the underlying network interface is only terminated once - the last session has been closed. - - \section1 Roaming - - Applications may connect to the preferredConfigurationChanged() signal in order to - receive notifications when a more suitable access point becomes available. - In response to this signal the application must either initiate the roaming via migrate() - or ignore() the new access point. Once the session has roamed the - newConfigurationActivated() signal is emitted. The application may now test the - carrier and must either accept() or reject() it. The session will return to the previous - access point if the roaming was rejected. The subsequent state diagram depicts the required - state transitions. - - \image roaming-states.png - - Some platforms may distinguish forced roaming and application level roaming (ALR). - ALR implies that the application controls (via migrate(), ignore(), accept() and reject()) - whether a network session can roam from one access point to the next. Such control is useful - if the application maintains stateful socket connections and wants to control the transition from - one interface to the next. Forced roaming implies that the system automatically roams to the next network without - consulting the application. This has the advantage that the application can make use of roaming features - without actually being aware of it. It is expected that the application detects that the underlying - socket is broken and automatically reconnects via the new network link. - - If the platform supports both modes of roaming, an application indicates its preference - by connecting to the preferredConfigurationChanged() signal. Connecting to this signal means that - the application wants to take control over the roaming behavior and therefore implies application - level roaming. If the client does not connect to the preferredConfigurationChanged(), forced roaming - is used. If forced roaming is not supported the network session will not roam by default. - - Some applications may want to suppress any form of roaming altogether. Possible use cases may be - high priority downloads or remote services which cannot handle a roaming enabled client. Clients - can suppress roaming by connecting to the preferredConfigurationChanged() signal and answer each - signal emission with ignore(). - - \sa QNetworkConfiguration, QNetworkConfigurationManager -*/ - -/*! - \enum QNetworkSession::State - - This enum describes the connectivity state of the session. If the session is based on a - single access point configuration the state of the session is the same as the state of the - associated network interface. - - \value Invalid The session is invalid due to an invalid configuration. This may - happen due to a removed access point or a configuration that was - invalid to begin with. - \value NotAvailable The session is based on a defined but not yet discovered QNetworkConfiguration - (see \l QNetworkConfiguration::StateFlag). - \value Connecting The network session is being established. - \value Connected The network session is connected. If the current process wishes to use this session - it has to register its interest by calling open(). A network session - is considered to be ready for socket operations if it isOpen() and connected. - \value Closing The network session is in the process of being shut down. - \value Disconnected The network session is not connected. The associated QNetworkConfiguration - has the state QNetworkConfiguration::Discovered. - \value Roaming The network session is roaming from one access point to another - access point. -*/ - -/*! - \enum QNetworkSession::SessionError - - This enum describes the session errors that can occur. - - \value UnknownSessionError An unidentified error occurred. - \value SessionAbortedError The session was aborted by the user or system. - \value RoamingError The session cannot roam to a new configuration. - \value OperationNotSupportedError The operation is not supported for current configuration. - \value InvalidConfigurationError The operation cannot currently be performed for the - current configuration. -*/ - -/*! - \enum QNetworkSession::UsagePolicy - \since 5.0 - - These flags allow the system to inform the application of network usage restrictions that - may be in place. - - \value NoPolicy No policy in force, usage is unrestricted. - \value NoBackgroundTrafficPolicy Background network traffic (not user initiated) should be avoided - for example to save battery or data charges -*/ - -/*! - \fn void QNetworkSession::stateChanged(QNetworkSession::State state) - - This signal is emitted whenever the state of the network session changes. - The \a state parameter is the new state. - - \sa state() -*/ - -/*! - \fn void QNetworkSession::error(QNetworkSession::SessionError error) - - This signal is emitted after an error occurred. The \a error parameter - describes the error that occurred. - - \sa error(), errorString() -*/ - -/*! - \fn void QNetworkSession::preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless) - - This signal is emitted when the preferred configuration/access point for the - session changes. Only sessions which are based on service network configurations - may emit this signal. \a config can be used to determine access point specific - details such as proxy settings and \a isSeamless indicates whether roaming will - break the sessions IP address. - - As a consequence to this signal the application must either start the roaming process - by calling migrate() or choose to ignore() the new access point. - - If the roaming process is non-seamless the IP address will change which means that - a socket becomes invalid. However seamless mobility can ensure that the local IP address - does not change. This is achieved by using a virtual IP address which is bound to the actual - link address. During the roaming process the virtual address is attached to the new link - address. - - Some platforms may support the concept of Forced Roaming and Application Level Roaming (ALR). - Forced roaming implies that the platform may simply roam to a new configuration without - consulting applications. It is up to the application to detect the link layer loss and reestablish - its sockets. In contrast ALR provides the opportunity to prevent the system from roaming. - If this session is based on a configuration that supports roaming the application can choose - whether it wants to be consulted (ALR use case) by connecting to this signal. For as long as this signal - connection remains the session remains registered as a roaming stakeholder; otherwise roaming will - be enforced by the platform. - - \sa migrate(), ignore(), QNetworkConfiguration::isRoamingAvailable() -*/ - -/*! - \fn void QNetworkSession::newConfigurationActivated() - - This signal is emitted once the session has roamed to the new access point. - The application may reopen its socket and test the suitability of the new network link. - Subsequently it must either accept() or reject() the new access point. - - \sa accept(), reject() -*/ - -/*! - \fn void QNetworkSession::opened() - - This signal is emitted when the network session has been opened. - - The underlying network interface will not be shut down as long as the session remains open. - Note that this feature is dependent on \l{QNetworkConfigurationManager::SystemSessionSupport}{system wide session support}. -*/ - -/*! - \fn void QNetworkSession::closed() - - This signal is emitted when the network session has been closed. -*/ - -/*! - \fn void QNetworkSession::usagePoliciesChanged(QNetworkSession::UsagePolicies usagePolicies) - \since 5.0 - - This signal is emitted when the \a usagePolicies in force are changed by the system. -*/ - -/*! - Constructs a session based on \a connectionConfig with the given \a parent. - - \sa QNetworkConfiguration -*/ -QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig, QObject *parent) - : QObject(parent), d(nullptr) -{ - qRegisterMetaType(); - qRegisterMetaType(); - qRegisterMetaType(); - - // invalid configuration - if (!connectionConfig.identifier().isEmpty()) { - auto priv = qNetworkConfigurationManagerPrivate(); - const auto engines = priv ? priv->engines() : QList(); - for (QBearerEngine *engine : engines) { - if (engine->hasIdentifier(connectionConfig.identifier())) { - d = engine->createSessionBackend(); - d->q = this; - d->publicConfig = connectionConfig; - d->syncStateWithInterface(); - connect(d, SIGNAL(quitPendingWaitsForOpened()), this, SIGNAL(opened())); - connect(d, SIGNAL(error(QNetworkSession::SessionError)), - this, SIGNAL(error(QNetworkSession::SessionError))); - connect(d, SIGNAL(stateChanged(QNetworkSession::State)), - this, SIGNAL(stateChanged(QNetworkSession::State))); - connect(d, SIGNAL(closed()), this, SIGNAL(closed())); - connect(d, SIGNAL(preferredConfigurationChanged(QNetworkConfiguration,bool)), - this, SIGNAL(preferredConfigurationChanged(QNetworkConfiguration,bool))); - connect(d, SIGNAL(newConfigurationActivated()), - this, SIGNAL(newConfigurationActivated())); - connect(d, SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies)), - this, SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies))); - break; - } - } - } -} - -/*! - Frees the resources associated with the QNetworkSession object. -*/ -QNetworkSession::~QNetworkSession() -{ - delete d; -} - -/*! - Creates an open session which increases the session counter on the underlying network interface. - The system will not terminate a network interface until the session reference counter reaches zero. - Therefore an open session allows an application to register its use of the interface. - - As a result of calling open() the interface will be started if it is not connected/up yet. - Some platforms may not provide support for out-of-process sessions. On such platforms the session - counter ignores any sessions held by another process. The platform capabilities can be - detected via QNetworkConfigurationManager::capabilities(). - - Note that this call is asynchronous. Depending on the outcome of this call the results can be enquired - by connecting to the stateChanged(), opened() or error() signals. - - It is not a requirement to open a session in order to monitor the underlying network interface. - - \sa close(), stop(), isOpen() -*/ -void QNetworkSession::open() -{ - if (d) - d->open(); - else - emit error(InvalidConfigurationError); -} - -/*! - Waits until the session has been opened, up to \a msecs milliseconds. If the session has been opened, this - function returns \c true; otherwise it returns \c false. In the case where it returns \c false, you can call error() - to determine the cause of the error. - - The following example waits up to one second for the session to be opened: - - \snippet code/src_network_bearer_qnetworksession.cpp 0 - - If \a msecs is -1, this function will not time out. - - \sa open(), error() -*/ -bool QNetworkSession::waitForOpened(int msecs) -{ - if (!d) - return false; - - if (d->isOpen) - return true; - - if (!(d->state == Connecting || d->state == Connected)) { - return false; - } - - QEventLoop loop; - QObject::connect(d, SIGNAL(quitPendingWaitsForOpened()), &loop, SLOT(quit())); - QObject::connect(this, SIGNAL(error(QNetworkSession::SessionError)), &loop, SLOT(quit())); - - //final call - if (msecs >= 0) - QTimer::singleShot(msecs, &loop, SLOT(quit())); - - // enter the event loop and wait for opened/error/timeout - loop.exec(QEventLoop::ExcludeUserInputEvents | QEventLoop::WaitForMoreEvents); - - return d->isOpen; -} - -/*! - Decreases the session counter on the associated network configuration. If the session counter reaches zero - the active network interface is shut down. This also means that state() will only change from \l Connected to - \l Disconnected if the current session was the last open session. - - If the platform does not support out-of-process sessions calling this function does not stop the - interface. In this case \l{stop()} has to be used to force a shut down. - The platform capabilities can be detected via QNetworkConfigurationManager::capabilities(). - - Note that this call is asynchronous. Depending on the outcome of this call the results can be enquired - by connecting to the stateChanged(), opened() or error() signals. - - \sa open(), stop(), isOpen() -*/ -void QNetworkSession::close() -{ - if (d) - d->close(); -} - -/*! - Invalidates all open sessions against the network interface and therefore stops the - underlying network interface. This function always changes the session's state() flag to - \l Disconnected. - - \sa open(), close() -*/ -void QNetworkSession::stop() -{ - if (d) - d->stop(); -} - -/*! - Returns the QNetworkConfiguration that this network session object is based on. - - \sa QNetworkConfiguration -*/ -QNetworkConfiguration QNetworkSession::configuration() const -{ - return d ? d->publicConfig : QNetworkConfiguration(); -} - -#ifndef QT_NO_NETWORKINTERFACE -/*! - Returns the network interface that is used by this session. - - This function only returns a valid QNetworkInterface when this session is \l Connected. - - The returned interface may change as a result of a roaming process. - - \sa state() -*/ -QNetworkInterface QNetworkSession::interface() const -{ - return d ? d->currentInterface() : QNetworkInterface(); -} -#endif - -/*! - Returns \c true if this session is open. If the number of all open sessions is greater than - zero the underlying network interface will remain connected/up. - - The session can be controlled via open() and close(). -*/ -bool QNetworkSession::isOpen() const -{ - return d ? d->isOpen : false; -} - -/*! - Returns the state of the session. - - If the session is based on a single access point configuration the state of the - session is the same as the state of the associated network interface. Therefore - a network session object can be used to monitor network interfaces. - - A \l QNetworkConfiguration::ServiceNetwork based session summarizes the state of all its children - and therefore returns the \l Connected state if at least one of the service network's - \l {QNetworkConfiguration::children()}{children()} configurations is active. - - Note that it is not required to hold an open session in order to obtain the network interface state. - A connected but closed session may be used to monitor network interfaces whereas an open and connected - session object may prevent the network interface from being shut down. - - \sa error(), stateChanged() -*/ -QNetworkSession::State QNetworkSession::state() const -{ - return d ? d->state : QNetworkSession::Invalid; -} - -/*! - Returns the type of error that last occurred. - - \sa state(), errorString() -*/ -QNetworkSession::SessionError QNetworkSession::error() const -{ - return d ? d->error() : InvalidConfigurationError; -} - -/*! - Returns a human-readable description of the last device error that - occurred. - - \sa error() -*/ -QString QNetworkSession::errorString() const -{ - return d ? d->errorString() : tr("Invalid configuration."); -} - -/*! - Returns the value for property \a key. - - A network session can have properties attached which may describe the session in more details. - This function can be used to gain access to those properties. - - The following property keys are guaranteed to be specified on all platforms: - - \table 80% - \header - \li Key \li Description - \row - \li ActiveConfiguration - \li If the session \l isOpen() this property returns the identifier of the - QNetworkConfiguration that is used by this session; otherwise an empty string. - - The main purpose of this key is to determine which Internet access point is used - if the session is based on a \l{QNetworkConfiguration::ServiceNetwork}{ServiceNetwork}. - The following code snippet highlights the difference: - \snippet code/src_network_bearer_qnetworksession.cpp 1 - \row - \li UserChoiceConfiguration - \li If the session \l isOpen() and is bound to a QNetworkConfiguration of type - UserChoice, this property returns the identifier of the QNetworkConfiguration that the - configuration resolved to when \l open() was called; otherwise an empty string. - - The purpose of this key is to determine the real QNetworkConfiguration that the - session is using. This key is different from \e ActiveConfiguration in that - this key may return an identifier for either a - \l {QNetworkConfiguration::ServiceNetwork}{service network} or a - \l {QNetworkConfiguration::InternetAccessPoint}{Internet access points} configurations, - whereas \e ActiveConfiguration always returns identifiers to - \l {QNetworkConfiguration::InternetAccessPoint}{Internet access points} configurations. - \row - \li ConnectInBackground - \li Setting this property to \e true before calling \l open() implies that the connection attempt - is made but if no connection can be established, the user is not connsulted and asked to select - a suitable connection. This property is not set by default and support for it depends on the platform. - - \row - \li AutoCloseSessionTimeout - \li If the session requires polling to keep its state up to date, this property holds - the timeout in milliseconds before the session will automatically close. If the - value of this property is -1 the session will not automatically close. This property - is set to -1 by default. - - The purpose of this property is to minimize resource use on platforms that use - polling to update the state of the session. Applications can set the value of this - property to the desired timeout before the session is closed. In response to the - closed() signal the network session should be deleted to ensure that all polling is - stopped. The session can then be recreated once it is required again. This property - has no effect for sessions that do not require polling. - \endtable -*/ -QVariant QNetworkSession::sessionProperty(const QString &key) const -{ - if (!d || !d->publicConfig.isValid()) - return QVariant(); - - if (key == QLatin1String("ActiveConfiguration")) - return d->isOpen ? d->activeConfig.identifier() : QString(); - - if (key == QLatin1String("UserChoiceConfiguration")) { - if (!d->isOpen || d->publicConfig.type() != QNetworkConfiguration::UserChoice) - return QString(); - - if (d->serviceConfig.isValid()) - return d->serviceConfig.identifier(); - else - return d->activeConfig.identifier(); - } - - return d->sessionProperty(key); -} - -/*! - Sets the property \a value on the session. The property is identified using - \a key. Removing an already set property can be achieved by passing an - invalid QVariant. - - Note that the \e UserChoiceConfiguration and \e ActiveConfiguration - properties are read only and cannot be changed using this method. -*/ -void QNetworkSession::setSessionProperty(const QString &key, const QVariant &value) -{ - if (!d) - return; - - if (key == QLatin1String("ActiveConfiguration") || - key == QLatin1String("UserChoiceConfiguration")) { - return; - } - - d->setSessionProperty(key, value); -} - -/*! - Instructs the session to roam to the new access point. The old access point remains active - until the application calls accept(). - - The newConfigurationActivated() signal is emitted once roaming has been completed. - - \sa accept() -*/ -void QNetworkSession::migrate() -{ - if (d) - d->migrate(); -} - -/*! - This function indicates that the application does not wish to roam the session. - - \sa migrate() -*/ -void QNetworkSession::ignore() -{ - if (d) - d->ignore(); -} - -/*! - Instructs the session to permanently accept the new access point. Once this function - has been called the session may not return to the old access point. - - The old access point may be closed in the process if there are no other network sessions for it. - Therefore any open socket that still uses the old access point - may become unusable and should be closed before completing the migration. -*/ -void QNetworkSession::accept() -{ - if (d) - d->accept(); -} - -/*! - The new access point is not suitable for the application. By calling this function the - session returns to the previous access point/configuration. This action may invalidate - any socket that has been created via the not desired access point. - - \sa accept() -*/ -void QNetworkSession::reject() -{ - if (d) - d->reject(); -} - - -/*! - Returns the amount of data sent in bytes; otherwise 0. - - This field value includes the usage across all open network - sessions which use the same network interface. - - If the session is based on a service network configuration the number of - sent bytes across all active member configurations are returned. - - This function may not always be supported on all platforms and returns 0. - The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. - - \note On some platforms this function may run the main event loop. -*/ -quint64 QNetworkSession::bytesWritten() const -{ - return d ? d->bytesWritten() : Q_UINT64_C(0); -} - -/*! - Returns the amount of data received in bytes; otherwise 0. - - This field value includes the usage across all open network - sessions which use the same network interface. - - If the session is based on a service network configuration the number of - sent bytes across all active member configurations are returned. - - This function may not always be supported on all platforms and returns 0. - The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. - - \note On some platforms this function may run the main event loop. -*/ -quint64 QNetworkSession::bytesReceived() const -{ - return d ? d->bytesReceived() : Q_UINT64_C(0); -} - -/*! - Returns the number of seconds that the session has been active. -*/ -quint64 QNetworkSession::activeTime() const -{ - return d ? d->activeTime() : Q_UINT64_C(0); -} - -/*! - Returns the network usage policies currently in force by the system. -*/ -QNetworkSession::UsagePolicies QNetworkSession::usagePolicies() const -{ - return d ? d->usagePolicies() : QNetworkSession::NoPolicy; -} - -/*! - \internal - Change usage policies for unit testing. - In normal use, the policies are published by the bearer plugin -*/ -void QNetworkSessionPrivate::setUsagePolicies(QNetworkSession &session, QNetworkSession::UsagePolicies policies) -{ - if (!session.d) - return; - session.d->setUsagePolicies(policies); -} - -/*! - \internal - - This function is required to detect whether the client wants to control - the roaming process. If he connects to preferredConfigurationChanged() signal - he intends to influence it. Otherwise QNetworkSession always roams - without registering this session as a stakeholder in the roaming process. - - For more details check the Forced vs ALR roaming section in the QNetworkSession - class description. -*/ -void QNetworkSession::connectNotify(const QMetaMethod &signal) -{ - QObject::connectNotify(signal); - - if (!d) - return; - - //check for preferredConfigurationChanged() signal connect notification - //This is not required on all platforms - static const QMetaMethod preferredConfigurationChangedSignal = - QMetaMethod::fromSignal(&QNetworkSession::preferredConfigurationChanged); - if (signal == preferredConfigurationChangedSignal) - d->setALREnabled(true); -} - -/*! - \internal - - This function is called when the client disconnects from the - preferredConfigurationChanged() signal. - - \sa connectNotify() -*/ -void QNetworkSession::disconnectNotify(const QMetaMethod &signal) -{ - QObject::disconnectNotify(signal); - - if (!d) - return; - - //check for preferredConfigurationChanged() signal disconnect notification - //This is not required on all platforms - static const QMetaMethod preferredConfigurationChangedSignal = - QMetaMethod::fromSignal(&QNetworkSession::preferredConfigurationChanged); - if (signal == preferredConfigurationChangedSignal) - d->setALREnabled(false); -} - -QT_END_NAMESPACE - -#include "moc_qnetworksession.cpp" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h deleted file mode 100644 index 65d90b0a82..0000000000 --- a/src/network/bearer/qnetworksession.h +++ /dev/null @@ -1,159 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKSESSION_H -#define QNETWORKSESSION_H - -#if 0 -#pragma qt_class(QNetworkSession) -#endif - -#include -#include -#include -#include -#include -#include - -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - -#ifndef QT_NO_BEARERMANAGEMENT - -#if defined(Q_OS_WIN) && defined(interface) -#undef interface -#endif - -#include -QT_BEGIN_NAMESPACE - -class QNetworkSessionPrivate; -class QT_DEPRECATED_BEARER_MANAGEMENT Q_NETWORK_EXPORT QNetworkSession : public QObject -{ - Q_OBJECT - -public: - enum State { - Invalid = 0, - NotAvailable, - Connecting, - Connected, - Closing, - Disconnected, - Roaming - }; - - enum SessionError { - UnknownSessionError = 0, - SessionAbortedError, - RoamingError, - OperationNotSupportedError, - InvalidConfigurationError - }; - - enum UsagePolicy { - NoPolicy = 0, - NoBackgroundTrafficPolicy = 1 - }; - - Q_DECLARE_FLAGS(UsagePolicies, UsagePolicy) - - explicit QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent = nullptr); - virtual ~QNetworkSession(); - - bool isOpen() const; - QNetworkConfiguration configuration() const; -#ifndef QT_NO_NETWORKINTERFACE - QNetworkInterface interface() const; -#endif - - State state() const; - SessionError error() const; - QString errorString() const; - QVariant sessionProperty(const QString &key) const; - void setSessionProperty(const QString &key, const QVariant &value); - - quint64 bytesWritten() const; - quint64 bytesReceived() const; - quint64 activeTime() const; - - QNetworkSession::UsagePolicies usagePolicies() const; - - bool waitForOpened(int msecs = 30000); - -public Q_SLOTS: - void open(); - void close(); - void stop(); - - //roaming related slots - void migrate(); - void ignore(); - void accept(); - void reject(); - -Q_SIGNALS: - void stateChanged(QNetworkSession::State); - void opened(); - void closed(); - void error(QNetworkSession::SessionError); - void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless); - void newConfigurationActivated(); - void usagePoliciesChanged(QNetworkSession::UsagePolicies usagePolicies); - -protected: - virtual void connectNotify(const QMetaMethod &signal) override; - virtual void disconnectNotify(const QMetaMethod &signal) override; - -private: - Q_DISABLE_COPY(QNetworkSession) - friend class QNetworkSessionPrivate; - QNetworkSessionPrivate *d; -}; - -QT_END_NAMESPACE -Q_DECLARE_METATYPE(QNetworkSession::State) -Q_DECLARE_METATYPE(QNetworkSession::SessionError) -Q_DECLARE_METATYPE(QNetworkSession::UsagePolicies) - -#endif // QT_NO_BEARERMANAGEMENT - -QT_WARNING_POP - -#endif // QNETWORKSESSION_H diff --git a/src/network/bearer/qnetworksession_impl.cpp b/src/network/bearer/qnetworksession_impl.cpp deleted file mode 100644 index 45a00b45fd..0000000000 --- a/src/network/bearer/qnetworksession_impl.cpp +++ /dev/null @@ -1,439 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -// see comment in ../platformdefs_win.h. -#define WIN32_LEAN_AND_MEAN 1 - -#include "qnetworksession_impl_p.h" -#include "qbearerengine_impl_p.h" - -#include -#include - -#include -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -static QBearerEngineImpl *getEngineFromId(const QString &id) -{ - QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); - if (priv) { - const auto engines = priv->engines(); - for (QBearerEngine *engine : engines) { - QBearerEngineImpl *engineImpl = qobject_cast(engine); - if (engineImpl && engineImpl->hasIdentifier(id)) - return engineImpl; - } - } - - return nullptr; -} - -class QNetworkSessionManagerPrivate : public QObject -{ - Q_OBJECT - -public: - QNetworkSessionManagerPrivate(QObject *parent = nullptr) : QObject(parent) {} - ~QNetworkSessionManagerPrivate() {} - - inline void forceSessionClose(const QNetworkConfiguration &config) - { emit forcedSessionClose(config); } - -Q_SIGNALS: - void forcedSessionClose(const QNetworkConfiguration &config); -}; - -Q_GLOBAL_STATIC(QNetworkSessionManagerPrivate, sessionManager); - -void QNetworkSessionPrivateImpl::syncStateWithInterface() -{ - connect(sessionManager(), SIGNAL(forcedSessionClose(QNetworkConfiguration)), - this, SLOT(forcedSessionClose(QNetworkConfiguration))); - - opened = false; - isOpen = false; - state = QNetworkSession::Invalid; - lastError = QNetworkSession::UnknownSessionError; - - qRegisterMetaType(); - - switch (publicConfig.type()) { - case QNetworkConfiguration::InternetAccessPoint: - activeConfig = publicConfig; - engine = getEngineFromId(activeConfig.identifier()); - if (engine) { - qRegisterMetaType(); - connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), - this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)), - Qt::QueuedConnection); - connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), - this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), - Qt::QueuedConnection); - } - break; - case QNetworkConfiguration::ServiceNetwork: - serviceConfig = publicConfig; - // Defer setting engine and signals until open(). - Q_FALLTHROUGH(); - case QNetworkConfiguration::UserChoice: - // Defer setting serviceConfig and activeConfig until open(). - Q_FALLTHROUGH(); - default: - engine = nullptr; - } - - networkConfigurationsChanged(); -} - -void QNetworkSessionPrivateImpl::open() -{ - if (serviceConfig.isValid()) { - lastError = QNetworkSession::OperationNotSupportedError; - emit QNetworkSessionPrivate::error(lastError); - } else if (!isOpen) { - if ((activeConfig.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { - lastError = QNetworkSession::InvalidConfigurationError; - state = QNetworkSession::Invalid; - emit stateChanged(state); - emit QNetworkSessionPrivate::error(lastError); - return; - } - opened = true; - - if ((activeConfig.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active && - (activeConfig.state() & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { - state = QNetworkSession::Connecting; - emit stateChanged(state); - - engine->connectToId(activeConfig.identifier()); - } - - isOpen = (activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active; - if (isOpen) - emit quitPendingWaitsForOpened(); - } -} - -void QNetworkSessionPrivateImpl::close() -{ - if (serviceConfig.isValid()) { - lastError = QNetworkSession::OperationNotSupportedError; - emit QNetworkSessionPrivate::error(lastError); - } else if (isOpen) { - opened = false; - isOpen = false; - emit closed(); - } -} - -void QNetworkSessionPrivateImpl::stop() -{ - if (serviceConfig.isValid()) { - lastError = QNetworkSession::OperationNotSupportedError; - emit QNetworkSessionPrivate::error(lastError); - } else { - if ((activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - state = QNetworkSession::Closing; - emit stateChanged(state); - - engine->disconnectFromId(activeConfig.identifier()); - - sessionManager()->forceSessionClose(activeConfig); - } - - opened = false; - isOpen = false; - emit closed(); - } -} - -void QNetworkSessionPrivateImpl::migrate() -{ -} - -void QNetworkSessionPrivateImpl::accept() -{ -} - -void QNetworkSessionPrivateImpl::ignore() -{ -} - -void QNetworkSessionPrivateImpl::reject() -{ -} - -#ifndef QT_NO_NETWORKINTERFACE -QNetworkInterface QNetworkSessionPrivateImpl::currentInterface() const -{ - if (!engine || state != QNetworkSession::Connected || !publicConfig.isValid()) - return QNetworkInterface(); - - QString iface = engine->getInterfaceFromId(activeConfig.identifier()); - if (iface.isEmpty()) - return QNetworkInterface(); - return QNetworkInterface::interfaceFromName(iface); -} -#endif - -QVariant QNetworkSessionPrivateImpl::sessionProperty(const QString &key) const -{ - if (key == QLatin1String("AutoCloseSessionTimeout")) { - if (engine && engine->requiresPolling() && - !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { - return sessionTimeout >= 0 ? sessionTimeout * 10000 : -1; - } - } - - return QVariant(); -} - -void QNetworkSessionPrivateImpl::setSessionProperty(const QString &key, const QVariant &value) -{ - if (key == QLatin1String("AutoCloseSessionTimeout")) { - if (engine && engine->requiresPolling() && - !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { - int timeout = value.toInt(); - if (timeout >= 0) { - connect(engine, SIGNAL(updateCompleted()), - this, SLOT(decrementTimeout()), Qt::UniqueConnection); - sessionTimeout = timeout / 10000; // convert to poll intervals - } else { - disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); - sessionTimeout = -1; - } - } - } -} - -QString QNetworkSessionPrivateImpl::errorString() const -{ - switch (lastError) { - case QNetworkSession::UnknownSessionError: - return tr("Unknown session error."); - case QNetworkSession::SessionAbortedError: - return tr("The session was aborted by the user or system."); - case QNetworkSession::OperationNotSupportedError: - return tr("The requested operation is not supported by the system."); - case QNetworkSession::InvalidConfigurationError: - return tr("The specified configuration cannot be used."); - case QNetworkSession::RoamingError: - return tr("Roaming was aborted or is not possible."); - default: - break; - } - - return QString(); -} - -QNetworkSession::SessionError QNetworkSessionPrivateImpl::error() const -{ - return lastError; -} - -quint64 QNetworkSessionPrivateImpl::bytesWritten() const -{ - if (engine && state == QNetworkSession::Connected) - return engine->bytesWritten(activeConfig.identifier()); - return Q_UINT64_C(0); -} - -quint64 QNetworkSessionPrivateImpl::bytesReceived() const -{ - if (engine && state == QNetworkSession::Connected) - return engine->bytesReceived(activeConfig.identifier()); - return Q_UINT64_C(0); -} - -quint64 QNetworkSessionPrivateImpl::activeTime() const -{ - if (state == QNetworkSession::Connected && startTime != Q_UINT64_C(0)) - return QDateTime::currentSecsSinceEpoch() - startTime; - return Q_UINT64_C(0); -} - -QNetworkSession::UsagePolicies QNetworkSessionPrivateImpl::usagePolicies() const -{ - return currentPolicies; -} - -void QNetworkSessionPrivateImpl::setUsagePolicies(QNetworkSession::UsagePolicies newPolicies) -{ - if (newPolicies != currentPolicies) { - currentPolicies = newPolicies; - emit usagePoliciesChanged(currentPolicies); - } -} - -void QNetworkSessionPrivateImpl::updateStateFromServiceNetwork() -{ - QNetworkSession::State oldState = state; - - const auto configs = serviceConfig.children(); - for (const QNetworkConfiguration &config : configs) { - if ((config.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) - continue; - - if (activeConfig != config) { - if (engine) { - disconnect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), - this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError))); - } - - activeConfig = config; - engine = getEngineFromId(activeConfig.identifier()); - - if (engine) { - connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), - this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), - Qt::QueuedConnection); - } - emit newConfigurationActivated(); - } - - state = QNetworkSession::Connected; - if (state != oldState) - emit stateChanged(state); - - return; - } - - if (serviceConfig.children().isEmpty()) - state = QNetworkSession::NotAvailable; - else - state = QNetworkSession::Disconnected; - - if (state != oldState) - emit stateChanged(state); -} - -void QNetworkSessionPrivateImpl::updateStateFromActiveConfig() -{ - if (!engine) - return; - - QNetworkSession::State oldState = state; - state = engine->sessionStateForId(activeConfig.identifier()); - - bool oldActive = isOpen; - isOpen = (state == QNetworkSession::Connected) ? opened : false; - - if (!oldActive && isOpen) - emit quitPendingWaitsForOpened(); - if (oldActive && !isOpen) - emit closed(); - - if (oldState != state) - emit stateChanged(state); -} - -void QNetworkSessionPrivateImpl::networkConfigurationsChanged() -{ - if (serviceConfig.isValid()) - updateStateFromServiceNetwork(); - else - updateStateFromActiveConfig(); - - if (engine) - startTime = engine->startTime(activeConfig.identifier()); -} - -void QNetworkSessionPrivateImpl::configurationChanged(QNetworkConfigurationPrivatePointer config) -{ - if (serviceConfig.isValid() && - (config->id == serviceConfig.identifier() || config->id == activeConfig.identifier())) { - updateStateFromServiceNetwork(); - } else if (config->id == activeConfig.identifier()) { - updateStateFromActiveConfig(); - } -} - -void QNetworkSessionPrivateImpl::forcedSessionClose(const QNetworkConfiguration &config) -{ - if (activeConfig == config) { - opened = false; - isOpen = false; - - emit closed(); - - lastError = QNetworkSession::SessionAbortedError; - emit QNetworkSessionPrivate::error(lastError); - } -} - -void QNetworkSessionPrivateImpl::connectionError(const QString &id, QBearerEngineImpl::ConnectionError error) -{ - if (activeConfig.identifier() == id) { - networkConfigurationsChanged(); - switch (error) { - case QBearerEngineImpl::OperationNotSupported: - lastError = QNetworkSession::OperationNotSupportedError; - opened = false; - break; - case QBearerEngineImpl::InterfaceLookupError: - case QBearerEngineImpl::ConnectError: - case QBearerEngineImpl::DisconnectionError: - default: - lastError = QNetworkSession::UnknownSessionError; - } - - emit QNetworkSessionPrivate::error(lastError); - } -} - -void QNetworkSessionPrivateImpl::decrementTimeout() -{ - if (--sessionTimeout <= 0) { - disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); - sessionTimeout = -1; - close(); - } -} - -QT_END_NAMESPACE - -#include "qnetworksession_impl.moc" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworksession_impl_p.h b/src/network/bearer/qnetworksession_impl_p.h deleted file mode 100644 index b174760152..0000000000 --- a/src/network/bearer/qnetworksession_impl_p.h +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKSESSION_IMPL_H -#define QNETWORKSESSION_IMPL_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qbearerengine_impl_p.h" - -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QBearerEngineImpl; - -class Q_NETWORK_EXPORT QNetworkSessionPrivateImpl : public QNetworkSessionPrivate -{ - Q_OBJECT - -public: - QNetworkSessionPrivateImpl() - : engine(nullptr), startTime(0), lastError(QNetworkSession::UnknownSessionError), sessionTimeout(-1), currentPolicies(QNetworkSession::NoPolicy), opened(false) - {} - ~QNetworkSessionPrivateImpl() - {} - - //called by QNetworkSession constructor and ensures - //that the state is immediately updated (w/o actually opening - //a session). Also this function should take care of - //notification hooks to discover future state changes. - void syncStateWithInterface() override; - -#ifndef QT_NO_NETWORKINTERFACE - QNetworkInterface currentInterface() const override; -#endif - QVariant sessionProperty(const QString& key) const override; - void setSessionProperty(const QString& key, const QVariant& value) override; - - void open() override; - void close() override; - void stop() override; - void migrate() override; - void accept() override; - void ignore() override; - void reject() override; - - QString errorString() const override; //must return translated string - QNetworkSession::SessionError error() const override; - - quint64 bytesWritten() const override; - quint64 bytesReceived() const override; - quint64 activeTime() const override; - - QNetworkSession::UsagePolicies usagePolicies() const override; - void setUsagePolicies(QNetworkSession::UsagePolicies) override; - -private Q_SLOTS: - void networkConfigurationsChanged(); - void configurationChanged(QNetworkConfigurationPrivatePointer config); - void forcedSessionClose(const QNetworkConfiguration &config); - void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); - void decrementTimeout(); - -private: - void updateStateFromServiceNetwork(); - void updateStateFromActiveConfig(); - -private: - QBearerEngineImpl *engine; - - quint64 startTime; - - QNetworkSession::SessionError lastError; - - int sessionTimeout; - QNetworkSession::UsagePolicies currentPolicies; - - bool opened; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QNETWORKSESSION_IMPL_H diff --git a/src/network/bearer/qnetworksession_p.h b/src/network/bearer/qnetworksession_p.h deleted file mode 100644 index 7c1ff63b68..0000000000 --- a/src/network/bearer/qnetworksession_p.h +++ /dev/null @@ -1,157 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKSESSIONPRIVATE_H -#define QNETWORKSESSIONPRIVATE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qnetworksession.h" -#include "qnetworkconfiguration_p.h" -#include "QtCore/qsharedpointer.h" - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class Q_NETWORK_EXPORT QNetworkSessionPrivate : public QObject -{ - Q_OBJECT - - friend class QNetworkSession; - -public: - QNetworkSessionPrivate() : QObject(), - state(QNetworkSession::Invalid), isOpen(false) - {} - virtual ~QNetworkSessionPrivate() - {} - - //called by QNetworkSession constructor and ensures - //that the state is immediately updated (w/o actually opening - //a session). Also this function should take care of - //notification hooks to discover future state changes. - virtual void syncStateWithInterface() = 0; - -#ifndef QT_NO_NETWORKINTERFACE - virtual QNetworkInterface currentInterface() const = 0; -#endif - virtual QVariant sessionProperty(const QString &key) const = 0; - virtual void setSessionProperty(const QString &key, const QVariant &value) = 0; - - virtual void open() = 0; - virtual void close() = 0; - virtual void stop() = 0; - - virtual void setALREnabled(bool /*enabled*/) {} - virtual void migrate() = 0; - virtual void accept() = 0; - virtual void ignore() = 0; - virtual void reject() = 0; - - virtual QString errorString() const = 0; //must return translated string - virtual QNetworkSession::SessionError error() const = 0; - - virtual quint64 bytesWritten() const = 0; - virtual quint64 bytesReceived() const = 0; - virtual quint64 activeTime() const = 0; - - virtual QNetworkSession::UsagePolicies usagePolicies() const = 0; - virtual void setUsagePolicies(QNetworkSession::UsagePolicies) = 0; - - static void setUsagePolicies(QNetworkSession&, QNetworkSession::UsagePolicies); //for unit testing -protected: - inline QNetworkConfigurationPrivatePointer privateConfiguration(const QNetworkConfiguration &config) const - { - return config.d; - } - - inline void setPrivateConfiguration(QNetworkConfiguration &config, - const QNetworkConfigurationPrivatePointer &ptr) const - { - config.d = ptr; - } - -Q_SIGNALS: - //releases any pending waitForOpened() calls - void quitPendingWaitsForOpened(); - - void error(QNetworkSession::SessionError error); - void stateChanged(QNetworkSession::State state); - void closed(); - void newConfigurationActivated(); - void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless); - void usagePoliciesChanged(QNetworkSession::UsagePolicies); - -protected: - QNetworkSession *q; - - // The config set on QNetworkSession. - QNetworkConfiguration publicConfig; - - // If publicConfig is a ServiceNetwork this is a copy of publicConfig. - // If publicConfig is an UserChoice that is resolved to a ServiceNetwork this is the actual - // ServiceNetwork configuration. - QNetworkConfiguration serviceConfig; - - // This is the actual active configuration currently in use by the session. - // Either a copy of publicConfig or one of serviceConfig.children(). - QNetworkConfiguration activeConfig; - - QNetworkSession::State state; - bool isOpen; - - QRecursiveMutex mutex; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QNETWORKSESSIONPRIVATE_H diff --git a/src/network/bearer/qsharednetworksession.cpp b/src/network/bearer/qsharednetworksession.cpp deleted file mode 100644 index b3e9892f4b..0000000000 --- a/src/network/bearer/qsharednetworksession.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsharednetworksession_p.h" -#include "qbearerengine_p.h" -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -QThreadStorage tls; - -inline QSharedNetworkSessionManager* sharedNetworkSessionManager() -{ - QSharedNetworkSessionManager* rv = tls.localData(); - if (!rv) { - rv = new QSharedNetworkSessionManager; - tls.setLocalData(rv); - } - return rv; -} - -struct DeleteLater { - void operator()(QObject* obj) const - { - obj->deleteLater(); - } -}; - -template -static void maybe_prune_expired(Container &c) -{ - if (c.size() > 16) { - for (auto it = c.cbegin(), end = c.cend(); it != end; /*erasing*/) { - if (!it->second.lock()) - it = c.erase(it); - else - ++it; - } - } -} - -QSharedPointer QSharedNetworkSessionManager::getSession(const QNetworkConfiguration &config) -{ - QSharedNetworkSessionManager *m = sharedNetworkSessionManager(); - maybe_prune_expired(m->sessions); - auto &entry = m->sessions[config]; - //if already have a session, return it - if (auto p = entry.toStrongRef()) - return p; - //otherwise make one - QSharedPointer session(new QNetworkSession(config), DeleteLater{}); - entry = session; - return session; -} - -void QSharedNetworkSessionManager::setSession(const QNetworkConfiguration &config, QSharedPointer session) -{ - QSharedNetworkSessionManager *m = sharedNetworkSessionManager(); - m->sessions[config] = std::move(session); -} - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qsharednetworksession_p.h b/src/network/bearer/qsharednetworksession_p.h deleted file mode 100644 index f22f9eeacb..0000000000 --- a/src/network/bearer/qsharednetworksession_p.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSHAREDNETWORKSESSIONPRIVATE_H -#define QSHAREDNETWORKSESSIONPRIVATE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qnetworksession.h" -#include "qnetworkconfiguration.h" -#include -#include -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -namespace QtPrivate { -struct NetworkConfigurationHash { - using result_type = size_t; - using argument_type = QNetworkConfiguration; - size_t operator()(const QNetworkConfiguration &config) const noexcept - { - return std::hash{}(size_t(config.type()) | (size_t(config.bearerType()) << 8) | (size_t(config.purpose()) << 16)); - } -}; -} - -class QSharedNetworkSessionManager -{ -public: - static QSharedPointer getSession(const QNetworkConfiguration &config); - static void setSession(const QNetworkConfiguration &config, QSharedPointer session); -private: - std::unordered_map, QtPrivate::NetworkConfigurationHash> sessions; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif //QSHAREDNETWORKSESSIONPRIVATE_H - diff --git a/src/network/configure.cmake b/src/network/configure.cmake index d9b47045ae..cea673e943 100644 --- a/src/network/configure.cmake +++ b/src/network/configure.cmake @@ -366,14 +366,6 @@ qt_feature("networkdiskcache" PUBLIC CONDITION QT_FEATURE_temporaryfile ) qt_feature_definition("networkdiskcache" "QT_NO_NETWORKDISKCACHE" NEGATE VALUE "1") -qt_feature("bearermanagement" PUBLIC - SECTION "Networking" - LABEL "Bearer management (deprecated)" - PURPOSE "Provides bearer management for the network stack." - CONDITION QT_FEATURE_thread AND QT_FEATURE_library AND QT_FEATURE_networkinterface AND QT_FEATURE_properties -) -qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE VALUE "1") -qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE) qt_feature("localserver" PUBLIC SECTION "Networking" LABEL "QLocalServer" diff --git a/src/network/configure.json b/src/network/configure.json index 84ad6cc4e8..07f0e349f6 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -387,17 +387,6 @@ "condition": "features.temporaryfile", "output": [ "publicFeature", "feature" ] }, - "bearermanagement": { - "label": "Bearer management (deprecated)", - "purpose": "Provides bearer management for the network stack.", - "section": "Networking", - "condition": "features.thread && features.library && features.networkinterface && features.properties", - "output": [ - "publicFeature", - "feature", - { "type": "define", "negative": true, "name": "QT_NO_BEARERMANAGEMENT" } - ] - }, "localserver": { "label": "QLocalServer", "purpose": "Provides a local socket based server.", diff --git a/src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp b/src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp index aed74e308e..d3a4cfc116 100644 --- a/src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp +++ b/src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp @@ -70,15 +70,6 @@ connect(reply, &QNetworkReply::sslErrors, this, &MyClass::slotSslErrors); //! [1] -//! [2] -QNetworkConfigurationManager manager; -networkAccessManager->setConfiguration(manager.defaultConfiguration()); -//! [2] - -//! [3] -networkAccessManager->setConfiguration(QNetworkConfiguration()); -//! [3] - //! [4] networkAccessManager->setNetworkAccessible(QNetworkAccessManager::NotAccessible); //! [4] diff --git a/src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp b/src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp deleted file mode 100644 index 42992f08d9..0000000000 --- a/src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [0] -QNetworkConfigurationManager mgr; -QList activeConfigs = mgr.allConfigurations(QNetworkConfiguration::Active); -if (activeConfigs.count() > 0) - Q_ASSERT(mgr.isOnline()); -else - Q_ASSERT(!mgr.isOnline()); -//! [0] diff --git a/src/network/doc/snippets/code/src_network_bearer_qnetworksession.cpp b/src/network/doc/snippets/code/src_network_bearer_qnetworksession.cpp deleted file mode 100644 index b88b6d1768..0000000000 --- a/src/network/doc/snippets/code/src_network_bearer_qnetworksession.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [0] - session->open(); - if (session->waitForOpened(1000)) - qDebug("Open!"); -//! [0] - -//! [1] - QNetworkConfigurationManager mgr; - QNetworkConfiguration ap = mgr.defaultConfiguration(); - QNetworkSession *session = new QNetworkSession(ap); - ... //code activates session - - QString ident = session->sessionProperty("ActiveConfiguration").toString(); - if ( ap.type() == QNetworkConfiguration::ServiceNetwork ) { - Q_ASSERT( ap.identifier() != ident ); - Q_ASSERT( ap.children().contains( mgr.configurationFromIdentifier(ident) ) ); - } else if ( ap.type() == QNetworkConfiguration::InternetAccessPoint ) { - Q_ASSERT( ap.identifier() == ident ); - } - \endcode -//! [1] diff --git a/src/network/doc/src/bearermanagement.qdoc b/src/network/doc/src/bearermanagement.qdoc deleted file mode 100644 index 8aec894269..0000000000 --- a/src/network/doc/src/bearermanagement.qdoc +++ /dev/null @@ -1,242 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\page bearer-management.html - -\title Bearer Management -\brief An API to control the system's connectivity state. - -\warning Bearer management is deprecated and will be removed in Qt 6.0. - -Bearer Management controls the connectivity state of the system so that -the user can start or stop interfaces or roam transparently between -access points. - -\tableofcontents - - -\section1 Overview - -The Bearer Management API controls the system's connectivity state. This -incorporates simple information such as whether the device is online and -how many interfaces there are as well as enables the application developer -to start, stop network interfaces and influences other connection specific -details. Depending on the platform's capabilities it may even provide -session management so that a network interface remains up for as long as -clients have a registered interest in them while at the same time -optimizes the interface's uptime. - -This API does not provide support for management of network configurations -themselves. It is up to the platform to provide infrastructure which -enables to user to create, edit or delete network configurations. - -\section2 The API in Detail - -Computer systems manage their network interfaces via a set of configurations. -Each configuration describes a set of parameters which instruct the system -how a particular network interface is started. One of the most simplistic -examples might be an Ethernet configuration that links a network card to a -DHCP server. A more complex example might be a Wireless LAN configuration -which may comprise of hardware details such as the WLAN card address, -WLAN access point details (e.g ESSID, encryption details) and user specific -information (for example username and password). Once the network interface -was configured and started according to the configuration blue print, -multiple applications are free to use this link layer connection/session -for their own socket operations. Note that the QNetworkConfiguration object -only provides limited information about the configuration details themselves. -It's main purpose is to act as a configuration identifier through which link -layer connections can be created, destroyed and monitored. - -QNetworkSession provides two types of use cases. It enables the monitoring of -physical network interfaces and management of network sessions. Network sessions -are a common feature on mobile devices where multiple applications -can request network sessions as they see fit. The system consolidates and tracks -active network sessions for the same network interface by maintaining the link -layer connections until the last session has been closed. The subsequent table -lists the major QNetworkSession functions and how they fit into the session and -hardware management categories: - -\table 60% -\header \li Interface management \li Session management -\row \li QNetworkSession::stop() \li QNetworkSession::open() -\row \li QNetworkSession::interface() \li QNetworkSession::close() -\row \li QNetworkSession::state() \li QNetworkSession::isOpen() -\row \li QNetworkSession::bytesWritten() \li QNetworkSession::migrate() -\row \li QNetworkSession::bytesReceived() \li QNetworkSession::ignore() -\row \li QNetworkSession::activeTime() \li QNetworkSession::accept() -\row \li QNetworkSession::stateChanged() \li QNetworkSession::reject() -\row \li \li QNetworkSession::opened() -\row \li \li QNetworkSession::closed() -\endtable - -The state of the session represents the state of the underlying access point -whereas the session's openness implies the networking/connectivity state available -to the current process. - -Possible use cases for interface management are network management related -applications which intend to monitor the connectivity state but do not engage -in network communication themselves. Any application wanting to open a socket -to a remote address will typically use session management related functionality. - -\section3 Service networks - -Some mobile platforms use the concept of grouped access points (also -called SNAP or Service Network Access Point). In principle multiple -configurations are grouped together and possibly even prioritized when -compared to each other. This is useful for use cases where all -configurations serve a similar purpose or context. A common context could -be that they provide access to the public Internet or possibly only to the -office Intranet. By providing a pool of configurations the system can make -a decision based on given priorities which usually map to factors such as -speed, availability and cost. Furthermore the system can automatically -roam from one access point to the next one while ensuring minimal impact on -the user experience. - -The \l{QNetworkConfiguration::Type} flag specifies to what category a -configuration belongs. The \l{QNetworkConfiguration::InternetAccessPoint} -type is the most common example. It represents a configuration that can be -used to create a session. The above mentioned grouping behavior is provided -by \l {QNetworkConfiguration::ServiceNetwork} configurations. Service -networks are place holders until such time when the user attempts to -\l {QNetworkSession::open()}{open()} a new session. At that point in time -the system determines which of the configurations \l{QNetworkConfiguration::children()} -is best to use. The selection algorithm is provided by the platform and is usually managed -by network settings applications. A service network can only have one level of indirection -which implies children can only be of type \l {QNetworkConfiguration::InternetAccessPoint}. - -Most systems allow the user to define the systems default configuration. -Usually the default behavior is either a service network, a particular -Internet access point or the user instructs the platform to ask the user -once an application requests the network. User interaction is generally -implemented by some sort of system dialog which shows up at the appropriate -point in time. The application does not have to handle the user input. This -API provides the \l QNetworkConfigurationManager::defaultConfiguration() -call which serves a similar purpose. The subsequent code snippet provides -a quick way how an application can quickly create a new network session -without (or only minimal) user interaction: - -\code - // Set Internet Access Point - QNetworkConfigurationManager manager; - const bool canStartIAP = (manager.capabilities() - & QNetworkConfigurationManager::CanStartAndStopInterfaces); - // Is there default access point, use it - QNetworkConfiguration cfg = manager.defaultConfiguration(); - if (!cfg.isValid() || (!canStartIAP && cfg.state() != QNetworkConfiguration::Active)) { - QMessageBox::information(this, tr("Network"), tr( - "No Access Point found.")); - return; - } - - session = new QNetworkSession(cfg, this); - session->open(); - session->waitForOpened(-1); -\endcode - -To accommodate the "Ask user" use case the default configuration can be of -type QNetworkConfiguration::UserChoice. A user choice configuration is -resolved as part of the \l {QNetworkSession::open()} call. Note that a -\l{QNetworkConfiguration::UserChoice}{UserChoice} configuration is only -ever returned via \l {QNetworkConfigurationManager::defaultConfiguration()} -and not \l QNetworkConfigurationManager::allConfigurations(). - -On systems which do not maintain a list of -\l {QNetworkConfigurationManager::defaultConfiguration()}{defaultConfiguration()} -an invalid configuration is returned. A possible workaround could be to -implement a custom dialog which is populated based on what -\l QNetworkConfigurationManager::allConfigurations() returns. - -\section3 Managing network sessions - -A QNetworkSession object separates a \l {QNetworkSession::state()}{state()} -and an \l{QNetworkSession::isOpen()}{isOpen()} condition. - -The state() attribute enables developers to detect whether the system -currently maintains a global network session for the given -QNetworkConfiguration. If \l {QNetworkSession::isOpen()}{isOpen()} -returns \c true the QNetworkSession instance at hand was at least one of the -entities requesting the global network session. This distinction is -required to support the notion of session registrations. For as long as -there are one or more open QNetworkSession instances the underlying -network interface is not shut down. Therefore the session -\l{QNetworkSession::state()}{state()} can be used to monitor the state of -network interfaces. - -An open session is created by calling \l {QNetworkSession::open()} and -closed via \l{QNetworkSession::close()}, respectively. If the session -is \l{QNetworkSession::Disconnected}{disconnected} at the time of the -\l{QNetworkSession::open()}{open()} call the underlying interface is started; -otherwise only the reference counter against the global session is -incremented. The opposite behavior can be observed when using -\l{QNetworkSession::close()}{close()}. - -In some use cases it may be necessary to turn the interface off despite of -open sessions. This can be achieved by calling -\l{QNetworkSession::stop()}{stop()}. An example use case could be a -network manager type of application allowing the user to control the -overall state of the devices connectivity. - -Global (inter-process) session support is platform dependent and can be -detected via \l {QNetworkConfigurationManager::SystemSessionSupport}. -If the system does not support global session calling -\l{QNetworkSession::close()}{close()} never stops the interface. - -\section3 Roaming - -Roaming is the process of reconnecting a device from one network to another -while minimizing the impact on the application. The system notifies the application -about link layer changes so that the required preparation can be taken. -The most common reaction would be to reinitialize sockets and to renegotiate -stateful connections with other parties. In the most extreme cases applications -may even prevent the roaming altogether. - -Roaming is initiated when the system determines that a more appropriate access point -becomes available to the user. In general such a decision is based on cost, network speed -or network type (access to certain private networks may only be provided via certain access points). -Almost all devices providing roaming support have some form of global configuration application -enabling the user to define such groups of access points (service networks) and priorities. - -This API supports two types of roaming. Application level roaming (ALR) -provides the most control over the process. Applications will be notified about upcoming -link layer changes and get the opportunity to test the new access point. Eventually they can -reject or accept the link layer change. The second form of roaming is referred to as Forced Roaming. -The system simply changes the link layer without consulting the application. It is up to -the application to detect that some of its internal socket may have become invalid. As a consequence -it has to reinitialize those sockets and reestablish the previous user session without -any interruption. Forced roaming has the advantage that applications don't have to -manage the entire roaming process by themselves. - -QNetworkSession is the central class for managing roaming related issues. - -\section3 Platform capabilities - -Some API features are not available on all platforms. The -\l QNetworkConfigurationManager::Capability should be used to detect -platform features at runtime. - -*/ diff --git a/src/network/doc/src/network-programming.qdoc b/src/network/doc/src/network-programming.qdoc index 654227f971..96bbd8d38b 100644 --- a/src/network/doc/src/network-programming.qdoc +++ b/src/network/doc/src/network-programming.qdoc @@ -43,9 +43,6 @@ QTcpServer and QUdpSocket that represent low level network concepts, and high level classes such as QNetworkRequest, QNetworkReply and QNetworkAccessManager to perform network operations using common protocols. - It also offers classes such as QNetworkConfiguration, - QNetworkConfigurationManager and QNetworkSession that implement bearer - management. \tableofcontents diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 93be053ef3..115f3445b9 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -51,7 +51,6 @@ #include #include #include -#include #include diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index d7875a0673..cc34d575b2 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -70,7 +70,6 @@ #include #include -#include #include #include diff --git a/src/network/kernel/qnetworkproxy.h b/src/network/kernel/qnetworkproxy.h index c3523f8847..1f0409e8ab 100644 --- a/src/network/kernel/qnetworkproxy.h +++ b/src/network/kernel/qnetworkproxy.h @@ -51,7 +51,6 @@ QT_BEGIN_NAMESPACE class QUrl; -class QNetworkConfiguration; class QNetworkProxyQueryPrivate; class Q_NETWORK_EXPORT QNetworkProxyQuery diff --git a/src/network/network.pro b/src/network/network.pro index d13b3b9248..7bd54fd12e 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -15,24 +15,12 @@ msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x64000000 QMAKE_DOCS = $$PWD/doc/qtnetwork.qdocconf include(access/access.pri) -qtConfig(bearermanagement): include(bearer/bearer.pri) include(kernel/kernel.pri) include(socket/socket.pri) include(ssl/ssl.pri) QMAKE_LIBS += $$QMAKE_LIBS_NETWORK -qtConfig(bearermanagement) { - ANDROID_BUNDLED_JAR_DEPENDENCIES = \ - jar/QtAndroidBearer.jar - ANDROID_LIB_DEPENDENCIES = \ - plugins/bearer/libplugins_bearer_qandroidbearer.so - MODULE_PLUGIN_TYPES = \ - bearer - ANDROID_PERMISSIONS += \ - android.permission.ACCESS_NETWORK_STATE -} - MODULE_WINRT_CAPABILITIES = \ internetClient \ internetClientServer \ diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index 6718d64ca0..8d6516b0b5 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -3,9 +3,6 @@ if(TARGET Qt::Sql) add_subdirectory(sqldrivers) endif() -if(QT_FEATURE_bearermanagement AND TARGET Qt::Network) - add_subdirectory(bearer) -endif() if(TARGET Qt::Gui) add_subdirectory(platforms) add_subdirectory(platforminputcontexts) diff --git a/src/plugins/bearer/.prev_CMakeLists.txt b/src/plugins/bearer/.prev_CMakeLists.txt deleted file mode 100644 index a7a36f60c6..0000000000 --- a/src/plugins/bearer/.prev_CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Generated from bearer.pro. - -if(SUBDIRS_ISEMPTY OR (TARGET Qt::DBus AND linux_x_ AND NOT ANDROID)) - add_subdirectory(generic) -endif() -if(TARGET Qt::DBus AND linux_x_ AND NOT ANDROID) - add_subdirectory(connman) - add_subdirectory(networkmanager) -endif() -if(ANDROID AND NOT ANDROID_EMBEDDED) - add_subdirectory(android) -endif() diff --git a/src/plugins/bearer/CMakeLists.txt b/src/plugins/bearer/CMakeLists.txt deleted file mode 100644 index 528061d264..0000000000 --- a/src/plugins/bearer/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# Generated from bearer.pro. - -# special case begin -# The whole block is manual. -if(NOT ANDROID AND LINUX AND TARGET Qt::DBus) - add_subdirectory(generic) - add_subdirectory(connman) - add_subdirectory(networkmanager) -elseif(ANDROID AND NOT ANDROID_EMBEDDED) - add_subdirectory(android) -else() - add_subdirectory(generic) -endif() -# special case end diff --git a/src/plugins/bearer/android/CMakeLists.txt b/src/plugins/bearer/android/CMakeLists.txt deleted file mode 100644 index 193cbf1fe3..0000000000 --- a/src/plugins/bearer/android/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Generated from android.pro. - -add_subdirectory(src) -add_subdirectory(jar) diff --git a/src/plugins/bearer/android/android.pro b/src/plugins/bearer/android/android.pro deleted file mode 100644 index 6a51abf5d7..0000000000 --- a/src/plugins/bearer/android/android.pro +++ /dev/null @@ -1,4 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += src \ - jar diff --git a/src/plugins/bearer/android/jar/.prev_CMakeLists.txt b/src/plugins/bearer/android/jar/.prev_CMakeLists.txt deleted file mode 100644 index f5f25c4f8b..0000000000 --- a/src/plugins/bearer/android/jar/.prev_CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -# Generated from jar.pro. - -set(java_sources - src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java -) - -add_jar(QtAndroidBearer - INCLUDE_JARS ${QT_ANDROID_JAR} - SOURCES ${java_sources} -) - -install_jar(QtAndroidBearer - DESTINATION jar - COMPONENT Devel -) - diff --git a/src/plugins/bearer/android/jar/CMakeLists.txt b/src/plugins/bearer/android/jar/CMakeLists.txt deleted file mode 100644 index 16641d42b7..0000000000 --- a/src/plugins/bearer/android/jar/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -##################################################################### -## QtAndroidBearer Binary: -##################################################################### - -set(java_sources - src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java -) - -add_jar(QtAndroidBearer - INCLUDE_JARS ${QT_ANDROID_JAR} - SOURCES ${java_sources} - ) - -install_jar(QtAndroidBearer - DESTINATION jar - COMPONENT Devel) - -#### Keys ignored in scope 1:.:.:jar.pro:: -# JAVACLASSPATH = "$$PWD/src" -# JAVASOURCES = "$$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java" -# _LOADED = "qt_build_paths" - diff --git a/src/plugins/bearer/android/jar/jar.pro b/src/plugins/bearer/android/jar/jar.pro deleted file mode 100644 index 8277a8abc1..0000000000 --- a/src/plugins/bearer/android/jar/jar.pro +++ /dev/null @@ -1,15 +0,0 @@ -CONFIG += single_arch - -TARGET = QtAndroidBearer - -load(qt_build_paths) -CONFIG += java -DESTDIR = $$MODULE_BASE_OUTDIR/jar - -JAVACLASSPATH += $$PWD/src - -JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java - -# install -target.path = $$[QT_INSTALL_PREFIX]/jar -INSTALLS += target diff --git a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java b/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java deleted file mode 100644 index 805c90548b..0000000000 --- a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -package org.qtproject.qt5.android.bearer; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.util.Log; -import android.net.ConnectivityManager; - -public class QtNetworkReceiver -{ - private static final String LOG_TAG = "QtNetworkReceiver"; - private static native void activeNetworkInfoChanged(); - private static BroadcastReceiverPrivate m_broadcastReceiver = null; - private static final Object m_lock = new Object(); - - private static class BroadcastReceiverPrivate extends BroadcastReceiver - { - @Override - public void onReceive(Context context, Intent intent) - { - activeNetworkInfoChanged(); - } - } - - private QtNetworkReceiver() {} - - public static void registerReceiver(final Context context) - { - synchronized (m_lock) { - if (m_broadcastReceiver == null) { - m_broadcastReceiver = new BroadcastReceiverPrivate(); - IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); - context.registerReceiver(m_broadcastReceiver, intentFilter); - } - } - } - - public static void unregisterReceiver(final Context context) - { - synchronized (m_lock) { - if (m_broadcastReceiver == null) - return; - - context.unregisterReceiver(m_broadcastReceiver); - } - } - - public static ConnectivityManager getConnectivityManager(final Context context) - { - return (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); - } -} diff --git a/src/plugins/bearer/android/src/CMakeLists.txt b/src/plugins/bearer/android/src/CMakeLists.txt deleted file mode 100644 index 5be89e316b..0000000000 --- a/src/plugins/bearer/android/src/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# Generated from src.pro. - -##################################################################### -## QAndroidBearerEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QAndroidBearerEnginePlugin - OUTPUT_NAME qandroidbearer - TYPE bearer - SOURCES - main.cpp - qandroidbearerengine.cpp qandroidbearerengine.h - wrappers/androidconnectivitymanager.cpp wrappers/androidconnectivitymanager.h - INCLUDE_DIRECTORIES - wrappers - PUBLIC_LIBRARIES - Qt::CorePrivate - Qt::NetworkPrivate -) diff --git a/src/plugins/bearer/android/src/android.json b/src/plugins/bearer/android/src/android.json deleted file mode 100644 index 6843bd3301..0000000000 --- a/src/plugins/bearer/android/src/android.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "android" ] -} diff --git a/src/plugins/bearer/android/src/main.cpp b/src/plugins/bearer/android/src/main.cpp deleted file mode 100644 index f3a5074e5d..0000000000 --- a/src/plugins/bearer/android/src/main.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qandroidbearerengine.h" -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QAndroidBearerEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "android.json") - -public: - QBearerEngine *create(const QString &key) const override - { - return (key == QLatin1String("android")) ? new QAndroidBearerEngine() : 0; - } -}; - -QT_END_NAMESPACE - -#include "main.moc" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/android/src/qandroidbearerengine.cpp b/src/plugins/bearer/android/src/qandroidbearerengine.cpp deleted file mode 100644 index ad9895e0cf..0000000000 --- a/src/plugins/bearer/android/src/qandroidbearerengine.cpp +++ /dev/null @@ -1,391 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qandroidbearerengine.h" -#include -#include "wrappers/androidconnectivitymanager.h" - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -static QString networkConfType(const AndroidNetworkInfo &networkInfo) -{ - switch (networkInfo.getType()) { - case AndroidNetworkInfo::Mobile: - return QStringLiteral("Mobile"); - case AndroidNetworkInfo::Wifi: - return QStringLiteral("WiFi"); - case AndroidNetworkInfo::Wimax: - return QStringLiteral("WiMax"); - case AndroidNetworkInfo::Ethernet: - return QStringLiteral("Ethernet"); - case AndroidNetworkInfo::Bluetooth: - return QStringLiteral("Bluetooth"); - default: - break; - } - - return QString(); -} - -static inline bool isMobile(QNetworkConfiguration::BearerType type) -{ - if (type == QNetworkConfiguration::BearerWLAN - || type == QNetworkConfiguration::BearerWiMAX - || type == QNetworkConfiguration::BearerBluetooth - || type == QNetworkConfiguration::BearerEthernet - || type == QNetworkConfiguration::BearerUnknown) { - return false; - } - - return true; -} - -static QNetworkConfiguration::BearerType getBearerType(const AndroidNetworkInfo &networkInfo) -{ - switch (networkInfo.getType()) { - case AndroidNetworkInfo::Mobile: - { - switch (networkInfo.getSubtype()) { - case AndroidNetworkInfo::Gprs: - case AndroidNetworkInfo::Edge: - case AndroidNetworkInfo::Iden: // 2G - return QNetworkConfiguration::Bearer2G; - case AndroidNetworkInfo::Umts: // BearerWCDMA (3 .5 .75 G) - case AndroidNetworkInfo::Hsdpa: // 3G (?) UMTS - case AndroidNetworkInfo::Hsupa: // 3G (?) UMTS - return QNetworkConfiguration::BearerWCDMA; - case AndroidNetworkInfo::Cdma: // CDMA ISA95[AB] - case AndroidNetworkInfo::Cdma1xRTT: // BearerCDMA2000 (3G) - case AndroidNetworkInfo::Ehrpd: // CDMA Bridge thing?!? - return QNetworkConfiguration::BearerCDMA2000; - case AndroidNetworkInfo::Evdo0: // BearerEVDO - case AndroidNetworkInfo::EvdoA: // BearerEVDO - case AndroidNetworkInfo::EvdoB: // BearerEVDO - return QNetworkConfiguration::BearerEVDO; - case AndroidNetworkInfo::Hspa: - case AndroidNetworkInfo::Hspap: // HSPA+ - return QNetworkConfiguration::BearerHSPA; - case AndroidNetworkInfo::Lte: // BearerLTE (4G) - return QNetworkConfiguration::BearerLTE; - default: - break; - } - } - case AndroidNetworkInfo::Wifi: - return QNetworkConfiguration::BearerWLAN; - case AndroidNetworkInfo::Wimax: - return QNetworkConfiguration::BearerWiMAX; - case AndroidNetworkInfo::Bluetooth: - case AndroidNetworkInfo::MobileDun: - return QNetworkConfiguration::BearerBluetooth; - case AndroidNetworkInfo::Ethernet: - return QNetworkConfiguration::BearerEthernet; - case AndroidNetworkInfo::MobileMms: - case AndroidNetworkInfo::MobileSupl: - case AndroidNetworkInfo::MobileHipri: - case AndroidNetworkInfo::Dummy: - case AndroidNetworkInfo::UnknownType: - break; - } - - return QNetworkConfiguration::BearerUnknown; -} - -QAndroidBearerEngine::QAndroidBearerEngine(QObject *parent) - : QBearerEngineImpl(parent), - m_connectivityManager(0) -{ -} - -QAndroidBearerEngine::~QAndroidBearerEngine() -{ -} - -QString QAndroidBearerEngine::getInterfaceFromId(const QString &id) -{ - const QMutexLocker locker(&mutex); - return m_configurationInterface.value(id); -} - -bool QAndroidBearerEngine::hasIdentifier(const QString &id) -{ - const QMutexLocker locker(&mutex); - return m_configurationInterface.contains(id); -} - -void QAndroidBearerEngine::connectToId(const QString &id) -{ - Q_EMIT connectionError(id, OperationNotSupported); -} - -void QAndroidBearerEngine::disconnectFromId(const QString &id) -{ - Q_EMIT connectionError(id, OperationNotSupported); -} - -QNetworkSession::State QAndroidBearerEngine::sessionStateForId(const QString &id) -{ - const QMutexLocker locker(&mutex); - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if ((!ptr || !ptr->isValid) || m_connectivityManager == 0) - return QNetworkSession::Invalid; - - const QMutexLocker configLocker(&ptr->mutex); - // Don't re-order... - if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - return QNetworkSession::Connected; - } else if ((ptr->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -QNetworkConfigurationManager::Capabilities QAndroidBearerEngine::capabilities() const -{ - - return AndroidTrafficStats::isTrafficStatsSupported() - ? QNetworkConfigurationManager::ForcedRoaming - | QNetworkConfigurationManager::DataStatistics - : QNetworkConfigurationManager::ForcedRoaming; - -} - -QNetworkSessionPrivate *QAndroidBearerEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl(); -} - -QNetworkConfigurationPrivatePointer QAndroidBearerEngine::defaultConfiguration() -{ - return QNetworkConfigurationPrivatePointer(); -} - -bool QAndroidBearerEngine::requiresPolling() const -{ - return false; -} - -quint64 QAndroidBearerEngine::bytesWritten(const QString &id) -{ - QMutexLocker lock(&mutex); - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (!ptr || !ptr->isValid) - return 0; - - return isMobile(ptr->bearerType) - ? AndroidTrafficStats::getMobileTxBytes() - : AndroidTrafficStats::getTotalTxBytes() - AndroidTrafficStats::getMobileTxBytes(); -} - -quint64 QAndroidBearerEngine::bytesReceived(const QString &id) -{ - QMutexLocker lock(&mutex); - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (!ptr || !ptr->isValid) - return 0; - - return isMobile(ptr->bearerType) - ? AndroidTrafficStats::getMobileRxBytes() - : AndroidTrafficStats::getTotalRxBytes() - AndroidTrafficStats::getMobileRxBytes(); -} - -quint64 QAndroidBearerEngine::startTime(const QString &id) -{ - Q_UNUSED(id); - return Q_UINT64_C(0); -} - -void QAndroidBearerEngine::initialize() -{ - if (m_connectivityManager != 0) - return; - - m_connectivityManager = AndroidConnectivityManager::getInstance(); - if (m_connectivityManager == 0) - return; - - updateConfigurations(); - - connect(m_connectivityManager, &AndroidConnectivityManager::activeNetworkChanged, - this, &QAndroidBearerEngine::updateConfigurations); - -} - -void QAndroidBearerEngine::requestUpdate() -{ - updateConfigurations(); -} - -void QAndroidBearerEngine::updateConfigurations() -{ -#ifndef QT_NO_NETWORKINTERFACE - if (m_connectivityManager == 0) - return; - - { - QMutexLocker locker(&mutex); - QStringList oldKeys = accessPointConfigurations.keys(); - - QList interfaces = QNetworkInterface::allInterfaces(); - if (interfaces.isEmpty()) - interfaces = QNetworkInterface::allInterfaces(); - - // Create a configuration for each of the main types (WiFi, Mobile, Bluetooth, WiMax, Ethernet) - const auto netInfos = m_connectivityManager->getAllNetworkInfo(); - for (const AndroidNetworkInfo &netInfo : netInfos) { - - if (!netInfo.isValid()) - continue; - - const QString name = networkConfType(netInfo); - if (name.isEmpty()) - continue; - - QNetworkConfiguration::BearerType bearerType = getBearerType(netInfo); - - QString interfaceName; - QNetworkConfiguration::StateFlag state = QNetworkConfiguration::Defined; - if (netInfo.isAvailable()) { - if (netInfo.isConnected()) { - // Attempt to map an interface to this configuration - while (!interfaces.isEmpty()) { - QNetworkInterface interface = interfaces.takeFirst(); - // ignore loopback interface - if (!interface.isValid()) - continue; - - if (interface.flags() & QNetworkInterface::IsLoopBack) - continue; - // There is no way to get the interface from the NetworkInfo, so - // look for an active interface... - if (interface.flags() & QNetworkInterface::IsRunning - && !interface.addressEntries().isEmpty()) { - state = QNetworkConfiguration::Active; - interfaceName = interface.name(); - break; - } - } - } - } - - const QString key = QString(QLatin1String("android:%1:%2")).arg(name).arg(interfaceName); - const QString id = QString::number(qHash(key)); - m_configurationInterface[id] = interfaceName; - - oldKeys.removeAll(id); - if (accessPointConfigurations.contains(id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - bool changed = false; - { - const QMutexLocker confLocker(&ptr->mutex); - - if (!ptr->isValid) { - ptr->isValid = true; - changed = true; - } - - // Don't reset the bearer type to 'Unknown' - if (ptr->bearerType != QNetworkConfiguration::BearerUnknown - && ptr->bearerType != bearerType) { - ptr->bearerType = bearerType; - changed = true; - } - - if (ptr->name != name) { - ptr->name = name; - changed = true; - } - - if (ptr->id != id) { - ptr->id = id; - changed = true; - } - - if (ptr->state != state) { - ptr->state = state; - changed = true; - } - } // Unlock configuration - - if (changed) { - locker.unlock(); - Q_EMIT configurationChanged(ptr); - locker.relock(); - } - } else { - QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate); - ptr->name = name; - ptr->isValid = true; - ptr->id = id; - ptr->state = state; - ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearerType = bearerType; - accessPointConfigurations.insert(id, ptr); - locker.unlock(); - Q_EMIT configurationAdded(ptr); - locker.relock(); - } - } - - while (!oldKeys.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(oldKeys.takeFirst()); - m_configurationInterface.remove(ptr->id); - locker.unlock(); - Q_EMIT configurationRemoved(ptr); - locker.relock(); - } - - } // Unlock engine - -#endif // QT_NO_NETWORKINTERFACE - - Q_EMIT updateCompleted(); -} - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/android/src/qandroidbearerengine.h b/src/plugins/bearer/android/src/qandroidbearerengine.h deleted file mode 100644 index 867d04d886..0000000000 --- a/src/plugins/bearer/android/src/qandroidbearerengine.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QANDROIDBEARERENGINE_H -#define QANDROIDBEARERENGINE_H - -#include - -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -class QNetworkSessionPrivate; -class AndroidConnectivityManager; - -class QAndroidBearerEngine : public QBearerEngineImpl -{ - Q_OBJECT - -public: - explicit QAndroidBearerEngine(QObject *parent = 0); - ~QAndroidBearerEngine() override; - - QString getInterfaceFromId(const QString &id) override; - bool hasIdentifier(const QString &id) override; - void connectToId(const QString &id) override; - void disconnectFromId(const QString &id) override; - QNetworkSession::State sessionStateForId(const QString &id) override; - QNetworkConfigurationManager::Capabilities capabilities() const override; - QNetworkSessionPrivate *createSessionBackend() override; - QNetworkConfigurationPrivatePointer defaultConfiguration() override; - bool requiresPolling() const override; - quint64 bytesWritten(const QString &id) override; - quint64 bytesReceived(const QString &id) override; - quint64 startTime(const QString &id) override; - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - -private Q_SLOTS: - void updateConfigurations(); - -private: - QJNIObjectPrivate m_networkReceiver; - AndroidConnectivityManager *m_connectivityManager; - QMap m_configurationInterface; -}; - - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif // QANDROIDBEARERENGINE_H diff --git a/src/plugins/bearer/android/src/src.pro b/src/plugins/bearer/android/src/src.pro deleted file mode 100644 index fcd599dffe..0000000000 --- a/src/plugins/bearer/android/src/src.pro +++ /dev/null @@ -1,14 +0,0 @@ -TARGET = qandroidbearer - -QT = core-private network-private - -HEADERS += qandroidbearerengine.h - -SOURCES += main.cpp \ - qandroidbearerengine.cpp - -include(wrappers/wrappers.pri) - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QAndroidBearerEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp b/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp deleted file mode 100644 index 6787690246..0000000000 --- a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "androidconnectivitymanager.h" -#include -#include - -QT_BEGIN_NAMESPACE - -static inline bool exceptionCheckAndClear(JNIEnv *env) -{ - if (!env->ExceptionCheck()) - return false; - -#ifdef QT_DEBUG - env->ExceptionDescribe(); -#endif // QT_DEBUG - env->ExceptionClear(); - - return true; -} - -struct AndroidConnectivityManagerInstance -{ - AndroidConnectivityManagerInstance() - : connManager(new AndroidConnectivityManager) - { } - ~AndroidConnectivityManagerInstance() - { - delete connManager; - } - - AndroidConnectivityManager* connManager; -}; - -Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance) - -static const char networkReceiverClass[] = "org/qtproject/qt5/android/bearer/QtNetworkReceiver"; -static const char trafficStatsClass[] = "android/net/TrafficStats"; - -/** - * Returns the number of bytes transmitted over the mobile network since last device boot. - */ -qint64 AndroidTrafficStats::getMobileTxBytes() -{ - return QJNIObjectPrivate::callStaticMethod(trafficStatsClass, - "getMobileTxBytes", - "()J"); -} - -/** - * Returns the number of bytes received over the mobile network since last device boot. - */ -qint64 AndroidTrafficStats::getMobileRxBytes() -{ - return QJNIObjectPrivate::callStaticMethod(trafficStatsClass, - "getMobileRxBytes", - "()J"); -} - -/** - * Returns the total transmitted bytes since last device boot. - */ -qint64 AndroidTrafficStats::getTotalTxBytes() -{ - return QJNIObjectPrivate::callStaticMethod(trafficStatsClass, - "getTotalTxBytes", - "()J"); -} - -/** - * Returns the total received bytes since last device boot. - */ -qint64 AndroidTrafficStats::getTotalRxBytes() -{ - return QJNIObjectPrivate::callStaticMethod(trafficStatsClass, - "getTotalRxBytes", - "()J"); -} - -bool AndroidTrafficStats::isTrafficStatsSupported() -{ - // Before API level 18 DataStatistics might not be supported, so make sure that we get something - // else then -1 from from getXXBytes(). - return (AndroidTrafficStats::getMobileRxBytes() != -1 - && AndroidTrafficStats::getTotalRxBytes() != -1); -} - -static AndroidNetworkInfo::NetworkState stateForName(const QString &stateName) -{ - if (stateName == QLatin1String("CONNECTED")) - return AndroidNetworkInfo::Connected; - else if (stateName == QLatin1String("CONNECTING")) - return AndroidNetworkInfo::Connecting; - else if (stateName == QLatin1String("DISCONNECTED")) - return AndroidNetworkInfo::Disconnected; - else if (stateName == QLatin1String("DISCONNECTING")) - return AndroidNetworkInfo::Disconnecting; - else if (stateName == QLatin1String("SUSPENDED")) - return AndroidNetworkInfo::Suspended; - - return AndroidNetworkInfo::UnknownState; -} - -AndroidNetworkInfo::NetworkState AndroidNetworkInfo::getDetailedState() const -{ - QJNIObjectPrivate enumObject = m_networkInfo.callObjectMethod("getDetailedState", - "()Landroid/net/NetworkInfo$DetailedState;"); - if (!enumObject.isValid()) - return UnknownState; - - QJNIObjectPrivate enumName = enumObject.callObjectMethod("name"); - if (!enumName.isValid()) - return UnknownState; - - return stateForName(enumName.toString()); -} - -QString AndroidNetworkInfo::getExtraInfo() const -{ - QJNIObjectPrivate extraInfo = m_networkInfo.callObjectMethod("getExtraInfo"); - if (!extraInfo.isValid()) - return QString(); - - return extraInfo.toString(); -} - -QString AndroidNetworkInfo::getReason() const -{ - QJNIObjectPrivate reason = m_networkInfo.callObjectMethod("getReason"); - if (!reason.isValid()) - return QString(); - - return reason.toString(); -} - -AndroidNetworkInfo::NetworkState AndroidNetworkInfo::getState() const -{ - QJNIObjectPrivate enumObject = m_networkInfo.callObjectMethod("getState", - "()Landroid/net/NetworkInfo$State;"); - if (!enumObject.isValid()) - return UnknownState; - - QJNIObjectPrivate enumName = enumObject.callObjectMethod("name"); - if (!enumName.isValid()) - return UnknownState; - - return stateForName(enumName.toString()); -} - -AndroidNetworkInfo::NetworkSubType AndroidNetworkInfo::getSubtype() const -{ - return AndroidNetworkInfo::NetworkSubType(m_networkInfo.callMethod("getSubtype")); -} - -QString AndroidNetworkInfo::getSubtypeName() const -{ - QJNIObjectPrivate subtypeName = m_networkInfo.callObjectMethod("getSubtypeName"); - if (!subtypeName.isValid()) - return QString(); - - return subtypeName.toString(); -} - -AndroidNetworkInfo::NetworkType AndroidNetworkInfo::getType() const -{ - return AndroidNetworkInfo::NetworkType(m_networkInfo.callMethod("getType")); -} - -QString AndroidNetworkInfo::getTypeName() const -{ - QJNIObjectPrivate typeName = m_networkInfo.callObjectMethod("getTypeName"); - if (!typeName.isValid()) - return QString(); - - return typeName.toString(); -} - -bool AndroidNetworkInfo::isAvailable() const -{ - return m_networkInfo.callMethod("isAvailable"); -} - -bool AndroidNetworkInfo::isConnected() const -{ - return m_networkInfo.callMethod("isConnected"); -} - -bool AndroidNetworkInfo::isConnectedOrConnecting() const -{ - return m_networkInfo.callMethod("isConnectedOrConnecting"); -} - -bool AndroidNetworkInfo::isFailover() const -{ - return m_networkInfo.callMethod("isFailover"); -} - -bool AndroidNetworkInfo::isRoaming() const -{ - return m_networkInfo.callMethod("isRoaming"); -} - -bool AndroidNetworkInfo::isValid() const -{ - return m_networkInfo.isValid(); -} - -AndroidConnectivityManager::AndroidConnectivityManager() -{ - QJNIEnvironmentPrivate env; - if (!registerNatives(env)) - return; - - m_connectivityManager = QJNIObjectPrivate::callStaticObjectMethod(networkReceiverClass, - "getConnectivityManager", - "(Landroid/content/Context;)Landroid/net/ConnectivityManager;", - QtAndroidPrivate::context()); - if (!m_connectivityManager.isValid()) - return; - - QJNIObjectPrivate::callStaticMethod(networkReceiverClass, - "registerReceiver", - "(Landroid/content/Context;)V", - QtAndroidPrivate::context()); -} - -AndroidConnectivityManager *AndroidConnectivityManager::getInstance() -{ - return androidConnManagerInstance->connManager->isValid() - ? androidConnManagerInstance->connManager - : 0; -} - -AndroidConnectivityManager::~AndroidConnectivityManager() -{ - QJNIObjectPrivate::callStaticMethod(networkReceiverClass, - "unregisterReceiver", - "(Landroid/content/Context;)V", - QtAndroidPrivate::context()); -} - -AndroidNetworkInfo AndroidConnectivityManager::getActiveNetworkInfo() const -{ - QJNIObjectPrivate networkInfo = m_connectivityManager.callObjectMethod("getActiveNetworkInfo", - "()Landroid/net/NetworkInfo;"); - return networkInfo; -} - -QList AndroidConnectivityManager::getAllNetworkInfo() const -{ - QJNIEnvironmentPrivate env; - QJNIObjectPrivate objArray = m_connectivityManager.callObjectMethod("getAllNetworkInfo", - "()[Landroid/net/NetworkInfo;"); - QList list; - if (!objArray.isValid()) - return list; - - const jsize length = env->GetArrayLength(static_cast(objArray.object())); - if (exceptionCheckAndClear(env)) - return list; - - for (int i = 0; i != length; ++i) { - jobject lref = env->GetObjectArrayElement(static_cast(objArray.object()), i); - if (exceptionCheckAndClear(env)) - break; - - list << AndroidNetworkInfo(QJNIObjectPrivate::fromLocalRef(lref)); - } - - return list; -} - -bool AndroidConnectivityManager::getBackgroundDataSetting() const -{ - return m_connectivityManager.callMethod("getBackgroundDataSetting"); -} - -AndroidNetworkInfo AndroidConnectivityManager::getNetworkInfo(int networkType) const -{ - QJNIObjectPrivate networkInfo = m_connectivityManager.callObjectMethod("getNetworkInfo", - "(I)Landroid/net/NetworkInfo;", - networkType); - return networkInfo; -} - -int AndroidConnectivityManager::getNetworkPreference() const -{ - return m_connectivityManager.callMethod("getNetworkPreference"); -} - -bool AndroidConnectivityManager::isActiveNetworkMetered() const -{ - return m_connectivityManager.callMethod("isActiveNetworkMetered"); -} - -bool AndroidConnectivityManager::isNetworkTypeValid(int networkType) -{ - return QJNIObjectPrivate::callStaticMethod("android/net/ConnectivityManager", - "isNetworkTypeValid", - "(I)Z", - networkType); -} - -bool AndroidConnectivityManager::requestRouteToHost(int networkType, int hostAddress) -{ - return m_connectivityManager.callMethod("requestRouteToHost", "(II)Z", networkType, hostAddress); -} - -void AndroidConnectivityManager::setNetworkPreference(int preference) -{ - m_connectivityManager.callMethod("setNetworkPreference", "(I)V", preference); -} - -int AndroidConnectivityManager::startUsingNetworkFeature(int networkType, const QString &feature) -{ - QJNIObjectPrivate jfeature = QJNIObjectPrivate::fromString(feature); - return m_connectivityManager.callMethod("startUsingNetworkFeature", - "(ILjava/lang/String;)I", - networkType, - jfeature.object()); -} - -int AndroidConnectivityManager::stopUsingNetworkFeature(int networkType, const QString &feature) -{ - QJNIObjectPrivate jfeature = QJNIObjectPrivate::fromString(feature); - return m_connectivityManager.callMethod("stopUsingNetworkFeature", - "(ILjava/lang/String;)I", - networkType, - jfeature.object()); -} - -static void activeNetworkInfoChanged() -{ - Q_EMIT androidConnManagerInstance->connManager->activeNetworkChanged(); -} - -bool AndroidConnectivityManager::registerNatives(JNIEnv *env) -{ - QJNIObjectPrivate networkReceiver(networkReceiverClass); - if (!networkReceiver.isValid()) - return false; - - jclass clazz = env->GetObjectClass(networkReceiver.object()); - static JNINativeMethod method = {"activeNetworkInfoChanged", "()V", reinterpret_cast(activeNetworkInfoChanged)}; - const bool ret = (env->RegisterNatives(clazz, &method, 1) == JNI_OK); - env->DeleteLocalRef(clazz); - return ret; -} - -QT_END_NAMESPACE diff --git a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.h b/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.h deleted file mode 100644 index 7c410b0087..0000000000 --- a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.h +++ /dev/null @@ -1,168 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef ANDROIDCONNECTIVITYMANAGER_H -#define ANDROIDCONNECTIVITYMANAGER_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class AndroidTrafficStats -{ -public: - static qint64 getMobileTxBytes(); - static qint64 getMobileRxBytes(); - static qint64 getTotalTxBytes(); - static qint64 getTotalRxBytes(); - static bool isTrafficStatsSupported(); -}; - -class AndroidNetworkInfo -{ -public: - // Needs to be in sync with the values from the android api. - enum NetworkState { - UnknownState, - Authenticating, - Blocked, - CaptivePortalCheck, - Connected, - Connecting, - Disconnected, - Disconnecting, - Failed, - Idle, - ObtainingIpAddr, - Scanning, - Suspended, - VerifyingPoorLink - }; - - enum NetworkType { - Mobile, - Wifi, - MobileMms, - MobileSupl, - MobileDun, - MobileHipri, - Wimax, - Bluetooth, - Dummy, - Ethernet, - UnknownType - }; - - enum NetworkSubType { - UnknownSubType, - Gprs, - Edge, - Umts, - Cdma, - Evdo0, - EvdoA, - Cdma1xRTT, - Hsdpa, - Hsupa, - Hspa, - Iden, - EvdoB, - Lte, - Ehrpd, - Hspap - }; - - inline AndroidNetworkInfo(const QJNIObjectPrivate &obj) : m_networkInfo(obj) - { } - - NetworkState getDetailedState() const; - QString getExtraInfo() const; - QString getReason() const; - NetworkState getState() const; - NetworkSubType getSubtype() const; - QString getSubtypeName() const; - NetworkType getType() const; - QString getTypeName() const; - bool isAvailable() const; - bool isConnected() const; - bool isConnectedOrConnecting() const; - bool isFailover() const; - bool isRoaming() const; - bool isValid() const; - -private: - QJNIObjectPrivate m_networkInfo; -}; - -class AndroidConnectivityManager : public QObject -{ - Q_OBJECT -public: - static AndroidConnectivityManager *getInstance(); - ~AndroidConnectivityManager(); - - AndroidNetworkInfo getActiveNetworkInfo() const; - QList getAllNetworkInfo() const; - bool getBackgroundDataSetting() const; - AndroidNetworkInfo getNetworkInfo(int networkType) const; - int getNetworkPreference() const; - bool isActiveNetworkMetered() const; - static bool isNetworkTypeValid(int networkType); - bool requestRouteToHost(int networkType, int hostAddress); - void setNetworkPreference(int preference); - int startUsingNetworkFeature(int networkType, const QString &feature); - int stopUsingNetworkFeature(int networkType, const QString &feature); - inline bool isValid() const - { - return m_connectivityManager.isValid(); - } - - Q_SIGNAL void activeNetworkChanged(); - -private: - friend struct AndroidConnectivityManagerInstance; - AndroidConnectivityManager(); - bool registerNatives(JNIEnv *env); - QJNIObjectPrivate m_connectivityManager; -}; - -QT_END_NAMESPACE - -#endif // ANDROIDCONNECTIVITYMANAGER_H diff --git a/src/plugins/bearer/android/src/wrappers/wrappers.pri b/src/plugins/bearer/android/src/wrappers/wrappers.pri deleted file mode 100644 index 209b76e533..0000000000 --- a/src/plugins/bearer/android/src/wrappers/wrappers.pri +++ /dev/null @@ -1,6 +0,0 @@ -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/androidconnectivitymanager.h -SOURCES += \ - $$PWD/androidconnectivitymanager.cpp diff --git a/src/plugins/bearer/bearer.pro b/src/plugins/bearer/bearer.pro deleted file mode 100644 index afdc613167..0000000000 --- a/src/plugins/bearer/bearer.pro +++ /dev/null @@ -1,11 +0,0 @@ -TEMPLATE = subdirs -QT_FOR_CONFIG += network-private - -!android:linux*:qtHaveModule(dbus) { - SUBDIRS += generic - SUBDIRS += connman networkmanager -} - -android:!android-embedded: SUBDIRS += android - -isEmpty(SUBDIRS):SUBDIRS = generic diff --git a/src/plugins/bearer/connman/.prev_CMakeLists.txt b/src/plugins/bearer/connman/.prev_CMakeLists.txt deleted file mode 100644 index 55aaa41491..0000000000 --- a/src/plugins/bearer/connman/.prev_CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Generated from connman.pro. - -##################################################################### -## QConnmanEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QConnmanEnginePlugin - OUTPUT_NAME qconnmanbearer - CLASS_NAME QConnmanEnginePlugin - TYPE bearer - SOURCES - main.cpp - qconnmanengine.cpp qconnmanengine.h - qconnmanservice_linux.cpp qconnmanservice_linux_p.h - LIBRARIES - Qt::LinuxOfonoSupportPrivate - Qt::NetworkPrivate - PUBLIC_LIBRARIES - Qt::Core - Qt::DBus - Qt::LinuxOfonoSupport - Qt::Network -) - -#### Keys ignored in scope 1:.:.:connman.pro:: -# OTHER_FILES = "connman.json" diff --git a/src/plugins/bearer/connman/CMakeLists.txt b/src/plugins/bearer/connman/CMakeLists.txt deleted file mode 100644 index 745f48b6e0..0000000000 --- a/src/plugins/bearer/connman/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Generated from connman.pro. - -##################################################################### -## QConnmanEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QConnmanEnginePlugin - OUTPUT_NAME qconnmanbearer - TYPE bearer - SOURCES - main.cpp - qconnmanengine.cpp qconnmanengine.h - qconnmanservice_linux.cpp qconnmanservice_linux_p.h - PUBLIC_LIBRARIES - Qt::Core - Qt::DBus - Qt::LinuxOfonoSupportPrivate - Qt::NetworkPrivate -) - -#### Keys ignored in scope 1:.:.:connman.pro:: -# OTHER_FILES = "connman.json" diff --git a/src/plugins/bearer/connman/connman.json b/src/plugins/bearer/connman/connman.json deleted file mode 100644 index 7a80b8c9be..0000000000 --- a/src/plugins/bearer/connman/connman.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "connman" ] -} diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro deleted file mode 100644 index 03e94cfe6a..0000000000 --- a/src/plugins/bearer/connman/connman.pro +++ /dev/null @@ -1,16 +0,0 @@ -TARGET = qconnmanbearer - -QT = core network-private dbus linuxofono_support_private - -HEADERS += qconnmanservice_linux_p.h \ - qconnmanengine.h - -SOURCES += main.cpp \ - qconnmanservice_linux.cpp \ - qconnmanengine.cpp - -OTHER_FILES += connman.json - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QConnmanEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/connman/main.cpp b/src/plugins/bearer/connman/main.cpp deleted file mode 100644 index 03c8a7f6c5..0000000000 --- a/src/plugins/bearer/connman/main.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qconnmanengine.h" - -#include - -#include - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -class QConnmanEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "connman.json") - -public: - QConnmanEnginePlugin(); - ~QConnmanEnginePlugin(); - - QBearerEngine *create(const QString &key) const; -}; - -QConnmanEnginePlugin::QConnmanEnginePlugin() -{ -} - -QConnmanEnginePlugin::~QConnmanEnginePlugin() -{ -} - -QBearerEngine *QConnmanEnginePlugin::create(const QString &key) const -{ - if (key == QLatin1String("connman")) { - QConnmanEngine *engine = new QConnmanEngine; - if (engine->connmanAvailable()) - return engine; - else - delete engine; - } - return 0; -} - -QT_END_NAMESPACE - -#include "main.moc" - -#endif diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp deleted file mode 100644 index a673834825..0000000000 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ /dev/null @@ -1,570 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qconnmanengine.h" -#include "qconnmanservice_linux_p.h" -#include - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -QConnmanEngine::QConnmanEngine(QObject *parent) -: QBearerEngineImpl(parent), - connmanManager(new QConnmanManagerInterface(this)), - ofonoManager(new QOfonoManagerInterface(this)), - ofonoNetwork(0), - ofonoContextManager(0) -{ - qDBusRegisterMetaType(); - qDBusRegisterMetaType(); - qRegisterMetaType("ConnmanMapList"); -} - -QConnmanEngine::~QConnmanEngine() -{ -} - -bool QConnmanEngine::connmanAvailable() const -{ - const auto locker = qt_scoped_lock(mutex); - return connmanManager->isValid(); -} - -void QConnmanEngine::initialize() -{ - const auto locker = qt_scoped_lock(mutex); - connect(ofonoManager,SIGNAL(modemChanged()),this,SLOT(changedModem())); - - ofonoNetwork = new QOfonoNetworkRegistrationInterface(ofonoManager->currentModem(),this); - ofonoContextManager = new QOfonoDataConnectionManagerInterface(ofonoManager->currentModem(),this); - connect(ofonoContextManager,SIGNAL(roamingAllowedChanged(bool)),this,SLOT(reEvaluateCellular())); - - connect(connmanManager,SIGNAL(servicesChanged(ConnmanMapList,QList)), - this, SLOT(updateServices(ConnmanMapList,QList))); - - connect(connmanManager,SIGNAL(servicesReady(QStringList)),this,SLOT(servicesReady(QStringList))); - connect(connmanManager,SIGNAL(scanFinished(bool)),this,SLOT(finishedScan(bool))); - - const auto servPaths = connmanManager->getServices(); - for (const QString &servPath : servPaths) - addServiceConfiguration(servPath); - Q_EMIT updateCompleted(); -} - -void QConnmanEngine::changedModem() -{ - const auto locker = qt_scoped_lock(mutex); - if (ofonoNetwork) - delete ofonoNetwork; - - ofonoNetwork = new QOfonoNetworkRegistrationInterface(ofonoManager->currentModem(),this); - - if (ofonoContextManager) - delete ofonoContextManager; - ofonoContextManager = new QOfonoDataConnectionManagerInterface(ofonoManager->currentModem(),this); -} - -void QConnmanEngine::servicesReady(const QStringList &list) -{ - const auto locker = qt_scoped_lock(mutex); - for (const QString &servPath : list) - addServiceConfiguration(servPath); - - Q_EMIT updateCompleted(); -} - -QList QConnmanEngine::getConfigurations() -{ - const auto locker = qt_scoped_lock(mutex); - QList fetchedConfigurations; - QNetworkConfigurationPrivate* cpPriv = 0; - const int numFoundConfigurations = foundConfigurations.count(); - fetchedConfigurations.reserve(numFoundConfigurations); - - for (int i = 0; i < numFoundConfigurations; ++i) { - QNetworkConfigurationPrivate *config = new QNetworkConfigurationPrivate; - cpPriv = foundConfigurations.at(i); - - config->name = cpPriv->name; - config->isValid = cpPriv->isValid; - config->id = cpPriv->id; - config->state = cpPriv->state; - config->type = cpPriv->type; - config->roamingSupported = cpPriv->roamingSupported; - config->purpose = cpPriv->purpose; - config->bearerType = cpPriv->bearerType; - - fetchedConfigurations.append(config); - delete config; - } - return fetchedConfigurations; -} - -QString QConnmanEngine::getInterfaceFromId(const QString &id) -{ - const auto locker = qt_scoped_lock(mutex); - return configInterfaces.value(id); -} - -bool QConnmanEngine::hasIdentifier(const QString &id) -{ - const auto locker = qt_scoped_lock(mutex); - return accessPointConfigurations.contains(id); -} - -void QConnmanEngine::connectToId(const QString &id) -{ - const auto locker = qt_scoped_lock(mutex); - - QConnmanServiceInterface *serv = connmanServiceInterfaces.value(id); - - if (!serv || !serv->isValid()) { - emit connectionError(id, QBearerEngineImpl::InterfaceLookupError); - } else { - if (serv->type() == QLatin1String("cellular")) { - if (serv->roaming()) { - if (!isRoamingAllowed(serv->path())) { - emit connectionError(id, QBearerEngineImpl::OperationNotSupported); - return; - } - } - } - if (serv->autoConnect()) - serv->connect(); - } -} - -void QConnmanEngine::disconnectFromId(const QString &id) -{ - const auto locker = qt_scoped_lock(mutex); - QConnmanServiceInterface *serv = connmanServiceInterfaces.value(id); - - if (!serv || !serv->isValid()) { - emit connectionError(id, DisconnectionError); - } else { - serv->disconnect(); - } -} - -void QConnmanEngine::requestUpdate() -{ - const auto locker = qt_scoped_lock(mutex); - QTimer::singleShot(0, this, SLOT(doRequestUpdate())); -} - -void QConnmanEngine::doRequestUpdate() -{ - bool scanned = connmanManager->requestScan("wifi"); - if (!scanned) - Q_EMIT updateCompleted(); -} - -void QConnmanEngine::finishedScan(bool error) -{ - if (error) - Q_EMIT updateCompleted(); -} - -void QConnmanEngine::updateServices(const ConnmanMapList &changed, const QList &removed) -{ - const auto locker = qt_scoped_lock(mutex); - - foreach (const QDBusObjectPath &objectPath, removed) { - removeConfiguration(objectPath.path()); - } - - foreach (const ConnmanMap &connmanMap, changed) { - const QString id = connmanMap.objectPath.path(); - if (accessPointConfigurations.contains(id)) { - configurationChange(connmanServiceInterfaces.value(id)); - } else { - addServiceConfiguration(connmanMap.objectPath.path()); - } - } - Q_EMIT updateCompleted(); -} - -QNetworkSession::State QConnmanEngine::sessionStateForId(const QString &id) -{ - const auto locker = qt_scoped_lock(mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr || !ptr->isValid) - return QNetworkSession::Invalid; - - QString service = id; - QConnmanServiceInterface *serv = connmanServiceInterfaces.value(service); - if (!serv) - return QNetworkSession::Invalid; - - QString servState = serv->state(); - - if (serv->favorite() && (servState == QLatin1String("idle") || servState == QLatin1String("failure"))) { - return QNetworkSession::Disconnected; - } - - if (servState == QLatin1String("association") || servState == QLatin1String("configuration")) { - return QNetworkSession::Connecting; - } - - if (servState == QLatin1String("online") || servState == QLatin1String("ready")) { - return QNetworkSession::Connected; - } - - if ((ptr->state & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == - QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -quint64 QConnmanEngine::bytesWritten(const QString &id) -{//TODO use connman counter API - const auto locker = qt_scoped_lock(mutex); - quint64 result = 0; - QString devFile = getInterfaceFromId(id); - QFile tx("/sys/class/net/"+devFile+"/statistics/tx_bytes"); - if (tx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&tx); - in >> result; - tx.close(); - } - - return result; -} - -quint64 QConnmanEngine::bytesReceived(const QString &id) -{//TODO use connman counter API - const auto locker = qt_scoped_lock(mutex); - quint64 result = 0; - QString devFile = getInterfaceFromId(id); - QFile rx("/sys/class/net/"+devFile+"/statistics/rx_bytes"); - if (rx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&rx); - in >> result; - rx.close(); - } - return result; -} - -quint64 QConnmanEngine::startTime(const QString &/*id*/) -{ - // TODO - const auto locker = qt_scoped_lock(mutex); - if (activeTime.isNull()) { - return 0; - } - return activeTime.secsTo(QDateTime::currentDateTime()); -} - -QNetworkConfigurationManager::Capabilities QConnmanEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming | - QNetworkConfigurationManager::DataStatistics | - QNetworkConfigurationManager::CanStartAndStopInterfaces | - QNetworkConfigurationManager::NetworkSessionRequired; -} - -QNetworkSessionPrivate *QConnmanEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QConnmanEngine::defaultConfiguration() -{ - const auto locker = qt_scoped_lock(mutex); - const auto servPaths = connmanManager->getServices(); - for (const QString &servPath : servPaths) { - if (connmanServiceInterfaces.contains(servPath)) { - if (accessPointConfigurations.contains(servPath)) - return accessPointConfigurations.value(servPath); - } - } - return QNetworkConfigurationPrivatePointer(); -} - -void QConnmanEngine::serviceStateChanged(const QString &state) -{ - QConnmanServiceInterface *service = qobject_cast(sender()); - configurationChange(service); - - if (state == QLatin1String("failure")) { - emit connectionError(service->path(), ConnectError); - } -} - -void QConnmanEngine::configurationChange(QConnmanServiceInterface *serv) -{ - if (!serv) - return; - auto locker = qt_unique_lock(mutex); - QString id = serv->path(); - - if (accessPointConfigurations.contains(id)) { - bool changed = false; - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - QString networkName = serv->name(); - QNetworkConfiguration::StateFlags curState = getStateForService(serv->path()); - ptr->mutex.lock(); - - if (!ptr->isValid) { - ptr->isValid = true; - } - - if (ptr->name != networkName) { - ptr->name = networkName; - changed = true; - } - - if (ptr->state != curState) { - ptr->state = curState; - changed = true; - } - - ptr->mutex.unlock(); - - if (changed) { - locker.unlock(); - emit configurationChanged(ptr); - locker.lock(); - } - } - - locker.unlock(); - emit updateCompleted(); -} - -QNetworkConfiguration::StateFlags QConnmanEngine::getStateForService(const QString &service) -{ - const auto locker = qt_scoped_lock(mutex); - QConnmanServiceInterface *serv = connmanServiceInterfaces.value(service); - if (!serv) - return QNetworkConfiguration::Undefined; - - QString state = serv->state(); - QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined; - - if (serv->type() == QLatin1String("cellular")) { - - if (!serv->autoConnect()|| (serv->roaming() - && !isRoamingAllowed(serv->path()))) { - flag = (flag | QNetworkConfiguration::Defined); - } else { - flag = (flag | QNetworkConfiguration::Discovered); - } - } else { - if (serv->favorite()) { - if (serv->autoConnect()) { - flag = (flag | QNetworkConfiguration::Discovered); - } - } else { - flag = QNetworkConfiguration::Undefined; - } - } - if (state == QLatin1String("online") || state == QLatin1String("ready")) { - flag = (flag | QNetworkConfiguration::Active); - } - - return flag; -} - -QNetworkConfiguration::BearerType QConnmanEngine::typeToBearer(const QString &type) -{ - if (type == QLatin1String("wifi")) - return QNetworkConfiguration::BearerWLAN; - if (type == QLatin1String("ethernet")) - return QNetworkConfiguration::BearerEthernet; - if (type == QLatin1String("bluetooth")) - return QNetworkConfiguration::BearerBluetooth; - if (type == QLatin1String("cellular")) { - return ofonoTechToBearerType(type); - } - if (type == QLatin1String("wimax")) - return QNetworkConfiguration::BearerWiMAX; - - return QNetworkConfiguration::BearerUnknown; -} - -QNetworkConfiguration::BearerType QConnmanEngine::ofonoTechToBearerType(const QString &/*type*/) -{ - if (ofonoNetwork) { - QString currentTechnology = ofonoNetwork->getTechnology(); - if (currentTechnology == QLatin1String("gsm")) { - return QNetworkConfiguration::Bearer2G; - } else if (currentTechnology == QLatin1String("edge")) { - return QNetworkConfiguration::BearerCDMA2000; //wrong, I know - } else if (currentTechnology == QLatin1String("umts")) { - return QNetworkConfiguration::BearerWCDMA; - } else if (currentTechnology == QLatin1String("hspa")) { - return QNetworkConfiguration::BearerHSPA; - } else if (currentTechnology == QLatin1String("lte")) { - return QNetworkConfiguration::BearerLTE; - } - } - return QNetworkConfiguration::BearerUnknown; -} - -bool QConnmanEngine::isRoamingAllowed(const QString &context) -{ - const auto dcPaths = ofonoContextManager->contexts(); - for (const QString &dcPath : dcPaths) { - if (dcPath.contains(context.section("_",-1))) { - return ofonoContextManager->roamingAllowed(); - } - } - return false; -} - -void QConnmanEngine::removeConfiguration(const QString &id) -{ - auto locker = qt_unique_lock(mutex); - - if (accessPointConfigurations.contains(id)) { - - disconnect(connmanServiceInterfaces.value(id),SIGNAL(stateChanged(QString)), - this,SLOT(serviceStateChanged(QString))); - serviceNetworks.removeOne(id); - QConnmanServiceInterface *service = connmanServiceInterfaces.take(id); - delete service; - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(id); - foundConfigurations.removeOne(ptr.data()); - locker.unlock(); - emit configurationRemoved(ptr); - } -} - -void QConnmanEngine::addServiceConfiguration(const QString &servicePath) -{ - auto locker = qt_unique_lock(mutex); - if (!connmanServiceInterfaces.contains(servicePath)) { - QConnmanServiceInterface *serv = new QConnmanServiceInterface(servicePath, this); - connmanServiceInterfaces.insert(serv->path(),serv); - } - - if (!accessPointConfigurations.contains(servicePath)) { - - serviceNetworks.append(servicePath); - - connect(connmanServiceInterfaces.value(servicePath),SIGNAL(stateChanged(QString)), - this,SLOT(serviceStateChanged(QString))); - - QNetworkConfigurationPrivate* cpPriv = new QNetworkConfigurationPrivate(); - QConnmanServiceInterface *service = connmanServiceInterfaces.value(servicePath); - - QString networkName = service->name(); - - const QString connectionType = service->type(); - if (connectionType == QLatin1String("ethernet")) { - cpPriv->bearerType = QNetworkConfiguration::BearerEthernet; - } else if (connectionType == QLatin1String("wifi")) { - cpPriv->bearerType = QNetworkConfiguration::BearerWLAN; - } else if (connectionType == QLatin1String("cellular")) { - cpPriv->bearerType = ofonoTechToBearerType(QLatin1String("cellular")); - cpPriv->roamingSupported = service->roaming() && isRoamingAllowed(servicePath); - } else if (connectionType == QLatin1String("wimax")) { - cpPriv->bearerType = QNetworkConfiguration::BearerWiMAX; - } else { - cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; - } - - cpPriv->name = networkName; - cpPriv->isValid = true; - cpPriv->id = servicePath; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - - if (service->security() == QLatin1String("none")) { - cpPriv->purpose = QNetworkConfiguration::PublicPurpose; - } else { - cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; - } - - cpPriv->state = getStateForService(servicePath); - - QNetworkConfigurationPrivatePointer ptr(cpPriv); - accessPointConfigurations.insert(ptr->id, ptr); - if (connectionType == QLatin1String("cellular")) { - foundConfigurations.append(cpPriv); - } else { - foundConfigurations.prepend(cpPriv); - } - configInterfaces[cpPriv->id] = service->serviceInterface(); - - locker.unlock(); - Q_EMIT configurationAdded(ptr); - } -} - -bool QConnmanEngine::requiresPolling() const -{ - return false; -} - -void QConnmanEngine::reEvaluateCellular() -{ - const auto servicePaths = connmanManager->getServices(); - for (const QString &servicePath : servicePaths) { - if (servicePath.contains("cellular") && accessPointConfigurations.contains(servicePath)) { - configurationChange(connmanServiceInterfaces.value(servicePath)); - } - } -} - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h deleted file mode 100644 index 969eed45b1..0000000000 --- a/src/plugins/bearer/connman/qconnmanengine.h +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCONNMANENGINE_P_H -#define QCONNMANENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include "qconnmanservice_linux_p.h" -#include - -#include -#include - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -class QConnmanEngine : public QBearerEngineImpl -{ - Q_OBJECT - -public: - QConnmanEngine(QObject *parent = nullptr); - ~QConnmanEngine(); - - bool connmanAvailable() const; - - virtual QString getInterfaceFromId(const QString &id); - bool hasIdentifier(const QString &id); - - virtual void connectToId(const QString &id); - virtual void disconnectFromId(const QString &id); - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id); - QNetworkSessionPrivate *createSessionBackend(); - - virtual quint64 bytesWritten(const QString &id); - virtual quint64 bytesReceived(const QString &id); - virtual quint64 startTime(const QString &id); - - virtual QNetworkConfigurationManager::Capabilities capabilities() const; - virtual QNetworkConfigurationPrivatePointer defaultConfiguration(); - - QList getConfigurations(); - -private Q_SLOTS: - - void doRequestUpdate(); - void updateServices(const ConnmanMapList &changed, const QList &removed); - - void servicesReady(const QStringList &); - void finishedScan(bool error); - void changedModem(); - void serviceStateChanged(const QString &state); - void configurationChange(QConnmanServiceInterface * service); - void reEvaluateCellular(); -private: - QConnmanManagerInterface *connmanManager; - - QOfonoManagerInterface *ofonoManager; - QOfonoNetworkRegistrationInterface *ofonoNetwork; - QOfonoDataConnectionManagerInterface *ofonoContextManager; - - QList foundConfigurations; - - QString networkFromId(const QString &id); - - QNetworkConfiguration::StateFlags getStateForService(const QString &service); - QNetworkConfiguration::BearerType typeToBearer(const QString &type); - - void removeConfiguration(const QString &servicePath); - void addServiceConfiguration(const QString &servicePath); - QDateTime activeTime; - - - QMap technologies; // techpath, tech interface - QMap configInterfaces; // id, interface name - QList serviceNetworks; //servpath - - QNetworkConfiguration::BearerType ofonoTechToBearerType(const QString &type); - bool isRoamingAllowed(const QString &context); - QMap connmanServiceInterfaces; - -protected: - bool requiresPolling() const; -}; - - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS - -#endif - diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp deleted file mode 100644 index 35d9c40680..0000000000 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ /dev/null @@ -1,516 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "qconnmanservice_linux_p.h" - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &map) -{ - argument.beginStructure(); - argument << map.objectPath << map.propertyMap; - argument.endStructure(); - return argument; -} - -const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &map) -{ - argument.beginStructure(); - argument >> map.objectPath >> map.propertyMap; - argument.endStructure(); - return argument; -} - -QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - CONNMAN_MANAGER_INTERFACE, - QDBusConnection::systemBus(), parent) -{ - qDBusRegisterMetaType(); - qDBusRegisterMetaType(); - - QDBusPendingReply props_reply = asyncCall(QLatin1String("GetProperties")); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(props_reply, this); - - QObject::connect(watcher,SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(propertiesReply(QDBusPendingCallWatcher*))); - - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - QLatin1String(CONNMAN_SERVICE_INTERFACE), - QLatin1String("PropertyChanged"), - this,SLOT(changedProperty(QString,QDBusVariant))); - - - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - QLatin1String(CONNMAN_SERVICE_INTERFACE), - QLatin1String("TechnologyAdded"), - this,SLOT(technologyAdded(QDBusObjectPath,QVariantMap))); - - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - QLatin1String(CONNMAN_SERVICE_INTERFACE), - QLatin1String("TechnologyRemoved"), - this,SLOT(technologyRemoved(QDBusObjectPath))); - - QDBusPendingReply serv_reply = asyncCall(QLatin1String("GetServices")); - QDBusPendingCallWatcher *watcher2 = new QDBusPendingCallWatcher(serv_reply, this); - - QObject::connect(watcher2,SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(servicesReply(QDBusPendingCallWatcher*))); - -} - -QConnmanManagerInterface::~QConnmanManagerInterface() -{ -} - -void QConnmanManagerInterface::changedProperty(const QString &name, const QDBusVariant &value) -{ - propertiesCacheMap[name] = value.variant(); -} - -void QConnmanManagerInterface::propertiesReply(QDBusPendingCallWatcher *call) -{ - QDBusPendingReply props_reply = *call; - - if (props_reply.isError()) { - qDebug() << props_reply.error().message(); - } else { - propertiesCacheMap = props_reply.value(); - } - call->deleteLater(); -} - -void QConnmanManagerInterface::servicesReply(QDBusPendingCallWatcher *call) -{ - QDBusPendingReply serv_reply = *call; - - if (serv_reply.isError()) { - qDebug() << serv_reply.error().message(); - } else { - servicesList.clear(); //connman list changes order - const ConnmanMapList connmanobjs = serv_reply.value(); - for (const ConnmanMap &connmanobj : connmanobjs) - servicesList << connmanobj.objectPath.path(); - Q_EMIT servicesReady(servicesList); - } - call->deleteLater(); -} - -void QConnmanManagerInterface::connectNotify(const QMetaMethod &signal) -{ - static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanManagerInterface::propertyChanged); - if (signal == propertyChangedSignal) { - if (!connection().connect(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - QLatin1String(CONNMAN_MANAGER_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant)))) { - qWarning("PropertyChanged not connected"); - } - } - - static const QMetaMethod servicesChangedSignal = QMetaMethod::fromSignal(&QConnmanManagerInterface::servicesChanged); - if (signal == servicesChangedSignal) { - if (!connection().connect(QLatin1String(CONNMAN_SERVICE), - QLatin1String(CONNMAN_MANAGER_PATH), - QLatin1String(CONNMAN_MANAGER_INTERFACE), - QLatin1String("ServicesChanged"), - this,SLOT(onServicesChanged(ConnmanMapList,QList)))) { - qWarning("servicesChanged not connected"); - } - } -} - -void QConnmanManagerInterface::onServicesChanged(const ConnmanMapList &changed, const QList &removed) -{ - servicesList.clear(); //connman list changes order - for (const ConnmanMap &connmanobj : changed) { - const QString svcPath(connmanobj.objectPath.path()); - servicesList << svcPath; - } - - Q_EMIT servicesChanged(changed, removed); -} - -QVariant QConnmanManagerInterface::getProperty(const QString &property) -{ - QVariant var; - var = propertiesCacheMap.value(property); - return var; -} - -QVariantMap QConnmanManagerInterface::getProperties() -{ - if (propertiesCacheMap.isEmpty()) { - QDBusPendingReply reply = call(QLatin1String("GetProperties")); - reply.waitForFinished(); - if (!reply.isError()) { - propertiesCacheMap = reply.value(); - } - } - return propertiesCacheMap; -} - -QString QConnmanManagerInterface::getState() -{ - return getProperty(QStringLiteral("State")).toString(); -} - -bool QConnmanManagerInterface::getOfflineMode() -{ - QVariant var = getProperty(QStringLiteral("OfflineMode")); - return qdbus_cast(var); -} - -QStringList QConnmanManagerInterface::getTechnologies() -{ - if (technologiesMap.isEmpty()) { - QDBusPendingReply reply = call(QLatin1String("GetTechnologies")); - reply.waitForFinished(); - if (!reply.isError()) { - const ConnmanMapList maps = reply.value(); - for (const ConnmanMap &map : maps) { - if (!technologiesMap.contains(map.objectPath.path())) { - technologyAdded(map.objectPath, map.propertyMap); - } - } - } - } - return technologiesMap.keys(); -} - -QStringList QConnmanManagerInterface::getServices() -{ - if (servicesList.isEmpty()) { - QDBusPendingReply reply = call(QLatin1String("GetServices")); - reply.waitForFinished(); - if (!reply.isError()) { - const ConnmanMapList maps = reply.value(); - for (const ConnmanMap &map : maps) - servicesList << map.objectPath.path(); - } - } - return servicesList; -} - -bool QConnmanManagerInterface::requestScan(const QString &type) -{ - bool scanned = false; - if (technologiesMap.isEmpty()) - getTechnologies(); - Q_FOREACH (QConnmanTechnologyInterface *tech, technologiesMap) { - if (tech->type() == type) { - tech->scan(); - scanned = true; - } - } - return scanned; -} - -void QConnmanManagerInterface::technologyAdded(const QDBusObjectPath &path, const QVariantMap &) -{ - if (!technologiesList.contains(path.path())) { - technologiesList << path.path(); - QConnmanTechnologyInterface *tech; - tech = new QConnmanTechnologyInterface(path.path(),this); - technologiesMap.insert(path.path(),tech); - connect(tech,SIGNAL(scanFinished(bool)),this,SIGNAL(scanFinished(bool))); - } -} - -void QConnmanManagerInterface::technologyRemoved(const QDBusObjectPath &path) -{ - if (technologiesList.contains(path.path())) { - technologiesList.removeOne(path.path()); - QConnmanTechnologyInterface * tech = technologiesMap.take(path.path()); - delete tech; - } -} - -QConnmanServiceInterface::QConnmanServiceInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_SERVICE_INTERFACE, - QDBusConnection::systemBus(), parent) -{ - QDBusPendingReply props_reply = asyncCall(QLatin1String("GetProperties")); - - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(props_reply, this); - - QObject::connect(watcher,SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(propertiesReply(QDBusPendingCallWatcher*))); - - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - path(), - QLatin1String(CONNMAN_SERVICE_INTERFACE), - QLatin1String("PropertyChanged"), - this,SLOT(changedProperty(QString,QDBusVariant))); -} - -QConnmanServiceInterface::~QConnmanServiceInterface() -{ -} - -QVariantMap QConnmanServiceInterface::getProperties() -{ - if (propertiesCacheMap.isEmpty()) { - QDBusPendingReply reply = call(QLatin1String("GetProperties")); - reply.waitForFinished(); - if (!reply.isError()) { - propertiesCacheMap = reply.value(); - Q_EMIT propertiesReady(); - } - } - return propertiesCacheMap; -} - -void QConnmanServiceInterface::propertiesReply(QDBusPendingCallWatcher *call) -{ - QDBusPendingReply props_reply = *call; - if (props_reply.isError()) { - qDebug() << props_reply.error().message(); - return; - } - propertiesCacheMap = props_reply.value(); - Q_EMIT propertiesReady(); -} - -void QConnmanServiceInterface::connectNotify(const QMetaMethod &signal) -{ - static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanServiceInterface::propertyChanged); - if (signal == propertyChangedSignal) { - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - path(), - QLatin1String(CONNMAN_SERVICE_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))); - } -} - -void QConnmanServiceInterface::changedProperty(const QString &name, const QDBusVariant &value) -{ - propertiesCacheMap[name] = value.variant(); - if (name == QLatin1String("State")) - Q_EMIT stateChanged(value.variant().toString()); -} - -QVariant QConnmanServiceInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = getProperties(); - var = map.value(property); - return var; -} - -void QConnmanServiceInterface::connect() -{ - asyncCall(QLatin1String("Connect")); -} - -void QConnmanServiceInterface::disconnect() -{ - asyncCall(QLatin1String("Disconnect")); -} - -void QConnmanServiceInterface::remove() -{ - asyncCall(QLatin1String("Remove")); -} - -// properties -QString QConnmanServiceInterface::state() -{ - QVariant var = getProperty(QStringLiteral("State")); - return qdbus_cast(var); -} - -QString QConnmanServiceInterface::lastError() -{ - QVariant var = getProperty(QStringLiteral("Error")); - return qdbus_cast(var); -} - -QString QConnmanServiceInterface::name() -{ - QVariant var = getProperty(QStringLiteral("Name")); - return qdbus_cast(var); -} - -QString QConnmanServiceInterface::type() -{ - QVariant var = getProperty(QStringLiteral("Type")); - return qdbus_cast(var); -} - -QString QConnmanServiceInterface::security() -{ - QVariant var = getProperty(QStringLiteral("Security")); - return qdbus_cast(var); -} - -bool QConnmanServiceInterface::favorite() -{ - QVariant var = getProperty(QStringLiteral("Favorite")); - return qdbus_cast(var); -} - -bool QConnmanServiceInterface::autoConnect() -{ - QVariant var = getProperty(QStringLiteral("AutoConnect")); - return qdbus_cast(var); -} - -bool QConnmanServiceInterface::roaming() -{ - QVariant var = getProperty(QStringLiteral("Roaming")); - return qdbus_cast(var); -} - -QVariantMap QConnmanServiceInterface::ethernet() -{ - QVariant var = getProperty(QStringLiteral("Ethernet")); - return qdbus_cast(var); -} - -QString QConnmanServiceInterface::serviceInterface() -{ - QVariantMap map = ethernet(); - return map.value(QStringLiteral("Interface")).toString(); -} - -bool QConnmanServiceInterface::isOfflineMode() -{ - QVariant var = getProperty(QStringLiteral("OfflineMode")); - return qdbus_cast(var); -} - -QStringList QConnmanServiceInterface::services() -{ - QVariant var = getProperty(QStringLiteral("Services")); - return qdbus_cast(var); -} - -////////////////////////// -QConnmanTechnologyInterface::QConnmanTechnologyInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_TECHNOLOGY_INTERFACE, - QDBusConnection::systemBus(), parent) -{ -} - -QConnmanTechnologyInterface::~QConnmanTechnologyInterface() -{ -} - -void QConnmanTechnologyInterface::connectNotify(const QMetaMethod &signal) -{ - static const QMetaMethod propertyChangedSignal = QMetaMethod::fromSignal(&QConnmanTechnologyInterface::propertyChanged); - if (signal == propertyChangedSignal) { - QDBusConnection::systemBus().connect(QLatin1String(CONNMAN_SERVICE), - path(), - QLatin1String(CONNMAN_TECHNOLOGY_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))); - } -} - -QVariantMap QConnmanTechnologyInterface::properties() -{ - if (propertiesMap.isEmpty()) { - QDBusPendingReply reply = call(QLatin1String("GetProperties")); - reply.waitForFinished(); - propertiesMap = reply.value(); - } - return propertiesMap; -} - -QVariant QConnmanTechnologyInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = properties(); - var = map.value(property); - return var; -} - -QString QConnmanTechnologyInterface::type() -{ - QVariant var = getProperty(QStringLiteral("Type")); - return qdbus_cast(var); -} - -void QConnmanTechnologyInterface::scan() -{ - QDBusPendingReply<> reply = asyncCall(QLatin1String("Scan")); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); - connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(scanReply(QDBusPendingCallWatcher*))); -} - -void QConnmanTechnologyInterface::scanReply(QDBusPendingCallWatcher *call) -{ - QDBusPendingReply<> props_reply = *call; - if (props_reply.isError()) { - qDebug() << props_reply.error().message(); - } - Q_EMIT scanFinished(props_reply.isError()); - call->deleteLater(); -} - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS diff --git a/src/plugins/bearer/connman/qconnmanservice_linux_p.h b/src/plugins/bearer/connman/qconnmanservice_linux_p.h deleted file mode 100644 index 790325f9a1..0000000000 --- a/src/plugins/bearer/connman/qconnmanservice_linux_p.h +++ /dev/null @@ -1,230 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCONNMANSERVICE_H -#define QCONNMANSERVICE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifndef QT_NO_DBUS - -#ifndef __CONNMAN_DBUS_H - -#define CONNMAN_SERVICE "net.connman" -#define CONNMAN_PATH "/net/connman" -#define CONNMAN_MANAGER_INTERFACE CONNMAN_SERVICE ".Manager" -#define CONNMAN_MANAGER_PATH "/" -#define CONNMAN_SERVICE_INTERFACE CONNMAN_SERVICE ".Service" -#define CONNMAN_TECHNOLOGY_INTERFACE CONNMAN_SERVICE ".Technology" -#endif - -QT_BEGIN_NAMESPACE - -struct ConnmanMap { - QDBusObjectPath objectPath; - QVariantMap propertyMap; -}; -Q_DECLARE_TYPEINFO(ConnmanMap, Q_MOVABLE_TYPE); // QDBusObjectPath is movable, but cannot be - // marked as such until Qt 6 -typedef QVector ConnmanMapList; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMap)) -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMapList)) - -QT_BEGIN_NAMESPACE - -QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &obj); -const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &obj); - -class QConnmanTechnologyInterface; -class QConnmanServiceInterface; - -class QConnmanManagerInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QConnmanManagerInterface( QObject *parent = nullptr); - ~QConnmanManagerInterface(); - - QDBusObjectPath path() const; - QVariantMap getProperties(); - - QString getState(); - bool getOfflineMode(); - QStringList getTechnologies(); - QStringList getServices(); - bool requestScan(const QString &type); - - QHash technologiesMap; - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void stateChanged(const QString &); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void servicesChanged(const ConnmanMapList&, const QList &); - - void servicesReady(const QStringList &); - void scanFinished(bool error); - -protected: - void connectNotify(const QMetaMethod &signal); - QVariant getProperty(const QString &); - -private: - QVariantMap propertiesCacheMap; - QStringList servicesList; - QStringList technologiesList; - -private slots: - void onServicesChanged(const ConnmanMapList&, const QList &); - void changedProperty(const QString &, const QDBusVariant &value); - - void propertiesReply(QDBusPendingCallWatcher *call); - void servicesReply(QDBusPendingCallWatcher *call); - - void technologyAdded(const QDBusObjectPath &technology, const QVariantMap &properties); - void technologyRemoved(const QDBusObjectPath &technology); - -}; - -class QConnmanServiceInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - explicit QConnmanServiceInterface(const QString &dbusPathName,QObject *parent = nullptr); - ~QConnmanServiceInterface(); - - QVariantMap getProperties(); - // clearProperty - void connect(); - void disconnect(); - void remove(); - -// properties - QString state(); - QString lastError(); - QString name(); - QString type(); - QString security(); - bool favorite(); - bool autoConnect(); - bool roaming(); - QVariantMap ethernet(); - QString serviceInterface(); - - bool isOfflineMode(); - QStringList services(); - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void propertiesReady(); - void stateChanged(const QString &state); - -protected: - void connectNotify(const QMetaMethod &signal); - QVariant getProperty(const QString &); -private: - QVariantMap propertiesCacheMap; -private slots: - void propertiesReply(QDBusPendingCallWatcher *call); - void changedProperty(const QString &, const QDBusVariant &value); - -}; - -class QConnmanTechnologyInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - explicit QConnmanTechnologyInterface(const QString &dbusPathName,QObject *parent = nullptr); - ~QConnmanTechnologyInterface(); - - QString type(); - - void scan(); -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void scanFinished(bool error); -protected: - void connectNotify(const QMetaMethod &signal); - QVariant getProperty(const QString &); -private: - QVariantMap properties(); - QVariantMap propertiesMap; -private Q_SLOTS: - void scanReply(QDBusPendingCallWatcher *call); - -}; - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS - -#endif //QCONNMANSERVICE_H diff --git a/src/plugins/bearer/corewlan/CMakeLists.txt b/src/plugins/bearer/corewlan/CMakeLists.txt deleted file mode 100644 index 31e70cc938..0000000000 --- a/src/plugins/bearer/corewlan/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -# Generated from corewlan.pro. - -##################################################################### -## QCoreWlanEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QCoreWlanEnginePlugin - OUTPUT_NAME qcorewlanbearer - TYPE bearer - SOURCES - main.cpp - qcorewlanengine.h qcorewlanengine.mm - PUBLIC_LIBRARIES - ${FWFoundation} - ${FWSystemConfiguration} - Qt::CorePrivate - Qt::NetworkPrivate -) - -#### Keys ignored in scope 1:.:.:corewlan.pro:: -# OTHER_FILES = "corewlan.json" - -## Scopes: -##################################################################### - -qt_extend_target(QCoreWlanEnginePlugin CONDITION QT_FEATURE_corewlan - PUBLIC_LIBRARIES - ${FWCoreWLAN} - ${FWSecurity} -) diff --git a/src/plugins/bearer/corewlan/corewlan.json b/src/plugins/bearer/corewlan/corewlan.json deleted file mode 100644 index b43519ea90..0000000000 --- a/src/plugins/bearer/corewlan/corewlan.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "corewlan" ] -} diff --git a/src/plugins/bearer/corewlan/corewlan.pro b/src/plugins/bearer/corewlan/corewlan.pro deleted file mode 100644 index 4f08eaba71..0000000000 --- a/src/plugins/bearer/corewlan/corewlan.pro +++ /dev/null @@ -1,20 +0,0 @@ -TARGET = qcorewlanbearer - -QT = core-private network-private -LIBS += -framework Foundation -framework SystemConfiguration - -qtConfig(corewlan) { - LIBS += -framework CoreWLAN -framework Security -} - -HEADERS += qcorewlanengine.h - -SOURCES += main.cpp - -OBJECTIVE_SOURCES += qcorewlanengine.mm - -OTHER_FILES += corewlan.json - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QCoreWlanEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/corewlan/main.cpp b/src/plugins/bearer/corewlan/main.cpp deleted file mode 100644 index c6663d155c..0000000000 --- a/src/plugins/bearer/corewlan/main.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qcorewlanengine.h" - -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QCoreWlanEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "corewlan.json") - -public: - QCoreWlanEnginePlugin(); - ~QCoreWlanEnginePlugin(); - - QBearerEngine *create(const QString &key) const; -}; - -QCoreWlanEnginePlugin::QCoreWlanEnginePlugin() -{ -} - -QCoreWlanEnginePlugin::~QCoreWlanEnginePlugin() -{ -} - -QBearerEngine *QCoreWlanEnginePlugin::create(const QString &key) const -{ - if (key == QLatin1String("corewlan")) - return new QCoreWlanEngine; - else - return 0; -} - -QT_END_NAMESPACE - -#include "main.moc" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.h b/src/plugins/bearer/corewlan/qcorewlanengine.h deleted file mode 100644 index 8775474c09..0000000000 --- a/src/plugins/bearer/corewlan/qcorewlanengine.h +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCOREWLANENGINE_H -#define QCOREWLANENGINE_H - -#include - -#include -#include -#include -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -class QScanThread; - -class QCoreWlanEngine : public QBearerEngineImpl -{ - friend class QScanThread; - Q_OBJECT - -public: - QCoreWlanEngine(QObject *parent = 0); - ~QCoreWlanEngine(); - - QString getInterfaceFromId(const QString &id); - bool hasIdentifier(const QString &id); - - void connectToId(const QString &id); - void disconnectFromId(const QString &id); - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id); - - quint64 bytesWritten(const QString &id); - quint64 bytesReceived(const QString &id); - quint64 startTime(const QString &id); - - QNetworkConfigurationManager::Capabilities capabilities() const; - - QNetworkSessionPrivate *createSessionBackend(); - - QNetworkConfigurationPrivatePointer defaultConfiguration(); - - bool requiresPolling() const; - -private Q_SLOTS: - void doRequestUpdate(); - void networksChanged(); - void checkDisconnect(); - -private: - bool isWifiReady(const QString &dev); - QList foundConfigurations; - - SCDynamicStoreRef storeSession; - CFRunLoopSourceRef runloopSource; - bool hasWifi; - bool scanning; - QScanThread *scanThread; - - quint64 getBytes(const QString &interfaceName,bool b); - QString disconnectedInterfaceString; - -protected: - void startNetworkChangeLoop(); - -}; - -class QScanThread : public QThread -{ - Q_OBJECT - -public: - QScanThread(QObject *parent = 0); - ~QScanThread(); - - void quit(); - QList getConfigurations(); - QString interfaceName; - QMap configurationInterface; - void getUserConfigurations(); - QString getNetworkNameFromSsid(const QString &ssid) const; - QString getSsidFromNetworkName(const QString &name) const; - bool isKnownSsid(const QString &ssid) const; - QMap > userProfiles; - -signals: - void networksChanged(); - -protected: - void run(); - -private: - QList fetchedConfigurations; - mutable QMutex mutex; - QStringList foundNetwork(const QString &id, const QString &ssid, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose); - -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm deleted file mode 100644 index 01c6df74d5..0000000000 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ /dev/null @@ -1,862 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qcorewlanengine.h" -#include - -#include - -#include -#include -#include -#include - -#include - -#include -#ifndef QT_NO_BEARERMANAGEMENT - -extern "C" { // Otherwise it won't find CWKeychain* symbols at link time -#import -} - -#include "private/qcore_mac_p.h" - -#include -#include - -@interface QT_MANGLE_NAMESPACE(QNSListener) : NSObject -@property (assign) QCoreWlanEngine* engine; -@end -QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSListener); - -@implementation QNSListener { - NSNotificationCenter *notificationCenter; - CWWiFiClient *client; - QCoreWlanEngine *engine; - NSLock *locker; -} - -- (instancetype)init -{ - if ((self = [super init])) { - [locker lock]; - QMacAutoReleasePool pool; - notificationCenter = [NSNotificationCenter defaultCenter]; - client = [CWWiFiClient sharedWiFiClient]; - client.delegate = self; - [client startMonitoringEventWithType:CWEventTypePowerDidChange error:nil]; - [locker unlock]; - } - return self; -} - -static QNSListener *listener = 0; - --(void)dealloc -{ - client.delegate = nil; - listener = nil; - [super dealloc]; -} - --(void)setEngine:(QCoreWlanEngine *)coreEngine -{ - [locker lock]; - if(!engine) - engine = coreEngine; - [locker unlock]; -} - --(QCoreWlanEngine *)engine -{ - return engine; -} - --(void)remove -{ - [locker lock]; - [client stopMonitoringAllEventsAndReturnError:nil]; - [locker unlock]; -} - -- (void)powerStateDidChangeForWiFiInterfaceWithName:(NSString *)interfaceName -{ - Q_UNUSED(interfaceName); - engine->requestUpdate(); -} -@end - - -QT_BEGIN_NAMESPACE - -void networkChangeCallback(SCDynamicStoreRef/* store*/, CFArrayRef changedKeys, void *info) -{ - for ( long i = 0; i < CFArrayGetCount(changedKeys); i++) { - - QString changed = QString::fromCFString((CFStringRef)CFArrayGetValueAtIndex(changedKeys, i)); - if( changed.contains("/Network/Global/IPv4")) { - QCoreWlanEngine* wlanEngine = static_cast(info); - wlanEngine->requestUpdate(); - } - } - return; -} - - -QScanThread::QScanThread(QObject *parent) - :QThread(parent) -{ -} - -QScanThread::~QScanThread() -{ -} - -void QScanThread::quit() -{ - wait(); -} - -void QScanThread::run() -{ - QMacAutoReleasePool pool; - QStringList found; - mutex.lock(); - CWInterface *currentInterface = [[CWWiFiClient sharedWiFiClient] - interfaceWithName:interfaceName.toNSString()]; - mutex.unlock(); - const bool currentInterfaceServiceActive = currentInterface.serviceActive; - - if (currentInterface.powerOn) { - NSError *err = nil; - - NSSet* apSet = [currentInterface scanForNetworksWithName:nil error:&err]; - - if (!err) { - for (CWNetwork *apNetwork in apSet) { - const QString networkSsid = QString::fromNSString([apNetwork ssid]); - const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid)); - found.append(id); - - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; - bool known = isKnownSsid(networkSsid); - if (currentInterfaceServiceActive) { - if (networkSsid == QString::fromNSString([currentInterface ssid])) { - state = QNetworkConfiguration::Active; - } - } - if (state == QNetworkConfiguration::Undefined) { - if(known) { - state = QNetworkConfiguration::Discovered; - } else { - state = QNetworkConfiguration::Undefined; - } - } - QNetworkConfiguration::Purpose purpose = QNetworkConfiguration::UnknownPurpose; - if ([apNetwork supportsSecurity:kCWSecurityNone]) { - purpose = QNetworkConfiguration::PublicPurpose; - } else { - purpose = QNetworkConfiguration::PrivatePurpose; - } - - found.append(foundNetwork(id, networkSsid, state, interfaceName, purpose)); - - } - } - } - // add known configurations that are not around. - for (auto i = userProfiles.cbegin(), end = userProfiles.cend(); i != end; ++i) { - - QString networkName = i.key(); - const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkName)); - - if(!found.contains(id)) { - QString networkSsid = getSsidFromNetworkName(networkName); - const QString ssidId = QString::number(qHash(QLatin1String("corewlan:") + networkSsid)); - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; - QString interfaceName; - if (!i.value().isEmpty()) - interfaceName = i.value().last(); - - if (currentInterfaceServiceActive) { - if (networkSsid == QString::fromNSString([currentInterface ssid])) { - state = QNetworkConfiguration::Active; - } - } - if(state == QNetworkConfiguration::Undefined) { - if( userProfiles.contains(networkName) - && found.contains(ssidId)) { - state = QNetworkConfiguration::Discovered; - } - } - - if(state == QNetworkConfiguration::Undefined) { - state = QNetworkConfiguration::Defined; - } - - found.append(foundNetwork(id, networkName, state, interfaceName, QNetworkConfiguration::UnknownPurpose)); - } - } - emit networksChanged(); -} - -QStringList QScanThread::foundNetwork(const QString &id, const QString &name, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose) -{ - QStringList found; - QMutexLocker locker(&mutex); - QNetworkConfigurationPrivate *ptr = new QNetworkConfigurationPrivate; - - ptr->name = name; - ptr->isValid = true; - ptr->id = id; - ptr->state = state; - ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearerType = QNetworkConfiguration::BearerWLAN; - ptr->purpose = purpose; - - fetchedConfigurations.append( ptr); - configurationInterface.insert(ptr->id, interfaceName); - - locker.unlock(); - locker.relock(); - found.append(id); - return found; -} - -QList QScanThread::getConfigurations() -{ - QMutexLocker locker(&mutex); - return qExchange(fetchedConfigurations, {}); -} - -void QScanThread::getUserConfigurations() -{ - QMutexLocker locker(&mutex); - - QMacAutoReleasePool pool; - userProfiles.clear(); - - NSArray *wifiInterfaces = [CWWiFiClient interfaceNames]; - for (NSString *ifName in wifiInterfaces) { - - CWInterface *wifiInterface = [[CWWiFiClient sharedWiFiClient] interfaceWithName:ifName]; - - NSString *nsInterfaceName = wifiInterface.ssid; -// add user configured system networks - SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, (CFStringRef)@"Qt corewlan", nil, nil); - NSDictionary * airportPlist = (NSDictionary *)SCDynamicStoreCopyValue(dynRef, (CFStringRef)[NSString stringWithFormat:@"Setup:/Network/Interface/%@/AirPort", nsInterfaceName]); - CFRelease(dynRef); - if(airportPlist != nil) { - NSDictionary *prefNetDict = [airportPlist objectForKey:@"PreferredNetworks"]; - - NSArray *thisSsidarray = [prefNetDict valueForKey:@"SSID_STR"]; - for (NSString *ssidkey in thisSsidarray) { - QString thisSsid = QString::fromNSString(ssidkey); - if(!userProfiles.contains(thisSsid)) { - QMap map; - map.insert(thisSsid, QString::fromNSString(nsInterfaceName)); - userProfiles.insert(thisSsid, map); - } - } - CFRelease(airportPlist); - } - - // remembered networks - CWConfiguration *userConfig = [wifiInterface configuration]; - NSOrderedSet *networkProfiles = [userConfig networkProfiles]; - NSEnumerator *enumerator = [networkProfiles objectEnumerator]; - CWNetworkProfile *wProfile; - while ((wProfile = [enumerator nextObject])) { - QString networkName = QString::fromNSString([wProfile ssid]); - - if (!userProfiles.contains(networkName)) { - QMap map; - map.insert(networkName, QString::fromNSString(nsInterfaceName)); - userProfiles.insert(networkName, map); - } - } - - // 802.1X user profiles - QString userProfilePath = QDir::homePath() + "/Library/Preferences/com.apple.eap.profiles.plist"; - NSDictionary* eapDict = [[[NSDictionary alloc] initWithContentsOfFile:userProfilePath.toNSString()] autorelease]; - if(eapDict != nil) { - NSString *profileStr= @"Profiles"; - NSString *nameStr = @"UserDefinedName"; - NSString *networkSsidStr = @"Wireless Network"; - for (id profileKey in eapDict) { - if ([profileStr isEqualToString:profileKey]) { - NSDictionary *itemDict = [eapDict objectForKey:profileKey]; - for (id itemKey in itemDict) { - - NSInteger dictSize = [itemKey count]; - id objects[dictSize]; - id keys[dictSize]; - - [itemKey getObjects:objects andKeys:keys]; - QString networkName; - QString ssid; - for (int i = 0; i < dictSize; i++) { - if([nameStr isEqualToString:keys[i]]) { - networkName = QString::fromNSString(objects[i]); - } - if ([networkSsidStr isEqualToString:keys[i]]) { - ssid = QString::fromNSString(objects[i]); - } - if (!userProfiles.contains(networkName) - && !ssid.isEmpty()) { - QMap map; - map.insert(ssid, QString::fromNSString(nsInterfaceName)); - userProfiles.insert(networkName, map); - } - } - } - } - } - } - } -} - -QString QScanThread::getSsidFromNetworkName(const QString &name) const -{ - QMutexLocker locker(&mutex); - - for (auto i = userProfiles.cbegin(), end = userProfiles.cend(); i != end; ++i) { - for (auto ij = i.value().cbegin(), end = i.value().cend(); ij != end; ++ij) { - const QString networkNameHash = QString::number(qHash(QLatin1String("corewlan:") +i.key())); - if(name == i.key() || name == networkNameHash) { - return ij.key(); - } - } - } - return QString(); -} - -QString QScanThread::getNetworkNameFromSsid(const QString &ssid) const -{ - QMutexLocker locker(&mutex); - - for (auto i = userProfiles.cbegin(), end = userProfiles.cend(); i != end; ++i) { - if (i.value().contains(ssid)) - return i.key(); - } - return QString(); -} - -bool QScanThread::isKnownSsid(const QString &ssid) const -{ - QMutexLocker locker(&mutex); - - for (auto i = userProfiles.cbegin(), end = userProfiles.cend(); i != end; ++i) { - if (i.value().contains(ssid)) - return true; - } - return false; -} - - -QCoreWlanEngine::QCoreWlanEngine(QObject *parent) -: QBearerEngineImpl(parent), scanThread(0) -{ - scanThread = new QScanThread(this); - connect(scanThread, SIGNAL(networksChanged()), - this, SLOT(networksChanged())); -} - -QCoreWlanEngine::~QCoreWlanEngine() -{ - scanThread->wait(); - - qDeleteAll(qExchange(foundConfigurations, {})); - [listener remove]; - [listener release]; -} - -void QCoreWlanEngine::initialize() -{ - QMutexLocker locker(&mutex); - QMacAutoReleasePool pool; - - if ([[CWWiFiClient interfaceNames] count] > 0 && !listener) { - listener = [QNSListener alloc] init]; - listener.engine = this; - hasWifi = true; - } else { - hasWifi = false; - } - storeSession = NULL; - - startNetworkChangeLoop(); -} - - -QString QCoreWlanEngine::getInterfaceFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - return scanThread->configurationInterface.value(id); -} - -bool QCoreWlanEngine::hasIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - - return scanThread->configurationInterface.contains(id); -} - -void QCoreWlanEngine::connectToId(const QString &id) -{ - QMutexLocker locker(&mutex); - QMacAutoReleasePool pool; - QString interfaceString = getInterfaceFromId(id); - - CWInterface *wifiInterface = - [[CWWiFiClient sharedWiFiClient] interfaceWithName:interfaceString.toNSString()]; - - if (wifiInterface.powerOn) { - NSError *err = nil; - QString wantedSsid; - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - const QString idHash = QString::number(qHash(QLatin1String("corewlan:") + ptr->name)); - const QString idHash2 = QString::number(qHash(QLatin1String("corewlan:") + scanThread->getNetworkNameFromSsid(ptr->name))); - - QString wantedNetwork; - for (auto i = scanThread->userProfiles.cbegin(), end = scanThread->userProfiles.cend(); i != end; ++i) { - wantedNetwork = i.key(); - const QString networkNameHash = QString::number(qHash(QLatin1String("corewlan:") + wantedNetwork)); - if (id == networkNameHash) { - wantedSsid = scanThread->getSsidFromNetworkName(wantedNetwork); - break; - } - } - - NSSet *scanSet = [wifiInterface scanForNetworksWithName:wantedSsid.toNSString() error:&err]; - - if(!err) { - for (CWNetwork *apNetwork in scanSet) { - NSData *ssidData = [apNetwork ssidData]; - bool result = false; - - SecIdentityRef identity = 0; - // Check first whether we require IEEE 802.1X authentication for the wanted SSID - if (CWKeychainCopyWiFiEAPIdentity(kCWKeychainDomainSystem, ssidData, &identity) == errSecSuccess) { - NSString *username = nil; - NSString *password = nil; - if (CWKeychainFindWiFiEAPUsernameAndPassword(kCWKeychainDomainSystem, ssidData, &username, &password) == errSecSuccess) { - result = [wifiInterface associateToEnterpriseNetwork:apNetwork - identity:identity username:(NSString *)username password:(NSString *)password - error:&err]; - [username release]; - [password release]; - } - CFRelease(identity); - } else { - NSString *password = nil; - if (CWKeychainFindWiFiPassword(kCWKeychainDomainSystem, ssidData, &password) == errSecSuccess) { - result = [wifiInterface associateToNetwork:apNetwork password:(NSString *)password error:&err]; - [password release]; - } - } - - if (!err) { - if (!result) { - emit connectionError(id, ConnectError); - } else { - return; - } - } else { - qDebug() <<"associate ERROR"<< QString::fromNSString([err localizedDescription ]); - } - } //end scan network - } else { - qDebug() <<"scan ERROR"<< QString::fromNSString([err localizedDescription ]); - } - emit connectionError(id, InterfaceLookupError); - } - - locker.unlock(); - emit connectionError(id, InterfaceLookupError); -} - -void QCoreWlanEngine::disconnectFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QString interfaceString = getInterfaceFromId(id); - if (interfaceString.isEmpty()) { - locker.unlock(); - emit connectionError(id, DisconnectionError); - return; - } - QMacAutoReleasePool pool; - - CWInterface *wifiInterface = - [[CWWiFiClient sharedWiFiClient] interfaceWithName:interfaceString.toNSString()]; - disconnectedInterfaceString = interfaceString; - - [wifiInterface disassociate]; - - QTimer::singleShot(1000, this,SLOT(checkDisconnect())); -} - -void QCoreWlanEngine::checkDisconnect() -{ - QMutexLocker locker(&mutex); - if (!disconnectedInterfaceString.isEmpty()) { - QMacAutoReleasePool pool; - - CWInterface *wifiInterface = [[CWWiFiClient sharedWiFiClient] - interfaceWithName:disconnectedInterfaceString.toNSString()]; - - const QString networkSsid = QString::fromNSString([wifiInterface ssid]); - if (!networkSsid.isEmpty()) { - const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid)); - locker.unlock(); - emit connectionError(id, DisconnectionError); - locker.relock(); - } - disconnectedInterfaceString.clear(); - } -} - -void QCoreWlanEngine::requestUpdate() -{ - scanThread->getUserConfigurations(); - doRequestUpdate(); -} - -void QCoreWlanEngine::doRequestUpdate() -{ - QMutexLocker locker(&mutex); - - QMacAutoReleasePool pool; - - NSArray *wifiInterfaces = [CWWiFiClient interfaceNames]; - for (NSString *ifName in wifiInterfaces) { - scanThread->interfaceName = QString::fromNSString(ifName); - scanThread->start(); - } - locker.unlock(); - if ([wifiInterfaces count] == 0) - networksChanged(); -} - -bool QCoreWlanEngine::isWifiReady(const QString &wifiDeviceName) -{ - QMutexLocker locker(&mutex); - bool haswifi = false; - if(hasWifi) { - QMacAutoReleasePool pool; - CWInterface *defaultInterface = [[CWWiFiClient sharedWiFiClient] - interfaceWithName:wifiDeviceName.toNSString()]; - if (defaultInterface.powerOn) { - haswifi = true; - } - } - return haswifi; -} - - -QNetworkSession::State QCoreWlanEngine::sessionStateForId(const QString &id) -{ - QMutexLocker locker(&mutex); - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr) - return QNetworkSession::Invalid; - - if (!ptr->isValid) { - return QNetworkSession::Invalid; - } else if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - return QNetworkSession::Connected; - } else if ((ptr->state & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == - QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -QNetworkConfigurationManager::Capabilities QCoreWlanEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming; -} - -void QCoreWlanEngine::startNetworkChangeLoop() -{ - - SCDynamicStoreContext dynStoreContext = { 0, this/*(void *)storeSession*/, NULL, NULL, NULL }; - storeSession = SCDynamicStoreCreate(NULL, - CFSTR("networkChangeCallback"), - networkChangeCallback, - &dynStoreContext); - if (!storeSession ) { - qWarning() << "could not open dynamic store: error:" << SCErrorString(SCError()); - return; - } - - CFMutableArrayRef notificationKeys; - notificationKeys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); - CFMutableArrayRef patternsArray; - patternsArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); - - CFStringRef storeKey; - storeKey = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, - kSCDynamicStoreDomainState, - kSCEntNetIPv4); - CFArrayAppendValue(notificationKeys, storeKey); - CFRelease(storeKey); - - storeKey = SCDynamicStoreKeyCreateNetworkServiceEntity(NULL, - kSCDynamicStoreDomainState, - kSCCompAnyRegex, - kSCEntNetIPv4); - CFArrayAppendValue(patternsArray, storeKey); - CFRelease(storeKey); - - if (!SCDynamicStoreSetNotificationKeys(storeSession , notificationKeys, patternsArray)) { - qWarning() << "register notification error:"<< SCErrorString(SCError()); - CFRelease(storeSession ); - CFRelease(notificationKeys); - CFRelease(patternsArray); - return; - } - CFRelease(notificationKeys); - CFRelease(patternsArray); - - runloopSource = SCDynamicStoreCreateRunLoopSource(NULL, storeSession , 0); - if (!runloopSource) { - qWarning() << "runloop source error:"<< SCErrorString(SCError()); - CFRelease(storeSession ); - return; - } - - CFRunLoopAddSource(CFRunLoopGetCurrent(), runloopSource, kCFRunLoopDefaultMode); - return; -} - -QNetworkSessionPrivate *QCoreWlanEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QCoreWlanEngine::defaultConfiguration() -{ - return QNetworkConfigurationPrivatePointer(); -} - -bool QCoreWlanEngine::requiresPolling() const -{ - return true; -} - -void QCoreWlanEngine::networksChanged() -{ - QMutexLocker locker(&mutex); - - QStringList previous = accessPointConfigurations.keys(); - - QList foundConfigurations = scanThread->getConfigurations(); - while (!foundConfigurations.isEmpty()) { - QNetworkConfigurationPrivate *cpPriv = foundConfigurations.takeFirst(); - - previous.removeAll(cpPriv->id); - - if (accessPointConfigurations.contains(cpPriv->id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(cpPriv->id); - - bool changed = false; - - ptr->mutex.lock(); - - if (ptr->isValid != cpPriv->isValid) { - ptr->isValid = cpPriv->isValid; - changed = true; - } - - if (ptr->name != cpPriv->name) { - ptr->name = cpPriv->name; - changed = true; - } - - if (ptr->bearerType != cpPriv->bearerType) { - ptr->bearerType = cpPriv->bearerType; - changed = true; - } - - if (ptr->state != cpPriv->state) { - ptr->state = cpPriv->state; - changed = true; - } - - ptr->mutex.unlock(); - - if (changed) { - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } - - delete cpPriv; - } else { - QNetworkConfigurationPrivatePointer ptr(cpPriv); - - accessPointConfigurations.insert(ptr->id, ptr); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - } - } - - while (!previous.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.take(previous.takeFirst()); - - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - - locker.unlock(); - emit updateCompleted(); - -} - -quint64 QCoreWlanEngine::bytesWritten(const QString &id) -{ - QMutexLocker locker(&mutex); - const QString interfaceStr = getInterfaceFromId(id); - return getBytes(interfaceStr,false); -} - -quint64 QCoreWlanEngine::bytesReceived(const QString &id) -{ - QMutexLocker locker(&mutex); - const QString interfaceStr = getInterfaceFromId(id); - return getBytes(interfaceStr,true); -} - -quint64 QCoreWlanEngine::startTime(const QString &identifier) -{ - QMutexLocker locker(&mutex); - QMacAutoReleasePool pool; - quint64 timestamp = 0; - - NSString *filePath = @"/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist"; - NSDictionary* plistDict = [[[NSDictionary alloc] initWithContentsOfFile:filePath] autorelease]; - if(plistDict == nil) - return timestamp; - NSString *input = @"KnownNetworks"; - NSString *timeStampStr = @"_timeStamp"; - - NSString *ssidStr = @"SSID_STR"; - - for (id key in plistDict) { - if ([input isEqualToString:key]) { - - NSDictionary *knownNetworksDict = [plistDict objectForKey:key]; - if(knownNetworksDict == nil) - return timestamp; - for (id networkKey in knownNetworksDict) { - bool isFound = false; - NSDictionary *itemDict = [knownNetworksDict objectForKey:networkKey]; - if(itemDict == nil) - return timestamp; - NSInteger dictSize = [itemDict count]; - id objects[dictSize]; - id keys[dictSize]; - - [itemDict getObjects:objects andKeys:keys]; - bool ok = false; - for(int i = 0; i < dictSize; i++) { - if([ssidStr isEqualToString:keys[i]]) { - const QString ident = QString::number(qHash(QLatin1String("corewlan:") + QString::fromNSString(objects[i]))); - if(ident == identifier) { - ok = true; - } - } - if(ok && [timeStampStr isEqualToString:keys[i]]) { - timestamp = (quint64)[objects[i] timeIntervalSince1970]; - isFound = true; - break; - } - } - if(isFound) - break; - } - } - } - return timestamp; -} - -quint64 QCoreWlanEngine::getBytes(const QString &interfaceName, bool b) -{ - struct ifaddrs *ifAddressList, *ifAddress; - struct if_data *if_data; - - quint64 bytes = 0; - ifAddressList = nil; - if(getifaddrs(&ifAddressList) == 0) { - for(ifAddress = ifAddressList; ifAddress; ifAddress = ifAddress->ifa_next) { - if(interfaceName == ifAddress->ifa_name) { - if_data = (struct if_data*)ifAddress->ifa_data; - if(b) { - bytes = if_data->ifi_ibytes; - break; - } else { - bytes = if_data->ifi_obytes; - break; - } - } - } - freeifaddrs(ifAddressList); - } - return bytes; -} - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/bearer/generic/CMakeLists.txt b/src/plugins/bearer/generic/CMakeLists.txt deleted file mode 100644 index 6d65346b57..0000000000 --- a/src/plugins/bearer/generic/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -# Generated from generic.pro. - -##################################################################### -## QGenericEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QGenericEnginePlugin - OUTPUT_NAME qgenericbearer - TYPE bearer - SOURCES - ../platformdefs_win.h - main.cpp - qgenericengine.cpp qgenericengine.h - PUBLIC_LIBRARIES - Qt::CorePrivate - Qt::NetworkPrivate -) - -#### Keys ignored in scope 1:.:.:generic.pro:: -# OTHER_FILES = "generic.json" - -## Scopes: -##################################################################### - -qt_extend_target(QGenericEnginePlugin CONDITION WIN32 AND NOT WINRT - PUBLIC_LIBRARIES - iphlpapi -) diff --git a/src/plugins/bearer/generic/generic.json b/src/plugins/bearer/generic/generic.json deleted file mode 100644 index e9357f4c72..0000000000 --- a/src/plugins/bearer/generic/generic.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "generic" ] -} diff --git a/src/plugins/bearer/generic/generic.pro b/src/plugins/bearer/generic/generic.pro deleted file mode 100644 index 14b858b301..0000000000 --- a/src/plugins/bearer/generic/generic.pro +++ /dev/null @@ -1,16 +0,0 @@ -TARGET = qgenericbearer - -QT = core-private network-private - -HEADERS += qgenericengine.h \ - ../platformdefs_win.h -SOURCES += qgenericengine.cpp \ - main.cpp - -OTHER_FILES += generic.json - -win32:!winrt:LIBS += -liphlpapi - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QGenericEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/generic/main.cpp b/src/plugins/bearer/generic/main.cpp deleted file mode 100644 index 82a9ce97f4..0000000000 --- a/src/plugins/bearer/generic/main.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgenericengine.h" - -#include - -#include - -QT_BEGIN_NAMESPACE - -class QGenericEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "generic.json") - -public: - QGenericEnginePlugin(); - ~QGenericEnginePlugin(); - - QBearerEngine *create(const QString &key) const override; -}; - -QGenericEnginePlugin::QGenericEnginePlugin() -{ -} - -QGenericEnginePlugin::~QGenericEnginePlugin() -{ -} - -QBearerEngine *QGenericEnginePlugin::create(const QString &key) const -{ - if (key == QLatin1String("generic")) - return new QGenericEngine; - else - return 0; -} - -QT_END_NAMESPACE - -#include "main.moc" diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp deleted file mode 100644 index a5fba15789..0000000000 --- a/src/plugins/bearer/generic/qgenericengine.cpp +++ /dev/null @@ -1,446 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -// see comment in ../platformdefs_win.h. -#define WIN32_LEAN_AND_MEAN 1 - -#include "qgenericengine.h" -#include - -#include - -#include -#include -#include -#include - -#include -#include - -#if defined(Q_OS_WIN32) -// PMIB_TCPTABLE2 is only available since Vista -#if _WIN32_WINNT < 0x0601 -# undef _WIN32_WINNT -# define _WIN32_WINNT 0x0601 -#endif // _WIN32_WINNT < 0x0601 -#include "../platformdefs_win.h" -#include -#endif - -#ifdef Q_OS_WINRT -#include - -#include -#include -#include -#include - -using namespace Microsoft::WRL; -using namespace Microsoft::WRL::Wrappers; -using namespace ABI::Windows::Foundation; -using namespace ABI::Windows::Foundation::Collections; -using namespace ABI::Windows::Networking; -using namespace ABI::Windows::Networking::Connectivity; -#endif // Q_OS_WINRT - -// needed as interface is used as parameter name in qGetInterfaceType -#undef interface - -#ifdef Q_OS_LINUX -#include -#include -#include -#include -#include -#endif - -QT_BEGIN_NAMESPACE - -#ifndef QT_NO_NETWORKINTERFACE -static QNetworkConfiguration::BearerType qGetInterfaceType(const QString &interface) -{ -#if defined(Q_OS_WIN32) - // QNetworkInterface::name returns a more friendly name on Windows. That name is not - // accepted as an identifier for CreateFile so we have to obtain the Luid. - std::wstring buf = interface.toStdWString(); - if (buf.size() == 0) - return QNetworkConfiguration::BearerUnknown; - - NET_LUID luid; - NETIO_STATUS status = ConvertInterfaceNameToLuidW(buf.c_str(), &luid); - if (status != NO_ERROR) - return QNetworkConfiguration::BearerUnknown; - - switch (luid.Info.IfType) { - case IF_TYPE_ETHERNET_CSMACD: - case IF_TYPE_ISO88025_TOKENRING: - case IF_TYPE_PPP: - case IF_TYPE_SOFTWARE_LOOPBACK: - return QNetworkConfiguration::BearerEthernet; - case IF_TYPE_IEEE80211: - return QNetworkConfiguration::BearerWLAN; - case IF_TYPE_ATM: - case IF_TYPE_IEEE1394: - case IF_TYPE_OTHER: - case IF_TYPE_TUNNEL: - return QNetworkConfiguration::BearerUnknown; - default: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "Interface Type" << luid.Info.IfType; -#endif - return QNetworkConfiguration::BearerUnknown; - } - return QNetworkConfiguration::BearerUnknown; - -#elif defined(Q_OS_LINUX) - int sock = socket(AF_INET, SOCK_DGRAM, 0); - - ifreq request; - strncpy(request.ifr_name, interface.toLocal8Bit().data(), sizeof(request.ifr_name) - 1); - request.ifr_name[sizeof(request.ifr_name) - 1] = '\0'; - int result = ioctl(sock, SIOCGIFHWADDR, &request); - close(sock); - - if (result >= 0 && request.ifr_hwaddr.sa_family == ARPHRD_ETHER) - return QNetworkConfiguration::BearerEthernet; -#elif defined(Q_OS_WINRT) - ComPtr networkInfoStatics; - HRESULT hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_Connectivity_NetworkInformation).Get(), &networkInfoStatics); - Q_ASSERT_SUCCEEDED(hr); - ComPtr> connectionProfiles; - hr = networkInfoStatics->GetConnectionProfiles(&connectionProfiles); - Q_ASSERT_SUCCEEDED(hr); - if (!connectionProfiles) - return QNetworkConfiguration::BearerUnknown; - - unsigned int size; - hr = connectionProfiles->get_Size(&size); - Q_ASSERT_SUCCEEDED(hr); - for (unsigned int i = 0; i < size; ++i) { - ComPtr profile; - hr = connectionProfiles->GetAt(i, &profile); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr adapter; - hr = profile->get_NetworkAdapter(&adapter); - // Indicates that no internet connection is available/the device is in airplane mode - if (hr == E_INVALIDARG) - return QNetworkConfiguration::BearerUnknown; - Q_ASSERT_SUCCEEDED(hr); - GUID id; - hr = adapter->get_NetworkAdapterId(&id); - Q_ASSERT_SUCCEEDED(hr); - OLECHAR adapterName[39]={0}; - int length = StringFromGUID2(id, adapterName, 39); - // "length - 1" as we have to remove the null terminator from it in order to compare - if (!length - || QString::fromRawData(reinterpret_cast(adapterName), length - 1) != interface) - continue; - - ComPtr profile2; - hr = profile.As(&profile2); - Q_ASSERT_SUCCEEDED(hr); - boolean isWLan; - hr = profile2->get_IsWlanConnectionProfile(&isWLan); - Q_ASSERT_SUCCEEDED(hr); - if (isWLan) - return QNetworkConfiguration::BearerWLAN; - - boolean isWWan; - hr = profile2->get_IsWwanConnectionProfile(&isWWan); - Q_ASSERT_SUCCEEDED(hr); - if (isWWan) { - ComPtr details; - hr = profile2->get_WwanConnectionProfileDetails(&details); - Q_ASSERT_SUCCEEDED(hr); - WwanDataClass dataClass; - hr = details->GetCurrentDataClass(&dataClass); - Q_ASSERT_SUCCEEDED(hr); - switch (dataClass) { - case WwanDataClass_Edge: - case WwanDataClass_Gprs: - return QNetworkConfiguration::Bearer2G; - case WwanDataClass_Umts: - return QNetworkConfiguration::BearerWCDMA; - case WwanDataClass_LteAdvanced: - return QNetworkConfiguration::BearerLTE; - case WwanDataClass_Hsdpa: - case WwanDataClass_Hsupa: - return QNetworkConfiguration::BearerHSPA; - case WwanDataClass_Cdma1xRtt: - case WwanDataClass_Cdma3xRtt: - case WwanDataClass_CdmaUmb: - return QNetworkConfiguration::BearerCDMA2000; - case WwanDataClass_Cdma1xEvdv: - case WwanDataClass_Cdma1xEvdo: - case WwanDataClass_Cdma1xEvdoRevA: - case WwanDataClass_Cdma1xEvdoRevB: - return QNetworkConfiguration::BearerEVDO; - case WwanDataClass_Custom: - case WwanDataClass_None: - default: - return QNetworkConfiguration::BearerUnknown; - } - } - return QNetworkConfiguration::BearerEthernet; - } -#else - Q_UNUSED(interface); -#endif - - return QNetworkConfiguration::BearerUnknown; -} -#endif - -QGenericEngine::QGenericEngine(QObject *parent) -: QBearerEngineImpl(parent) -{ - //workaround for deadlock in __cxa_guard_acquire with webkit on macos x - //initialise the Q_GLOBAL_STATIC in same thread as the AtomicallyInitializedStatic - (void)QNetworkInterface::interfaceFromIndex(0); -} - -QGenericEngine::~QGenericEngine() -{ -} - -QString QGenericEngine::getInterfaceFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - return configurationInterface.value(id); -} - -bool QGenericEngine::hasIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - - return configurationInterface.contains(id); -} - -void QGenericEngine::connectToId(const QString &id) -{ - emit connectionError(id, OperationNotSupported); -} - -void QGenericEngine::disconnectFromId(const QString &id) -{ - emit connectionError(id, OperationNotSupported); -} - -void QGenericEngine::initialize() -{ - doRequestUpdate(); -} - -void QGenericEngine::requestUpdate() -{ - doRequestUpdate(); -} - -void QGenericEngine::doRequestUpdate() -{ -#ifndef QT_NO_NETWORKINTERFACE - QMutexLocker locker(&mutex); - - // Immediately after connecting with a wireless access point - // QNetworkInterface::allInterfaces() will sometimes return an empty list. Calling it again a - // second time results in a non-empty list. If we loose interfaces we will end up removing - // network configurations which will break current sessions. - QList interfaces = QNetworkInterface::allInterfaces(); - if (interfaces.isEmpty()) - interfaces = QNetworkInterface::allInterfaces(); - - QStringList previous = accessPointConfigurations.keys(); - - // create configuration for each interface - while (!interfaces.isEmpty()) { - QNetworkInterface interface = interfaces.takeFirst(); - - if (!interface.isValid()) - continue; - - // ignore loopback interface - if (interface.flags() & QNetworkInterface::IsLoopBack) - continue; - -#ifndef Q_OS_WIN - // ignore WLAN interface handled in separate engine - if (qGetInterfaceType(interface.name()) == QNetworkConfiguration::BearerWLAN) - continue; -#endif - - uint identifier; - if (interface.index()) - identifier = qHash(QLatin1String("generic:") + QString::number(interface.index())); - else - identifier = qHash(QLatin1String("generic:") + interface.hardwareAddress()); - - const QString id = QString::number(identifier); - - previous.removeAll(id); - - QString name = interface.humanReadableName(); - if (name.isEmpty()) - name = interface.name(); - - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Defined; - if ((interface.flags() & QNetworkInterface::IsRunning) && !interface.addressEntries().isEmpty()) - state |= QNetworkConfiguration::Active; - - if (accessPointConfigurations.contains(id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - bool changed = false; - - ptr->mutex.lock(); - - if (!ptr->isValid) { - ptr->isValid = true; - changed = true; - } - - if (ptr->name != name) { - ptr->name = name; - changed = true; - } - - if (ptr->id != id) { - ptr->id = id; - changed = true; - } - - if (ptr->state != state) { - ptr->state = state; - changed = true; - } - - ptr->mutex.unlock(); - - if (changed) { - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } - } else { - QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate); - - ptr->name = name; - ptr->isValid = true; - ptr->id = id; - ptr->state = state; - ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearerType = qGetInterfaceType(interface.name()); - - accessPointConfigurations.insert(id, ptr); - configurationInterface.insert(id, interface.name()); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - } - } - - while (!previous.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.take(previous.takeFirst()); - - configurationInterface.remove(ptr->id); - - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - - locker.unlock(); -#endif - - emit updateCompleted(); -} - -QNetworkSession::State QGenericEngine::sessionStateForId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr) - return QNetworkSession::Invalid; - - QMutexLocker configLocker(&ptr->mutex); - - if (!ptr->isValid) { - return QNetworkSession::Invalid; - } else if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - return QNetworkSession::Connected; - } else if ((ptr->state & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == - QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -QNetworkConfigurationManager::Capabilities QGenericEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming; -} - -QNetworkSessionPrivate *QGenericEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QGenericEngine::defaultConfiguration() -{ - return QNetworkConfigurationPrivatePointer(); -} - - -bool QGenericEngine::requiresPolling() const -{ - return true; -} - -QT_END_NAMESPACE diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h deleted file mode 100644 index 6b8fb4cd0f..0000000000 --- a/src/plugins/bearer/generic/qgenericengine.h +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGENERICENGINE_H -#define QGENERICENGINE_H - -#include - -#include -#include - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -class QNetworkSessionPrivate; - -class QGenericEngine : public QBearerEngineImpl -{ - Q_OBJECT - -public: - QGenericEngine(QObject *parent = nullptr); - ~QGenericEngine(); - - QString getInterfaceFromId(const QString &id) override; - bool hasIdentifier(const QString &id) override; - - void connectToId(const QString &id) override; - void disconnectFromId(const QString &id) override; - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id) override; - - QNetworkConfigurationManager::Capabilities capabilities() const override; - - QNetworkSessionPrivate *createSessionBackend() override; - - QNetworkConfigurationPrivatePointer defaultConfiguration() override; - - bool requiresPolling() const override; - -private Q_SLOTS: - void doRequestUpdate(); - -private: - QMap configurationInterface; -}; - -QT_END_NAMESPACE - -#endif - diff --git a/src/plugins/bearer/nativewifi/main.cpp b/src/plugins/bearer/nativewifi/main.cpp deleted file mode 100644 index 826c0104e4..0000000000 --- a/src/plugins/bearer/nativewifi/main.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnativewifiengine.h" -#include "platformdefs.h" - -#include -#include - -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -static bool resolveLibraryInternal() -{ - QLibrary wlanapiLib(QLatin1String("wlanapi")); - local_WlanOpenHandle = (WlanOpenHandleProto) - wlanapiLib.resolve("WlanOpenHandle"); - local_WlanRegisterNotification = (WlanRegisterNotificationProto) - wlanapiLib.resolve("WlanRegisterNotification"); - local_WlanEnumInterfaces = (WlanEnumInterfacesProto) - wlanapiLib.resolve("WlanEnumInterfaces"); - local_WlanGetAvailableNetworkList = (WlanGetAvailableNetworkListProto) - wlanapiLib.resolve("WlanGetAvailableNetworkList"); - local_WlanQueryInterface = (WlanQueryInterfaceProto) - wlanapiLib.resolve("WlanQueryInterface"); - local_WlanConnect = (WlanConnectProto) - wlanapiLib.resolve("WlanConnect"); - local_WlanDisconnect = (WlanDisconnectProto) - wlanapiLib.resolve("WlanDisconnect"); - local_WlanScan = (WlanScanProto) - wlanapiLib.resolve("WlanScan"); - local_WlanFreeMemory = (WlanFreeMemoryProto) - wlanapiLib.resolve("WlanFreeMemory"); - local_WlanCloseHandle = (WlanCloseHandleProto) - wlanapiLib.resolve("WlanCloseHandle"); - return true; -} -Q_GLOBAL_STATIC_WITH_ARGS(bool, resolveLibrary, (resolveLibraryInternal())) - -class QNativeWifiEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "nativewifi.json") - -public: - QNativeWifiEnginePlugin(); - ~QNativeWifiEnginePlugin(); - - QBearerEngine *create(const QString &key) const; -}; - -QNativeWifiEnginePlugin::QNativeWifiEnginePlugin() -{ -} - -QNativeWifiEnginePlugin::~QNativeWifiEnginePlugin() -{ -} - -QBearerEngine *QNativeWifiEnginePlugin::create(const QString &key) const -{ - if (key != QLatin1String("nativewifi")) - return 0; - - resolveLibrary(); - - // native wifi dll not available - if (!local_WlanOpenHandle) - return 0; - - QNativeWifiEngine *engine = new QNativeWifiEngine; - - // could not initialise subsystem - if (engine && !engine->available()) { - delete engine; - return 0; - } - - return engine; -} - -QT_END_NAMESPACE - -#include "main.moc" - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/nativewifi/nativewifi.json b/src/plugins/bearer/nativewifi/nativewifi.json deleted file mode 100644 index f3db199150..0000000000 --- a/src/plugins/bearer/nativewifi/nativewifi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "nativewifi" ] -} diff --git a/src/plugins/bearer/nativewifi/nativewifi.pro b/src/plugins/bearer/nativewifi/nativewifi.pro deleted file mode 100644 index 41bde99341..0000000000 --- a/src/plugins/bearer/nativewifi/nativewifi.pro +++ /dev/null @@ -1,15 +0,0 @@ -TARGET = qnativewifibearer - -QT = core-private network-private - -HEADERS += qnativewifiengine.h \ - platformdefs.h - -SOURCES += main.cpp \ - qnativewifiengine.cpp - -OTHER_FILES += nativewifi.json - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QNativeWifiEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/nativewifi/platformdefs.h b/src/plugins/bearer/nativewifi/platformdefs.h deleted file mode 100644 index b8ac40af15..0000000000 --- a/src/plugins/bearer/nativewifi/platformdefs.h +++ /dev/null @@ -1,327 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef PLATFORMDEFS_H -#define PLATFORMDEFS_H - -#include -#undef interface - -//proper header is wlanapi.h, but that is not included in windows XP - -#define WLAN_MAX_NAME_LENGTH 256 -#define WLAN_MAX_PHY_TYPE_NUMBER 8 -#define WLAN_NOTIFICATION_SOURCE_ACM 0x00000008 -#define WLAN_NOTIFICATION_SOURCE_ALL 0x0000ffff -#define WLAN_AVAILABLE_NETWORK_CONNECTED 1 -#define WLAN_AVAILABLE_NETWORK_HAS_PROFILE 2 -#define DOT11_SSID_MAX_LENGTH 32 - -QT_BEGIN_NAMESPACE - -struct WLAN_NOTIFICATION_DATA { - DWORD NotificationSource; - DWORD NotificationCode; - GUID InterfaceGuid; - DWORD dwDataSize; - PVOID pData; -}; - -enum WLAN_INTERFACE_STATE { - wlan_interface_state_not_ready = 0, - wlan_interface_state_connected, - wlan_interface_state_ad_hoc_network_formed, - wlan_interface_state_disconnecting, - wlan_interface_state_disconnected, - wlan_interface_state_associating, - wlan_interface_state_discovering, - wlan_interface_state_authenticating -}; - -struct WLAN_INTERFACE_INFO { - GUID InterfaceGuid; - WCHAR strInterfaceDescription[WLAN_MAX_NAME_LENGTH]; - WLAN_INTERFACE_STATE isState; -}; - -struct WLAN_INTERFACE_INFO_LIST { - DWORD dwNumberOfItems; - DWORD dwIndex; - WLAN_INTERFACE_INFO InterfaceInfo[1]; -}; - -struct DOT11_SSID { - ULONG uSSIDLength; - UCHAR ucSSID[DOT11_SSID_MAX_LENGTH]; -}; - -struct NDIS_OBJECT_HEADER { - UCHAR Type; - UCHAR Revision; - USHORT Size; -}; - -typedef UCHAR DOT11_MAC_ADDRESS[6]; -struct DOT11_BSSID_LIST { - NDIS_OBJECT_HEADER Header; - ULONG uNumberOfEntries; - ULONG uTotalNumOfEntries; - DOT11_MAC_ADDRESS BSSIDs[1]; -}; - -enum DOT11_BSS_TYPE { - dot11_BSS_type_infrastructure = 1, - dot11_BSS_type_independent = 2, - dot11_BSS_type_any = 3 -}; - -enum DOT11_PHY_TYPE { - dot11_phy_type_unknown = 0, - dot11_phy_type_any = dot11_phy_type_unknown, - dot11_phy_type_fhss = 1, - dot11_phy_type_dsss = 2, - dot11_phy_type_irbaseband = 3, - dot11_phy_type_ofdm = 4, - dot11_phy_type_hrdsss = 5, - dot11_phy_type_erp = 6, - dot11_phy_type_ht = 7, - dot11_phy_type_IHV_start = 0x80000000, - dot11_phy_type_IHV_end = 0xffffffff -}; - -enum DOT11_AUTH_ALGORITHM { - DOT11_AUTH_ALGO_80211_OPEN = 1, - DOT11_AUTH_ALGO_80211_SHARED_KEY = 2, - DOT11_AUTH_ALGO_WPA = 3, - DOT11_AUTH_ALGO_WPA_PSK = 4, - DOT11_AUTH_ALGO_WPA_NONE = 5, - DOT11_AUTH_ALGO_RSNA = 6, - DOT11_AUTH_ALGO_RSNA_PSK = 7, - DOT11_AUTH_ALGO_IHV_START = 0x80000000, - DOT11_AUTH_ALGO_IHV_END = 0xffffffff -}; - -enum DOT11_CIPHER_ALGORITHM { - DOT11_CIPHER_ALGO_NONE = 0x00, - DOT11_CIPHER_ALGO_WEP40 = 0x01, - DOT11_CIPHER_ALGO_TKIP = 0x02, - DOT11_CIPHER_ALGO_CCMP = 0x04, - DOT11_CIPHER_ALGO_WEP104 = 0x05, - DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100, - DOT11_CIPHER_ALGO_RSN_USE_GROUP = 0x100, - DOT11_CIPHER_ALGO_WEP = 0x101, - DOT11_CIPHER_ALGO_IHV_START = 0x80000000, - DOT11_CIPHER_ALGO_IHV_END = 0xffffffff -}; - -struct WLAN_AVAILABLE_NETWORK { - WCHAR strProfileName[WLAN_MAX_NAME_LENGTH]; - DOT11_SSID dot11Ssid; - DOT11_BSS_TYPE dot11BssType; - ULONG uNumberOfBssids; - BOOL bNetworkConnectable; - DWORD wlanNotConnectableReason; - ULONG uNumberOfPhyTypes; - DOT11_PHY_TYPE dot11PhyTypes[WLAN_MAX_PHY_TYPE_NUMBER]; - BOOL bMorePhyTypes; - ULONG wlanSignalQuality; - BOOL bSecurityEnabled; - DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm; - DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm; - DWORD dwFlags; - DWORD dwReserved; -}; - -struct WLAN_AVAILABLE_NETWORK_LIST { - DWORD dwNumberOfItems; - DWORD dwIndex; - WLAN_AVAILABLE_NETWORK Network[1]; -}; - -enum WLAN_INTF_OPCODE { - wlan_intf_opcode_autoconf_start = 0x000000000, - wlan_intf_opcode_autoconf_enabled, - wlan_intf_opcode_background_scan_enabled, - wlan_intf_opcode_media_streaming_mode, - wlan_intf_opcode_radio_state, - wlan_intf_opcode_bss_type, - wlan_intf_opcode_interface_state, - wlan_intf_opcode_current_connection, - wlan_intf_opcode_channel_number, - wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs, - wlan_intf_opcode_supported_adhoc_auth_cipher_pairs, - wlan_intf_opcode_supported_country_or_region_string_list, - wlan_intf_opcode_current_operation_mode, - wlan_intf_opcode_supported_safe_mode, - wlan_intf_opcode_certified_safe_mode, - wlan_intf_opcode_autoconf_end = 0x0fffffff, - wlan_intf_opcode_msm_start = 0x10000100, - wlan_intf_opcode_statistics, - wlan_intf_opcode_rssi, - wlan_intf_opcode_msm_end = 0x1fffffff, - wlan_intf_opcode_security_start = 0x20010000, - wlan_intf_opcode_security_end = 0x2fffffff, - wlan_intf_opcode_ihv_start = 0x30000000, - wlan_intf_opcode_ihv_end = 0x3fffffff -}; - -enum WLAN_OPCODE_VALUE_TYPE { - wlan_opcode_value_type_query_only = 0, - wlan_opcode_value_type_set_by_group_policy, - wlan_opcode_value_type_set_by_user, - wlan_opcode_value_type_invalid -}; - -enum WLAN_CONNECTION_MODE { - wlan_connection_mode_profile = 0, - wlan_connection_mode_temporary_profile, - wlan_connection_mode_discovery_secure, - wlan_connection_mode_discovery_unsecure, - wlan_connection_mode_auto, - wlan_connection_mode_invalid -}; - -struct WLAN_CONNECTION_PARAMETERS { - WLAN_CONNECTION_MODE wlanConnectionMode; - LPCWSTR strProfile; - DOT11_SSID *pDot11Ssid; - DOT11_BSSID_LIST *pDesiredBssidList; - DOT11_BSS_TYPE dot11BssType; - DWORD dwFlags; -}; - -struct WLAN_RAW_DATA { - DWORD dwDataSize; - BYTE DataBlob[1]; -}; - -enum WLAN_NOTIFICATION_ACM { - wlan_notification_acm_start = 0, - wlan_notification_acm_autoconf_enabled, - wlan_notification_acm_autoconf_disabled, - wlan_notification_acm_background_scan_enabled, - wlan_notification_acm_background_scan_disabled, - wlan_notification_acm_bss_type_change, - wlan_notification_acm_power_setting_change, - wlan_notification_acm_scan_complete, - wlan_notification_acm_scan_fail, - wlan_notification_acm_connection_start, - wlan_notification_acm_connection_complete, - wlan_notification_acm_connection_attempt_fail, - wlan_notification_acm_filter_list_change, - wlan_notification_acm_interface_arrival, - wlan_notification_acm_interface_removal, - wlan_notification_acm_profile_change, - wlan_notification_acm_profile_name_change, - wlan_notification_acm_profiles_exhausted, - wlan_notification_acm_network_not_available, - wlan_notification_acm_network_available, - wlan_notification_acm_disconnecting, - wlan_notification_acm_disconnected, - wlan_notification_acm_adhoc_network_state_change, - wlan_notification_acm_end -}; - -struct WLAN_ASSOCIATION_ATTRIBUTES { - DOT11_SSID dot11Ssid; - DOT11_BSS_TYPE dot11BssType; - DOT11_MAC_ADDRESS dot11Bssid; - DOT11_PHY_TYPE dot11PhyType; - ULONG uDot11PhyIndex; - ULONG wlanSignalQuality; - ULONG ulRxRate; - ULONG ulTxRate; -}; - -struct WLAN_SECURITY_ATTRIBUTES { - BOOL bSecurityEnabled; - BOOL bOneXEnabled; - DOT11_AUTH_ALGORITHM dot11AuthAlgorithm; - DOT11_CIPHER_ALGORITHM dot11CipherAlgorithm; -}; - -struct WLAN_CONNECTION_ATTRIBUTES { - WLAN_INTERFACE_STATE isState; - WLAN_CONNECTION_MODE wlanConnectionMode; - WCHAR strProfileName[WLAN_MAX_NAME_LENGTH]; - WLAN_ASSOCIATION_ATTRIBUTES wlanAssociationAttributes; - WLAN_SECURITY_ATTRIBUTES wlanSecurityAttributes; -}; - -typedef void (WINAPI *WLAN_NOTIFICATION_CALLBACK)(WLAN_NOTIFICATION_DATA *, PVOID); - -typedef DWORD (WINAPI *WlanOpenHandleProto) - (DWORD dwClientVersion, PVOID pReserved, PDWORD pdwNegotiatedVersion, PHANDLE phClientHandle); -typedef DWORD (WINAPI *WlanRegisterNotificationProto) - (HANDLE hClientHandle, DWORD dwNotifSource, BOOL bIgnoreDuplicate, - WLAN_NOTIFICATION_CALLBACK funcCallback, PVOID pCallbackContext, - PVOID pReserved, PDWORD pdwPrevNotifSource); -typedef DWORD (WINAPI *WlanEnumInterfacesProto) - (HANDLE hClientHandle, PVOID pReserved, WLAN_INTERFACE_INFO_LIST **ppInterfaceList); -typedef DWORD (WINAPI *WlanGetAvailableNetworkListProto) - (HANDLE hClientHandle, const GUID* pInterfaceGuid, DWORD dwFlags, PVOID pReserved, - WLAN_AVAILABLE_NETWORK_LIST **ppAvailableNetworkList); -typedef DWORD (WINAPI *WlanQueryInterfaceProto) - (HANDLE hClientHandle, const GUID *pInterfaceGuid, WLAN_INTF_OPCODE OpCode, PVOID pReserved, - PDWORD pdwDataSize, PVOID *ppData, WLAN_OPCODE_VALUE_TYPE *pWlanOpcodeValueType); -typedef DWORD (WINAPI *WlanConnectProto) - (HANDLE hClientHandle, const GUID *pInterfaceGuid, - const WLAN_CONNECTION_PARAMETERS *pConnectionParameters, PVOID pReserved); -typedef DWORD (WINAPI *WlanDisconnectProto) - (HANDLE hClientHandle, const GUID *pInterfaceGuid, PVOID pReserved); -typedef DWORD (WINAPI *WlanScanProto) - (HANDLE hClientHandle, const GUID *pInterfaceGuid, const DOT11_SSID *pDot11Ssid, - const WLAN_RAW_DATA *pIeData, PVOID pReserved); -typedef VOID (WINAPI *WlanFreeMemoryProto)(PVOID pMemory); -typedef DWORD (WINAPI *WlanCloseHandleProto)(HANDLE hClientHandle, PVOID pReserved); - -extern WlanOpenHandleProto local_WlanOpenHandle; -extern WlanRegisterNotificationProto local_WlanRegisterNotification; -extern WlanEnumInterfacesProto local_WlanEnumInterfaces; -extern WlanGetAvailableNetworkListProto local_WlanGetAvailableNetworkList; -extern WlanQueryInterfaceProto local_WlanQueryInterface; -extern WlanConnectProto local_WlanConnect; -extern WlanDisconnectProto local_WlanDisconnect; -extern WlanScanProto local_WlanScan; -extern WlanFreeMemoryProto local_WlanFreeMemory; -extern WlanCloseHandleProto local_WlanCloseHandle; - -QT_END_NAMESPACE - -#endif // PLATFORMDEFS_H diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp deleted file mode 100644 index ca8700e63b..0000000000 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp +++ /dev/null @@ -1,622 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnativewifiengine.h" -#include "platformdefs.h" -#include - -#include - -#include -#include -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -WlanOpenHandleProto local_WlanOpenHandle = 0; -WlanRegisterNotificationProto local_WlanRegisterNotification = 0; -WlanEnumInterfacesProto local_WlanEnumInterfaces = 0; -WlanGetAvailableNetworkListProto local_WlanGetAvailableNetworkList = 0; -WlanQueryInterfaceProto local_WlanQueryInterface = 0; -WlanConnectProto local_WlanConnect = 0; -WlanDisconnectProto local_WlanDisconnect = 0; -WlanScanProto local_WlanScan = 0; -WlanFreeMemoryProto local_WlanFreeMemory = 0; -WlanCloseHandleProto local_WlanCloseHandle = 0; - -void qNotificationCallback(WLAN_NOTIFICATION_DATA *data, QNativeWifiEngine *d) -{ - Q_UNUSED(d); - - if (data->NotificationSource == WLAN_NOTIFICATION_SOURCE_ACM) { - switch (data->NotificationCode) { - case wlan_notification_acm_connection_complete: - case wlan_notification_acm_disconnected: - case wlan_notification_acm_scan_complete: - case wlan_notification_acm_scan_fail: - QMetaObject::invokeMethod(d, "scanComplete", Qt::QueuedConnection); - break; - default: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "wlan acm notification" << (int)data->NotificationCode; -#endif - break; - } - } else { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "wlan notification source" << (int)data->NotificationSource << "code" << (int)data->NotificationCode; -#endif - } -} - -QNativeWifiEngine::QNativeWifiEngine(QObject *parent) -: QBearerEngineImpl(parent), handle(INVALID_HANDLE_VALUE) -{ - connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(closeHandle())); -} - -QNativeWifiEngine::~QNativeWifiEngine() -{ - closeHandle(); -} - -void QNativeWifiEngine::scanComplete() -{ - QMutexLocker locker(&mutex); - - if (!available()) { - locker.unlock(); - emit updateCompleted(); - return; - } - - // enumerate interfaces - WLAN_INTERFACE_INFO_LIST *interfaceList; - DWORD result = local_WlanEnumInterfaces(handle, 0, &interfaceList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanEnumInterfaces failed with error %ld\n", __FUNCTION__, result); -#endif - - locker.unlock(); - emit updateCompleted(); - - return; - } - - QStringList previous = accessPointConfigurations.keys(); - - for (unsigned int i = 0; i < interfaceList->dwNumberOfItems; ++i) { - const WLAN_INTERFACE_INFO &interface = interfaceList->InterfaceInfo[i]; - - WLAN_AVAILABLE_NETWORK_LIST *networkList; - result = local_WlanGetAvailableNetworkList(handle, &interface.InterfaceGuid, - 3, 0, &networkList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanGetAvailableNetworkList failed with error %ld\n", - __FUNCTION__, result); -#endif - continue; - } - - QStringList seenNetworks; - - for (unsigned int j = 0; j < networkList->dwNumberOfItems; ++j) { - WLAN_AVAILABLE_NETWORK &network = networkList->Network[j]; - - QString networkName; - - if (network.strProfileName[0] != 0) { - networkName = QString::fromWCharArray(network.strProfileName); - } else { - networkName = QByteArray(reinterpret_cast(network.dot11Ssid.ucSSID), - network.dot11Ssid.uSSIDLength); - } - - const QString id = QString::number(qHash(QLatin1String("WLAN:") + networkName)); - - previous.removeAll(id); - - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; - - if (!(network.dwFlags & WLAN_AVAILABLE_NETWORK_HAS_PROFILE)) - state = QNetworkConfiguration::Undefined; - - if (network.strProfileName[0] != 0) { - if (network.bNetworkConnectable) { - if (network.dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) - state = QNetworkConfiguration::Active; - else - state = QNetworkConfiguration::Discovered; - } else { - state = QNetworkConfiguration::Defined; - } - } - - if (seenNetworks.contains(networkName)) - continue; - else - seenNetworks.append(networkName); - - if (accessPointConfigurations.contains(id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - bool changed = false; - - ptr->mutex.lock(); - - if (!ptr->isValid) { - ptr->isValid = true; - changed = true; - } - - if (ptr->name != networkName) { - ptr->name = networkName; - changed = true; - } - - if (ptr->state != state) { - ptr->state = state; - changed = true; - } - - ptr->mutex.unlock(); - - if (changed) { - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } - } else { - QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate); - - ptr->name = networkName; - ptr->isValid = true; - ptr->id = id; - ptr->state = state; - ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearerType = QNetworkConfiguration::BearerWLAN; - - accessPointConfigurations.insert(id, ptr); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - } - } - - local_WlanFreeMemory(networkList); - } - - local_WlanFreeMemory(interfaceList); - - while (!previous.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.take(previous.takeFirst()); - - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - - locker.unlock(); - emit updateCompleted(); -} - -QString QNativeWifiEngine::getInterfaceFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - if (!available()) - return QString(); - - // enumerate interfaces - WLAN_INTERFACE_INFO_LIST *interfaceList; - DWORD result = local_WlanEnumInterfaces(handle, 0, &interfaceList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanEnumInterfaces failed with error %ld\n", __FUNCTION__, result); -#endif - return QString(); - } - - for (unsigned int i = 0; i < interfaceList->dwNumberOfItems; ++i) { - const WLAN_INTERFACE_INFO &interface = interfaceList->InterfaceInfo[i]; - - DWORD dataSize; - WLAN_CONNECTION_ATTRIBUTES *connectionAttributes; - result = local_WlanQueryInterface(handle, &interface.InterfaceGuid, - wlan_intf_opcode_current_connection, 0, &dataSize, - reinterpret_cast(&connectionAttributes), 0); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - if (result != ERROR_INVALID_STATE) - qDebug("%s: WlanQueryInterface failed with error %ld\n", __FUNCTION__, result); -#endif - - continue; - } - - if (qHash(QLatin1String("WLAN:") + - QString::fromWCharArray(connectionAttributes->strProfileName)) == id.toUInt()) { - QString guid("{%1-%2-%3-%4%5-%6%7%8%9%10%11}"); - - guid = guid.arg(interface.InterfaceGuid.Data1, 8, 16, QChar('0')); - guid = guid.arg(interface.InterfaceGuid.Data2, 4, 16, QChar('0')); - guid = guid.arg(interface.InterfaceGuid.Data3, 4, 16, QChar('0')); - for (int i = 0; i < 8; ++i) - guid = guid.arg(interface.InterfaceGuid.Data4[i], 2, 16, QChar('0')); - - local_WlanFreeMemory(connectionAttributes); - local_WlanFreeMemory(interfaceList); - - return guid.toUpper(); - } - - local_WlanFreeMemory(connectionAttributes); - } - - local_WlanFreeMemory(interfaceList); - - return QString(); -} - -bool QNativeWifiEngine::hasIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - - if (!available()) - return false; - - // enumerate interfaces - WLAN_INTERFACE_INFO_LIST *interfaceList; - DWORD result = local_WlanEnumInterfaces(handle, 0, &interfaceList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanEnumInterfaces failed with error %ld\n", __FUNCTION__, result); -#endif - return false; - } - - for (unsigned int i = 0; i < interfaceList->dwNumberOfItems; ++i) { - const WLAN_INTERFACE_INFO &interface = interfaceList->InterfaceInfo[i]; - - WLAN_AVAILABLE_NETWORK_LIST *networkList; - result = local_WlanGetAvailableNetworkList(handle, &interface.InterfaceGuid, - 3, 0, &networkList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanGetAvailableNetworkList failed with error %ld\n", - __FUNCTION__, result); -#endif - continue; - } - - for (unsigned int j = 0; j < networkList->dwNumberOfItems; ++j) { - WLAN_AVAILABLE_NETWORK &network = networkList->Network[j]; - - QString networkName; - - if (network.strProfileName[0] != 0) { - networkName = QString::fromWCharArray(network.strProfileName); - } else { - networkName = QByteArray(reinterpret_cast(network.dot11Ssid.ucSSID), - network.dot11Ssid.uSSIDLength); - } - - if (qHash(QLatin1String("WLAN:") + networkName) == id.toUInt()) { - local_WlanFreeMemory(networkList); - local_WlanFreeMemory(interfaceList); - return true; - } - } - - local_WlanFreeMemory(networkList); - } - - local_WlanFreeMemory(interfaceList); - - return false; -} - -void QNativeWifiEngine::connectToId(const QString &id) -{ - QMutexLocker locker(&mutex); - - if (!available()) { - locker.unlock(); - emit connectionError(id, InterfaceLookupError); - return; - } - - WLAN_INTERFACE_INFO_LIST *interfaceList; - DWORD result = local_WlanEnumInterfaces(handle, 0, &interfaceList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanEnumInterfaces failed with error %ld\n", __FUNCTION__, result); -#endif - locker.unlock(); - emit connectionError(id, InterfaceLookupError); - return; - } - - QString profile; - - for (unsigned int i = 0; i < interfaceList->dwNumberOfItems; ++i) { - const WLAN_INTERFACE_INFO &interface = interfaceList->InterfaceInfo[i]; - - WLAN_AVAILABLE_NETWORK_LIST *networkList; - result = local_WlanGetAvailableNetworkList(handle, &interface.InterfaceGuid, - 3, 0, &networkList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanGetAvailableNetworkList failed with error %ld\n", - __FUNCTION__, result); -#endif - continue; - } - - for (unsigned int j = 0; j < networkList->dwNumberOfItems; ++j) { - WLAN_AVAILABLE_NETWORK &network = networkList->Network[j]; - - profile = QString::fromWCharArray(network.strProfileName); - - if (qHash(QLatin1String("WLAN:") + profile) == id.toUInt()) - break; - else - profile.clear(); - } - - local_WlanFreeMemory(networkList); - - if (!profile.isEmpty()) { - WLAN_CONNECTION_PARAMETERS parameters; - parameters.wlanConnectionMode = wlan_connection_mode_profile; - parameters.strProfile = reinterpret_cast(profile.utf16()); - parameters.pDot11Ssid = 0; - parameters.pDesiredBssidList = 0; - parameters.dot11BssType = dot11_BSS_type_any; - parameters.dwFlags = 0; - - DWORD result = local_WlanConnect(handle, &interface.InterfaceGuid, ¶meters, 0); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanConnect failed with error %ld\n", __FUNCTION__, result); -#endif - locker.unlock(); - emit connectionError(id, ConnectError); - locker.relock(); - break; - } - - break; - } - } - - local_WlanFreeMemory(interfaceList); - - if (profile.isEmpty()) { - locker.unlock(); - emit connectionError(id, InterfaceLookupError); - } -} - -void QNativeWifiEngine::disconnectFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - if (!available()) { - locker.unlock(); - emit connectionError(id, InterfaceLookupError); - return; - } - - QString interface = getInterfaceFromId(id); - - if (interface.isEmpty()) { - locker.unlock(); - emit connectionError(id, InterfaceLookupError); - return; - } - - const QVector split = interface.midRef(1, interface.length() - 2).split(QLatin1Char('-')); - - GUID guid; - guid.Data1 = split.at(0).toUInt(0, 16); - guid.Data2 = split.at(1).toUShort(0, 16); - guid.Data3 = split.at(2).toUShort(0, 16); - guid.Data4[0] = split.at(3).left(2).toUShort(0, 16); - guid.Data4[1] = split.at(3).right(2).toUShort(0, 16); - for (int i = 0; i < 6; ++i) - guid.Data4[i + 2] = split.at(4).mid(i*2, 2).toUShort(0, 16); - - DWORD result = local_WlanDisconnect(handle, &guid, 0); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanDisconnect failed with error %ld\n", __FUNCTION__, result); -#endif - locker.unlock(); - emit connectionError(id, DisconnectionError); - return; - } -} - -void QNativeWifiEngine::initialize() -{ - scanComplete(); -} - -void QNativeWifiEngine::requestUpdate() -{ - QMutexLocker locker(&mutex); - - if (!available()) { - locker.unlock(); - emit updateCompleted(); - return; - } - - // enumerate interfaces - WLAN_INTERFACE_INFO_LIST *interfaceList; - DWORD result = local_WlanEnumInterfaces(handle, 0, &interfaceList); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanEnumInterfaces failed with error %ld\n", __FUNCTION__, result); -#endif - - locker.unlock(); - emit updateCompleted(); - - return; - } - - bool requested = false; - for (unsigned int i = 0; i < interfaceList->dwNumberOfItems; ++i) { - result = local_WlanScan(handle, &interfaceList->InterfaceInfo[i].InterfaceGuid, 0, 0, 0); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: WlanScan failed with error %ld\n", __FUNCTION__, result); -#endif - } else { - requested = true; - } - } - - local_WlanFreeMemory(interfaceList); - - if (!requested) { - locker.unlock(); - emit updateCompleted(); - } -} - -QNetworkSession::State QNativeWifiEngine::sessionStateForId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr) - return QNetworkSession::Invalid; - - if (!ptr->isValid) { - return QNetworkSession::Invalid; - } else if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - return QNetworkSession::Connected; - } else if ((ptr->state & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == - QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -QNetworkConfigurationManager::Capabilities QNativeWifiEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming | - QNetworkConfigurationManager::CanStartAndStopInterfaces; -} - -QNetworkSessionPrivate *QNativeWifiEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QNativeWifiEngine::defaultConfiguration() -{ - return QNetworkConfigurationPrivatePointer(); -} - -bool QNativeWifiEngine::available() -{ - if (handle != INVALID_HANDLE_VALUE) - return true; - - DWORD clientVersion; - - DWORD result = local_WlanOpenHandle(1, 0, &clientVersion, &handle); - if (result != ERROR_SUCCESS) { -#ifdef BEARER_MANAGEMENT_DEBUG - if (result != ERROR_SERVICE_NOT_ACTIVE) - qDebug("%s: WlanOpenHandle failed with error %ld\n", __FUNCTION__, result); -#endif - - return false; - } - - result = local_WlanRegisterNotification(handle, WLAN_NOTIFICATION_SOURCE_ALL, true, - WLAN_NOTIFICATION_CALLBACK(qNotificationCallback), - this, 0, 0); -#ifdef BEARER_MANAGEMENT_DEBUG - if (result != ERROR_SUCCESS) - qDebug("%s: WlanRegisterNotification failed with error %ld\n", __FUNCTION__, result); -#endif - - return handle != INVALID_HANDLE_VALUE; -} - -void QNativeWifiEngine::closeHandle() -{ - if (handle != INVALID_HANDLE_VALUE) { - local_WlanCloseHandle(handle, 0); - handle = INVALID_HANDLE_VALUE; - } -} - -bool QNativeWifiEngine::requiresPolling() const -{ - // On Windows XP SP2 and SP3 only connection and disconnection notifications are available. - // We need to poll for changes in available wireless networks. - return QOperatingSystemVersion::current() - <= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 5, 2); -} - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.h b/src/plugins/bearer/nativewifi/qnativewifiengine.h deleted file mode 100644 index 24e97bf6df..0000000000 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.h +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNATIVEWIFIENGINE_P_H -#define QNATIVEWIFIENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include - -#ifndef QT_NO_BEARERMANAGEMENT - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -struct WLAN_NOTIFICATION_DATA; - -class QNativeWifiEngine : public QBearerEngineImpl -{ - Q_OBJECT - -public: - QNativeWifiEngine(QObject *parent = 0); - ~QNativeWifiEngine(); - - QString getInterfaceFromId(const QString &id); - bool hasIdentifier(const QString &id); - - void connectToId(const QString &id); - void disconnectFromId(const QString &id); - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id); - - QNetworkConfigurationManager::Capabilities capabilities() const; - - QNetworkSessionPrivate *createSessionBackend(); - - QNetworkConfigurationPrivatePointer defaultConfiguration(); - - bool available(); - - bool requiresPolling() const; - -private Q_SLOTS: - void scanComplete(); - void closeHandle(); - -private: - Qt::HANDLE handle; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_BEARERMANAGEMENT - -#endif diff --git a/src/plugins/bearer/networkmanager/.prev_CMakeLists.txt b/src/plugins/bearer/networkmanager/.prev_CMakeLists.txt deleted file mode 100644 index df5927024d..0000000000 --- a/src/plugins/bearer/networkmanager/.prev_CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Generated from networkmanager.pro. - -##################################################################### -## QNetworkManagerEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QNetworkManagerEnginePlugin - OUTPUT_NAME qnmbearer - CLASS_NAME QNetworkManagerEnginePlugin - TYPE bearer - SOURCES - main.cpp - qnetworkmanagerengine.cpp qnetworkmanagerengine.h - qnetworkmanagerservice.cpp qnetworkmanagerservice.h - LIBRARIES - Qt::LinuxOfonoSupportPrivate - Qt::NetworkPrivate - PUBLIC_LIBRARIES - Qt::Core - Qt::DBus - Qt::LinuxOfonoSupport - Qt::Network -) - -#### Keys ignored in scope 1:.:.:networkmanager.pro:: -# OTHER_FILES = "networkmanager.json" diff --git a/src/plugins/bearer/networkmanager/CMakeLists.txt b/src/plugins/bearer/networkmanager/CMakeLists.txt deleted file mode 100644 index 8f26a4c86d..0000000000 --- a/src/plugins/bearer/networkmanager/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Generated from networkmanager.pro. - -##################################################################### -## QNetworkManagerEnginePlugin Plugin: -##################################################################### - -qt_add_plugin(QNetworkManagerEnginePlugin - OUTPUT_NAME qnmbearer - TYPE bearer - SOURCES - main.cpp - qnetworkmanagerengine.cpp qnetworkmanagerengine.h - qnetworkmanagerservice.cpp qnetworkmanagerservice.h - PUBLIC_LIBRARIES - Qt::Core - Qt::DBus - Qt::LinuxOfonoSupportPrivate - Qt::NetworkPrivate -) - -#### Keys ignored in scope 1:.:.:networkmanager.pro:: -# OTHER_FILES = "networkmanager.json" diff --git a/src/plugins/bearer/networkmanager/main.cpp b/src/plugins/bearer/networkmanager/main.cpp deleted file mode 100644 index 1773abe55b..0000000000 --- a/src/plugins/bearer/networkmanager/main.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnetworkmanagerengine.h" - -#include - -#include - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -class QNetworkManagerEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "networkmanager.json") - -public: - QNetworkManagerEnginePlugin(); - ~QNetworkManagerEnginePlugin(); - - QBearerEngine *create(const QString &key) const; -}; - -QNetworkManagerEnginePlugin::QNetworkManagerEnginePlugin() -{ -} - -QNetworkManagerEnginePlugin::~QNetworkManagerEnginePlugin() -{ -} - -QBearerEngine *QNetworkManagerEnginePlugin::create(const QString &key) const -{ - if (key == QLatin1String("networkmanager")) { - QNetworkManagerEngine *engine = new QNetworkManagerEngine; - return engine; - } - - return 0; -} - -QT_END_NAMESPACE - -#include "main.moc" - -#endif // QT_NO_DBUS diff --git a/src/plugins/bearer/networkmanager/networkmanager.json b/src/plugins/bearer/networkmanager/networkmanager.json deleted file mode 100644 index 3d408d5c20..0000000000 --- a/src/plugins/bearer/networkmanager/networkmanager.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "networkmanager" ] -} diff --git a/src/plugins/bearer/networkmanager/networkmanager.pro b/src/plugins/bearer/networkmanager/networkmanager.pro deleted file mode 100644 index 3ca217f974..0000000000 --- a/src/plugins/bearer/networkmanager/networkmanager.pro +++ /dev/null @@ -1,16 +0,0 @@ -TARGET = qnmbearer - -QT = core network-private dbus linuxofono_support_private - -HEADERS += qnetworkmanagerservice.h \ - qnetworkmanagerengine.h - -SOURCES += main.cpp \ - qnetworkmanagerservice.cpp \ - qnetworkmanagerengine.cpp - -OTHER_FILES += networkmanager.json - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QNetworkManagerEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp deleted file mode 100644 index cba2221587..0000000000 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp +++ /dev/null @@ -1,935 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnetworkmanagerengine.h" -#include "qnetworkmanagerservice.h" -#include - -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent) -: QBearerEngineImpl(parent), - managerInterface(NULL), - systemSettings(NULL), - ofonoManager(NULL), - nmAvailable(false) -{ - qDBusRegisterMetaType(); - - nmWatcher = new QDBusServiceWatcher(NM_DBUS_SERVICE,QDBusConnection::systemBus(), - QDBusServiceWatcher::WatchForRegistration | - QDBusServiceWatcher::WatchForUnregistration, this); - connect(nmWatcher, SIGNAL(serviceRegistered(QString)), - this, SLOT(nmRegistered(QString))); - connect(nmWatcher, SIGNAL(serviceUnregistered(QString)), - this, SLOT(nmUnRegistered(QString))); - - ofonoWatcher = new QDBusServiceWatcher("org.ofono",QDBusConnection::systemBus(), - QDBusServiceWatcher::WatchForRegistration | - QDBusServiceWatcher::WatchForUnregistration, this); - connect(ofonoWatcher, SIGNAL(serviceRegistered(QString)), - this, SLOT(ofonoRegistered(QString))); - connect(ofonoWatcher, SIGNAL(serviceUnregistered(QString)), - this, SLOT(ofonoUnRegistered(QString))); - - QDBusConnectionInterface *interface = QDBusConnection::systemBus().interface(); - - if (!interface) return; - - if (interface->isServiceRegistered("org.ofono")) - QMetaObject::invokeMethod(this, "ofonoRegistered", Qt::QueuedConnection); - - if (interface->isServiceRegistered(NM_DBUS_SERVICE)) - QMetaObject::invokeMethod(this, "nmRegistered", Qt::QueuedConnection); -} - -QNetworkManagerEngine::~QNetworkManagerEngine() -{ - qDeleteAll(connections); - connections.clear(); - qDeleteAll(accessPoints); - accessPoints.clear(); - qDeleteAll(wirelessDevices); - wirelessDevices.clear(); - qDeleteAll(activeConnectionsList); - activeConnectionsList.clear(); - qDeleteAll(interfaceDevices); - interfaceDevices.clear(); - - connectionInterfaces.clear(); - - qDeleteAll(ofonoContextManagers); - ofonoContextManagers.clear(); - - qDeleteAll(wiredDevices); - wiredDevices.clear(); -} - -void QNetworkManagerEngine::initialize() -{ - if (nmAvailable) - setupConfigurations(); -} - -void QNetworkManagerEngine::setupConfigurations() -{ - QMutexLocker locker(&mutex); - // Get active connections. - const auto acPaths = managerInterface->activeConnections(); - for (const QDBusObjectPath &acPath : acPaths) { - - if (activeConnectionsList.contains(acPath.path())) - continue; - - QNetworkManagerConnectionActive *activeConnection = - new QNetworkManagerConnectionActive(acPath.path(),this); - activeConnectionsList.insert(acPath.path(), activeConnection); - connect(activeConnection, SIGNAL(propertiesChanged(QMap)), - this, SLOT(activeConnectionPropertiesChanged(QMap))); - - QStringList devices = activeConnection->devices(); - if (!devices.isEmpty()) { - QNetworkManagerInterfaceDevice device(devices.at(0),this); - connectionInterfaces.insert(activeConnection->connection().path(),device.networkInterface()); - } - } - - // Get connections. - const auto settingsPaths = systemSettings->listConnections(); - for (const QDBusObjectPath &settingsPath : settingsPaths) { - locker.unlock(); - if (!hasIdentifier(settingsPath.path())) - newConnection(settingsPath, systemSettings); //add system connection configs - locker.relock(); - } - - Q_EMIT updateCompleted(); -} - -bool QNetworkManagerEngine::networkManagerAvailable() const -{ - return nmAvailable; -} - -QString QNetworkManagerEngine::getInterfaceFromId(const QString &settingsPath) -{ - return connectionInterfaces.value(settingsPath); -} - -bool QNetworkManagerEngine::hasIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - return accessPointConfigurations.contains(id); -} - -void QNetworkManagerEngine::connectToId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = connectionFromId(id); - - if (!connection) - return; - - NMDeviceType connectionType = connection->getType(); - - QString dbusDevicePath; - const QString settingsPath = connection->path(); - QString specificPath = configuredAccessPoints.key(settingsPath); - - if (isConnectionActive(settingsPath)) - return; - - for (auto i = interfaceDevices.cbegin(), end = interfaceDevices.cend(); i != end; ++i) { - const auto type = i.value()->deviceType(); - if (type == DEVICE_TYPE_ETHERNET || type == DEVICE_TYPE_WIFI || type == DEVICE_TYPE_MODEM) { - if (type == connectionType) { - dbusDevicePath = i.key(); - break; - } - } - } - - if (specificPath.isEmpty()) - specificPath = "/"; - - managerInterface->activateConnection(QDBusObjectPath(settingsPath), - QDBusObjectPath(dbusDevicePath), QDBusObjectPath(specificPath)); -} - -void QNetworkManagerEngine::disconnectFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = connectionFromId(id); - - if (!connection) - return; - - QNmSettingsMap map = connection->getSettings(); - bool connectionAutoconnect = map.value("connection").value("autoconnect",true).toBool(); //if not present is true !! - if (connectionAutoconnect) { //autoconnect connections will simply be reconnected by nm - emit connectionError(id, QBearerEngineImpl::OperationNotSupported); - return; - } - - for (auto i = activeConnectionsList.cbegin(), end = activeConnectionsList.cend(); i != end; ++i) { - if (id == i.value()->connection().path() && accessPointConfigurations.contains(id)) { - managerInterface->deactivateConnection(QDBusObjectPath(i.key())); - break; - } - } -} - -void QNetworkManagerEngine::requestUpdate() -{ - if (managerInterface && managerInterface->wirelessEnabled()) { - for (auto *wirelessDevice : qAsConst(wirelessDevices)) - wirelessDevice->requestScan(); - } - QMetaObject::invokeMethod(this, "updateCompleted", Qt::QueuedConnection); -} - -void QNetworkManagerEngine::interfacePropertiesChanged(const QMap &properties) -{ - QMutexLocker locker(&mutex); - - for (auto i = properties.cbegin(), end = properties.cend(); i != end; ++i) { - if (i.key() == QLatin1String("ActiveConnections")) { - // Active connections changed, update configurations. - - const auto activeConnections = qdbus_cast >(qvariant_cast(i.value())); - - QStringList identifiers = accessPointConfigurations.keys(); - QStringList priorActiveConnections = activeConnectionsList.keys(); - - for (const QDBusObjectPath &acPath : activeConnections) { - priorActiveConnections.removeOne(acPath.path()); - QNetworkManagerConnectionActive *activeConnection = - activeConnectionsList.value(acPath.path()); - - if (!activeConnection) { - activeConnection = new QNetworkManagerConnectionActive(acPath.path(),this); - activeConnectionsList.insert(acPath.path(), activeConnection); - - connect(activeConnection, SIGNAL(propertiesChanged(QMap)), - this, SLOT(activeConnectionPropertiesChanged(QMap))); - } - - const QString id = activeConnection->connection().path(); - - identifiers.removeOne(id); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (ptr) { - ptr->mutex.lock(); - if (activeConnection->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED && - (ptr->state & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) { - - ptr->state |= QNetworkConfiguration::Active; - - if (activeConnectionsList.value(id) && activeConnectionsList.value(id)->defaultRoute() - && managerInterface->state() < QNetworkManagerInterface::NM_STATE_CONNECTED_GLOBAL) { - ptr->purpose = QNetworkConfiguration::PrivatePurpose; - } - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } else { - ptr->mutex.unlock(); - } - } - } - - while (!priorActiveConnections.isEmpty()) - delete activeConnectionsList.take(priorActiveConnections.takeFirst()); - - while (!identifiers.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.value(identifiers.takeFirst()); - - ptr->mutex.lock(); - if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined; - ptr->state = (flag | QNetworkConfiguration::Discovered); - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } else { - ptr->mutex.unlock(); - } - } - } - } -} - -void QNetworkManagerEngine::activeConnectionPropertiesChanged(const QMap &properties) -{ - QMutexLocker locker(&mutex); - - Q_UNUSED(properties) - - QNetworkManagerConnectionActive *activeConnection = qobject_cast(sender()); - - if (!activeConnection) - return; - - const QString id = activeConnection->connection().path(); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (ptr) { - if (properties.contains(QStringLiteral("State"))) { - ptr->mutex.lock(); - if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { - QStringList devices = activeConnection->devices(); - if (!devices.isEmpty()) { - QNetworkManagerInterfaceDevice device(devices.at(0),this); - connectionInterfaces.insert(id,device.networkInterface()); - } - - ptr->state |= QNetworkConfiguration::Active; - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } else { - connectionInterfaces.remove(id); - ptr->mutex.unlock(); - } - } - } -} - -void QNetworkManagerEngine::deviceConnectionsChanged(const QStringList &connectionsList) -{ - QMutexLocker locker(&mutex); - for (int i = 0; i < connections.count(); ++i) { - if (connectionsList.contains(connections.at(i)->path())) - continue; - - const QString settingsPath = connections.at(i)->path(); - - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.value(settingsPath); - ptr->mutex.lock(); - QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined; - ptr->state = (flag | QNetworkConfiguration::Discovered); - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - Q_EMIT updateCompleted(); - } -} - -void QNetworkManagerEngine::wiredCarrierChanged(bool carrier) -{ - QNetworkManagerInterfaceDeviceWired *deviceWired = qobject_cast(sender()); - if (!deviceWired) - return; - QMutexLocker locker(&mutex); - const auto settingsPaths = systemSettings->listConnections(); - for (const QDBusObjectPath &settingsPath : settingsPaths) { - for (int i = 0; i < connections.count(); ++i) { - QNetworkManagerSettingsConnection *connection = connections.at(i); - if (connection->getType() == DEVICE_TYPE_ETHERNET - && settingsPath.path() == connection->path()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.value(settingsPath.path()); - - if (ptr) { - ptr->mutex.lock(); - if (carrier) - ptr->state |= QNetworkConfiguration::Discovered; - else - ptr->state = QNetworkConfiguration::Defined; - ptr->mutex.unlock(); - locker.unlock(); - emit configurationChanged(ptr); - return; - } - } - } - } -} - -void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path, - QNetworkManagerSettings *settings) -{ - QMutexLocker locker(&mutex); - if (!settings) - settings = qobject_cast(sender()); - - if (!settings) { - return; - } - - QNetworkManagerSettingsConnection *connection = - new QNetworkManagerSettingsConnection(settings->service(), - path.path(),this); - const QString settingsPath = connection->path(); - if (accessPointConfigurations.contains(settingsPath)) { - return; - } - - connections.append(connection); - - connect(connection,SIGNAL(removed(QString)),this,SLOT(removeConnection(QString))); - connect(connection,SIGNAL(updated()),this,SLOT(updateConnection())); - connection->setConnections(); - - NMDeviceType deviceType = connection->getType(); - - if (deviceType == DEVICE_TYPE_WIFI) { - QString apPath; - for (int i = 0; i < accessPoints.count(); ++i) { - if (connection->getSsid() == accessPoints.at(i)->ssid()) { - // remove the corresponding accesspoint from configurations - apPath = accessPoints.at(i)->path(); - QNetworkConfigurationPrivatePointer ptr - = accessPointConfigurations.take(apPath); - if (ptr) { - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - } - } - if (!configuredAccessPoints.contains(settingsPath)) - configuredAccessPoints.insert(apPath,settingsPath); - } - - QNetworkConfigurationPrivate *cpPriv = - parseConnection(settingsPath, connection->getSettings()); - - // Check if connection is active. - if (isConnectionActive(settingsPath)) - cpPriv->state |= QNetworkConfiguration::Active; - - if (deviceType == DEVICE_TYPE_ETHERNET) { - for (auto interfaceDevice : qAsConst(interfaceDevices)) { - if (interfaceDevice->deviceType() == deviceType) { - auto *wiredDevice = wiredDevices.value(interfaceDevice->path()); - if (wiredDevice && wiredDevice->carrier()) { - cpPriv->state |= QNetworkConfiguration::Discovered; - } - } - } - } - - QNetworkConfigurationPrivatePointer ptr(cpPriv); - accessPointConfigurations.insert(ptr->id, ptr); - locker.unlock(); - emit configurationAdded(ptr); -} - -bool QNetworkManagerEngine::isConnectionActive(const QString &settingsPath) const -{ - for (QNetworkManagerConnectionActive *activeConnection : activeConnectionsList) { - if (activeConnection->connection().path() == settingsPath) { - const auto state = activeConnection->state(); - if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING - || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { - return true; - } else { - break; - } - } - } - - QNetworkManagerSettingsConnection *settingsConnection = connectionFromId(settingsPath); - if (settingsConnection && settingsConnection->getType() == DEVICE_TYPE_MODEM) { - return isActiveContext(settingsConnection->path()); - } - - return false; -} - -void QNetworkManagerEngine::removeConnection(const QString &path) -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = - qobject_cast(sender()); - - if (!connection) - return; - - connection->deleteLater(); - connections.removeAll(connection); - - const QString id = path; - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(id); - - if (ptr) { - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - - // add base AP back into configurations - - // removed along with all AP props code... -} - -void QNetworkManagerEngine::updateConnection() -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = - qobject_cast(sender()); - if (!connection) - return; - const QString settingsPath = connection->path(); - - QNetworkConfigurationPrivate *cpPriv = parseConnection(settingsPath, connection->getSettings()); - - // Check if connection is active. - const auto acPaths = managerInterface->activeConnections(); - for (const QDBusObjectPath &acPath : acPaths) { - QNetworkManagerConnectionActive activeConnection(acPath.path()); - - if (activeConnection.connection().path() == settingsPath && - activeConnection.state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { - cpPriv->state |= QNetworkConfiguration::Active; - break; - } - } - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(cpPriv->id); - - ptr->mutex.lock(); - - ptr->isValid = cpPriv->isValid; - ptr->name = cpPriv->name; - ptr->id = cpPriv->id; - ptr->state = cpPriv->state; - - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - delete cpPriv; -} - -void QNetworkManagerEngine::activationFinished(QDBusPendingCallWatcher *watcher) -{ - QMutexLocker locker(&mutex); - QDBusPendingReply reply(*watcher); - watcher->deleteLater(); - - if (!reply.isError()) { - QDBusObjectPath result = reply.value(); - - QNetworkManagerConnectionActive activeConnection(result.path()); - - const QString id = activeConnection.connection().path(); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (ptr) { - ptr->mutex.lock(); - if (activeConnection.state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED && - ptr->state != QNetworkConfiguration::Active) { - ptr->state |= QNetworkConfiguration::Active; - ptr->mutex.unlock(); - - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } else { - ptr->mutex.unlock(); - } - } - } -} - -QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QString &settingsPath, - const QNmSettingsMap &map) -{ - QMutexLocker locker(&mutex); - QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate; - cpPriv->name = map.value("connection").value("id").toString(); - cpPriv->isValid = true; - cpPriv->id = settingsPath; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - - cpPriv->purpose = QNetworkConfiguration::PublicPurpose; - - cpPriv->state = QNetworkConfiguration::Defined; - const QString connectionType = map.value("connection").value("type").toString(); - - if (connectionType == QLatin1String("802-3-ethernet")) { - cpPriv->bearerType = QNetworkConfiguration::BearerEthernet; - - const auto devicePaths = managerInterface->getDevices(); - for (const QDBusObjectPath &devicePath : devicePaths) { - QNetworkManagerInterfaceDevice device(devicePath.path(),this); - if (device.deviceType() == DEVICE_TYPE_ETHERNET) { - QNetworkManagerInterfaceDeviceWired *wiredDevice = wiredDevices.value(device.path()); - if (wiredDevice && wiredDevice->carrier()) { - cpPriv->state |= QNetworkConfiguration::Discovered; - break; - } - } - } - } else if (connectionType == QLatin1String("802-11-wireless")) { - cpPriv->bearerType = QNetworkConfiguration::BearerWLAN; - - const QString connectionSsid = map.value("802-11-wireless").value("ssid").toString(); - for (int i = 0; i < accessPoints.count(); ++i) { - if (connectionSsid == accessPoints.at(i)->ssid() - && map.value("802-11-wireless").value("seen-bssids").toStringList().contains(accessPoints.at(i)->hwAddress())) { - cpPriv->state |= QNetworkConfiguration::Discovered; - if (!configuredAccessPoints.contains(accessPoints.at(i)->path())) { - configuredAccessPoints.insert(accessPoints.at(i)->path(),settingsPath); - - const QString accessPointId = accessPoints.at(i)->path(); - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.take(accessPointId); - - if (ptr) { - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - } - break; - } - } - } else if (connectionType == QLatin1String("gsm")) { - - const QString connectionPath = map.value("connection").value("id").toString(); - cpPriv->name = contextName(connectionPath); - cpPriv->bearerType = currentBearerType(connectionPath); - - if (ofonoManager && ofonoManager->isValid()) { - const QString contextPart = connectionPath.section('/', -1); - for (auto i = ofonoContextManagers.cbegin(), end = ofonoContextManagers.cend(); i != end; ++i) { - const QString path = i.key() + QLatin1Char('/') +contextPart; - if (isActiveContext(path)) { - cpPriv->state |= QNetworkConfiguration::Active; - break; - } - } - } - } - - return cpPriv; -} - -bool QNetworkManagerEngine::isActiveContext(const QString &contextPath) const -{ - if (ofonoManager && ofonoManager->isValid()) { - const QString contextPart = contextPath.section('/', -1); - for (QOfonoDataConnectionManagerInterface *iface : ofonoContextManagers) { - const PathPropertiesList list = iface->contextsWithProperties(); - for (int i = 0; i < list.size(); ++i) { - if (list.at(i).path.path().contains(contextPart)) { - return list.at(i).properties.value(QStringLiteral("Active")).toBool(); - - } - } - } - } - return false; -} - -QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const QString &id) const -{ - for (int i = 0; i < connections.count(); ++i) { - QNetworkManagerSettingsConnection *connection = connections.at(i); - if (id == connection->path()) - return connection; - } - - return 0; -} - -QNetworkSession::State QNetworkManagerEngine::sessionStateForId(const QString &id) -{ - QMutexLocker locker(&mutex); - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr) - return QNetworkSession::Invalid; - - if (!ptr->isValid) - return QNetworkSession::Invalid; - - for (QNetworkManagerConnectionActive *activeConnection : qAsConst(activeConnectionsList)) { - const QString identifier = activeConnection->connection().path(); - - if (id == identifier) { - switch (activeConnection->state()) { - case 0: - return QNetworkSession::Disconnected; - case 1: - return QNetworkSession::Connecting; - case 2: - return QNetworkSession::Connected; - } - } - } - - if ((ptr->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) - return QNetworkSession::Disconnected; - else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) - return QNetworkSession::NotAvailable; - else if ((ptr->state & QNetworkConfiguration::Undefined) == QNetworkConfiguration::Undefined) - return QNetworkSession::NotAvailable; - - return QNetworkSession::Invalid; -} - -quint64 QNetworkManagerEngine::bytesWritten(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (ptr && (ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - const QString networkInterface = connectionInterfaces.value(id); - if (!networkInterface.isEmpty()) { - const QString devFile = QLatin1String("/sys/class/net/") + - networkInterface + - QLatin1String("/statistics/tx_bytes"); - - quint64 result = Q_UINT64_C(0); - - QFile tx(devFile); - if (tx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&tx); - in >> result; - tx.close(); - } - - return result; - } - } - - return Q_UINT64_C(0); -} - -quint64 QNetworkManagerEngine::bytesReceived(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - if (ptr && (ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - const QString networkInterface = connectionInterfaces.value(id); - if (!networkInterface.isEmpty()) { - const QString devFile = QLatin1String("/sys/class/net/") + - networkInterface + - QLatin1String("/statistics/rx_bytes"); - - quint64 result = Q_UINT64_C(0); - - QFile tx(devFile); - if (tx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&tx); - in >> result; - tx.close(); - } - - return result; - } - } - - return Q_UINT64_C(0); -} - -quint64 QNetworkManagerEngine::startTime(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = connectionFromId(id); - if (connection) - return connection->getTimestamp(); - else - return Q_UINT64_C(0); -} - -QNetworkConfigurationManager::Capabilities QNetworkManagerEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming | - QNetworkConfigurationManager::DataStatistics | - QNetworkConfigurationManager::CanStartAndStopInterfaces; -} - -QNetworkSessionPrivate *QNetworkManagerEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QNetworkManagerEngine::defaultConfiguration() -{ - for (QNetworkManagerConnectionActive *activeConnection : qAsConst(activeConnectionsList)) { - if ((activeConnection->defaultRoute() || activeConnection->default6Route())) { - return accessPointConfigurations.value(activeConnection->connection().path()); - } - } - - return QNetworkConfigurationPrivatePointer(); -} - -QNetworkConfiguration::BearerType QNetworkManagerEngine::currentBearerType(const QString &id) const -{ - QString contextPart = id.section('/', -1); - for (auto i = ofonoContextManagers.begin(), end = ofonoContextManagers.end(); i != end; ++i) { - QString contextPath = i.key() + QLatin1Char('/') +contextPart; - - if (i.value()->contexts().contains(contextPath)) { - - QString bearer = i.value()->bearer(); - - if (bearer == QLatin1String("gsm")) { - return QNetworkConfiguration::Bearer2G; - } else if (bearer == QLatin1String("edge")) { - return QNetworkConfiguration::Bearer2G; - } else if (bearer == QLatin1String("umts")) { - return QNetworkConfiguration::BearerWCDMA; - } else if (bearer == QLatin1String("hspa") - || bearer == QLatin1String("hsdpa") - || bearer == QLatin1String("hsupa")) { - return QNetworkConfiguration::BearerHSPA; - } else if (bearer == QLatin1String("lte")) { - return QNetworkConfiguration::BearerLTE; - } - } - } - - return QNetworkConfiguration::BearerUnknown; -} - -QString QNetworkManagerEngine::contextName(const QString &path) const -{ - QString contextPart = path.section('/', -1); - for (QOfonoDataConnectionManagerInterface *iface : ofonoContextManagers) { - const PathPropertiesList list = iface->contextsWithProperties(); - for (int i = 0; i < list.size(); ++i) { - if (list.at(i).path.path().contains(contextPart)) { - return list.at(i).properties.value(QStringLiteral("Name")).toString(); - } - } - } - return path; -} - -void QNetworkManagerEngine::nmRegistered(const QString &) -{ - if (ofonoManager) { - delete ofonoManager; - ofonoManager = NULL; - } - managerInterface = new QNetworkManagerInterface(this); - systemSettings = new QNetworkManagerSettings(NM_DBUS_SERVICE, this); - - connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)), - this, SLOT(activationFinished(QDBusPendingCallWatcher*))); - connect(managerInterface, SIGNAL(propertiesChanged(QMap)), - this, SLOT(interfacePropertiesChanged(QMap))); - managerInterface->setConnections(); - - connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)), - this, SLOT(newConnection(QDBusObjectPath))); - systemSettings->setConnections(); - nmAvailable = true; - - setupConfigurations(); -} - -void QNetworkManagerEngine::nmUnRegistered(const QString &) -{ - if (systemSettings) { - delete systemSettings; - systemSettings = NULL; - } - if (managerInterface) { - delete managerInterface; - managerInterface = NULL; - } -} - -void QNetworkManagerEngine::ofonoRegistered(const QString &) -{ - if (ofonoManager) { - delete ofonoManager; - ofonoManager = NULL; - } - ofonoManager = new QOfonoManagerInterface(this); - if (ofonoManager && ofonoManager->isValid()) { - const auto modems = ofonoManager->getModems(); - for (const QString &modem : modems) { - QOfonoDataConnectionManagerInterface *ofonoContextManager - = new QOfonoDataConnectionManagerInterface(modem,this); - ofonoContextManagers.insert(modem, ofonoContextManager); - } - } -} - -void QNetworkManagerEngine::ofonoUnRegistered(const QString &) -{ - ofonoContextManagers.clear(); -} - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h deleted file mode 100644 index c624d6087d..0000000000 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h +++ /dev/null @@ -1,153 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKMANAGERENGINE_P_H -#define QNETWORKMANAGERENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include "qnetworkmanagerservice.h" - -#include - -#include -#include - -#ifndef QT_NO_DBUS - -QT_BEGIN_NAMESPACE - -class QNetworkManagerEngine : public QBearerEngineImpl -{ - Q_OBJECT - -public: - QNetworkManagerEngine(QObject *parent = nullptr); - ~QNetworkManagerEngine(); - - bool networkManagerAvailable() const; - - QString getInterfaceFromId(const QString &id) override; - bool hasIdentifier(const QString &id) override; - - void connectToId(const QString &id) override; - void disconnectFromId(const QString &id) override; - - Q_INVOKABLE void initialize(); - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id) override; - - quint64 bytesWritten(const QString &id) override; - quint64 bytesReceived(const QString &id) override; - quint64 startTime(const QString &id) override; - - QNetworkConfigurationManager::Capabilities capabilities() const override; - - QNetworkSessionPrivate *createSessionBackend() override; - - QNetworkConfigurationPrivatePointer defaultConfiguration() override; - -private Q_SLOTS: - void interfacePropertiesChanged(const QMap &properties); - void activeConnectionPropertiesChanged(const QMap &properties); - - void newConnection(const QDBusObjectPath &path, QNetworkManagerSettings *settings = nullptr); - void removeConnection(const QString &path); - void updateConnection(); - void activationFinished(QDBusPendingCallWatcher *watcher); - void deviceConnectionsChanged(const QStringList &activeConnectionsList); - - void wiredCarrierChanged(bool); - - void nmRegistered(const QString &serviceName = QString()); - void nmUnRegistered(const QString &serviceName = QString()); - - void ofonoRegistered(const QString &serviceName = QString()); - void ofonoUnRegistered(const QString &serviceName = QString()); - -private: - QNetworkConfigurationPrivate *parseConnection(const QString &settingsPath, - const QNmSettingsMap &map); - QNetworkManagerSettingsConnection *connectionFromId(const QString &id) const; - - QNetworkManagerInterface *managerInterface; - QNetworkManagerSettings *systemSettings; - QHash wiredDevices; - QHash wirelessDevices; - - QHash activeConnectionsList; - QList connections; - QList accessPoints; - QHash interfaceDevices; - - QMap configuredAccessPoints; //ap, settings path - QHash connectionInterfaces; // ac, interface - - QOfonoManagerInterface *ofonoManager; - QHash ofonoContextManagers; - QNetworkConfiguration::BearerType currentBearerType(const QString &id) const; - QString contextName(const QString &path) const; - - bool isConnectionActive(const QString &settingsPath) const; - QDBusServiceWatcher *ofonoWatcher; - QDBusServiceWatcher *nmWatcher; - - bool isActiveContext(const QString &contextPath) const; - bool nmAvailable; - void setupConfigurations(); -}; - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS - -#endif - diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp deleted file mode 100644 index 2d6cba1791..0000000000 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp +++ /dev/null @@ -1,1019 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "qnetworkmanagerservice.h" - -#ifndef QT_NO_DBUS - -#define DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" - -QT_BEGIN_NAMESPACE - - -QNetworkManagerInterface::QNetworkManagerInterface(QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - NM_DBUS_INTERFACE, - QDBusConnection::systemBus(),parent) -{ - if (!isValid()) { - return; - } - - PropertiesDBusInterface managerPropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - DBUS_PROPERTIES_INTERFACE, - QDBusConnection::systemBus()); - QDBusPendingReply propsReply - = managerPropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } else { - qWarning() << "propsReply" << propsReply.error().message(); - } - - QDBusPendingReply > nmReply - = call(QLatin1String("GetDevices")); - nmReply.waitForFinished(); - if (!nmReply.isError()) { - devicesPathList = nmReply.value(); - } else { - qWarning() << "nmReply" << nmReply.error().message(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerInterface::~QNetworkManagerInterface() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("DeviceAdded"), - this,SIGNAL(deviceAdded(QDBusObjectPath))); - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("DeviceRemoved"), - this,SIGNAL(deviceRemoved(QDBusObjectPath))); -} - -bool QNetworkManagerInterface::setConnections() -{ - if (!isValid()) - return false; - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); - - bool allOk = false; - if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("DeviceAdded"), - this,SIGNAL(deviceAdded(QDBusObjectPath)))) { - allOk = true; - } - if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - QLatin1String(NM_DBUS_PATH), - QLatin1String(NM_DBUS_INTERFACE), - QLatin1String("DeviceRemoved"), - this,SIGNAL(deviceRemoved(QDBusObjectPath)))) { - allOk = true; - } - - return allOk; -} - -QList QNetworkManagerInterface::getDevices() -{ - if (devicesPathList.isEmpty()) { - //qWarning("using blocking call!"); - QDBusReply > reply = call(QLatin1String("GetDevices")); - devicesPathList = reply.value(); - } - return devicesPathList; -} - -void QNetworkManagerInterface::activateConnection(QDBusObjectPath connectionPath, - QDBusObjectPath devicePath, - QDBusObjectPath specificObject) -{ - QDBusPendingCall pendingCall = asyncCall(QLatin1String("ActivateConnection"), - QVariant::fromValue(connectionPath), - QVariant::fromValue(devicePath), - QVariant::fromValue(specificObject)); - - QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(pendingCall); - connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SIGNAL(activationFinished(QDBusPendingCallWatcher*))); -} - -void QNetworkManagerInterface::deactivateConnection(QDBusObjectPath connectionPath) -{ - asyncCall(QLatin1String("DeactivateConnection"), QVariant::fromValue(connectionPath)); -} - -bool QNetworkManagerInterface::wirelessEnabled() const -{ - if (propertyMap.contains("WirelessEnabled")) - return propertyMap.value("WirelessEnabled").toBool(); - return false; -} - -bool QNetworkManagerInterface::wirelessHardwareEnabled() const -{ - if (propertyMap.contains("WirelessHardwareEnabled")) - return propertyMap.value("WirelessHardwareEnabled").toBool(); - return false; -} - -QList QNetworkManagerInterface::activeConnections() const -{ - if (propertyMap.contains("ActiveConnections")) { - - const QDBusArgument &dbusArgs = qvariant_cast(propertyMap.value("ActiveConnections")); - QDBusObjectPath path; - QList list; - - dbusArgs.beginArray(); - while (!dbusArgs.atEnd()) { - dbusArgs >> path; - list.append(path); - } - dbusArgs.endArray(); - - return list; - } - - QList list; - list << QDBusObjectPath(); - return list; -} - -QNetworkManagerInterface::NMState QNetworkManagerInterface::state() -{ - if (propertyMap.contains("State")) - return static_cast(propertyMap.value("State").toUInt()); - return QNetworkManagerInterface::NM_STATE_UNKNOWN; -} - -QString QNetworkManagerInterface::version() const -{ - if (propertyMap.contains("Version")) - return propertyMap.value("Version").toString(); - return QString(); -} - -void QNetworkManagerInterface::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) { - propertyMap.insert(i.key(),i.value()); - - if (i.key() == QLatin1String("State")) { - quint32 state = i.value().toUInt(); - if (state == NM_DEVICE_STATE_ACTIVATED - || state == NM_DEVICE_STATE_DISCONNECTED - || state == NM_DEVICE_STATE_UNAVAILABLE - || state == NM_DEVICE_STATE_FAILED) { - Q_EMIT propertiesChanged(map); - Q_EMIT stateChanged(state); - } - } else if (i.key() == QLatin1String("ActiveConnections")) { - Q_EMIT propertiesChanged(map); - } - } -} - -QNetworkManagerInterfaceAccessPoint::QNetworkManagerInterfaceAccessPoint(const QString &dbusPathName, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - dbusPathName, - NM_DBUS_INTERFACE_ACCESS_POINT, - QDBusConnection::systemBus(),parent) -{ -} - -QNetworkManagerInterfaceAccessPoint::~QNetworkManagerInterfaceAccessPoint() -{ -} - -quint32 QNetworkManagerInterfaceAccessPoint::flags() const -{ - if (propertyMap.contains("Flags")) - return propertyMap.value("Flags").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceAccessPoint::wpaFlags() const -{ - if (propertyMap.contains("WpaFlags")) - return propertyMap.value("WpaFlags").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceAccessPoint::rsnFlags() const -{ - if (propertyMap.contains("RsnFlags")) - return propertyMap.value("RsnFlags").toUInt(); - return 0; -} - -QString QNetworkManagerInterfaceAccessPoint::ssid() const -{ - if (propertyMap.contains("Ssid")) - return propertyMap.value("Ssid").toString(); - return QString(); -} - -quint32 QNetworkManagerInterfaceAccessPoint::frequency() const -{ - if (propertyMap.contains("Frequency")) - return propertyMap.value("Frequency").toUInt(); - return 0; -} - -QString QNetworkManagerInterfaceAccessPoint::hwAddress() const -{ - if (propertyMap.contains("HwAddress")) - return propertyMap.value("HwAddress").toString(); - return QString(); -} - -quint32 QNetworkManagerInterfaceAccessPoint::mode() const -{ - if (propertyMap.contains("Mode")) - return propertyMap.value("Mode").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceAccessPoint::maxBitrate() const -{ - if (propertyMap.contains("MaxBitrate")) - return propertyMap.value("MaxBitrate").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceAccessPoint::strength() const -{ - if (propertyMap.contains("Strength")) - return propertyMap.value("Strength").toUInt(); - return 0; -} - -void QNetworkManagerInterfaceAccessPoint::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) - propertyMap.insert(i.key(),i.value()); -} - -QNetworkManagerInterfaceDevice::QNetworkManagerInterfaceDevice(const QString &deviceObjectPath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - deviceObjectPath, - NM_DBUS_INTERFACE_DEVICE, - QDBusConnection::systemBus(),parent) -{ - - if (!isValid()) { - return; - } - PropertiesDBusInterface devicePropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - deviceObjectPath, - DBUS_PROPERTIES_INTERFACE, - QDBusConnection::systemBus(),parent); - - QDBusPendingReply propsReply - = devicePropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE_DEVICE)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - deviceObjectPath, - QLatin1String(NM_DBUS_INTERFACE_DEVICE), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerInterfaceDevice::~QNetworkManagerInterfaceDevice() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - path(), - QLatin1String(NM_DBUS_INTERFACE_DEVICE), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QString QNetworkManagerInterfaceDevice::udi() const -{ - if (propertyMap.contains("Udi")) - return propertyMap.value("Udi").toString(); - return QString(); -} - -QString QNetworkManagerInterfaceDevice::networkInterface() const -{ - if (propertyMap.contains("Interface")) - return propertyMap.value("Interface").toString(); - return QString(); -} - -quint32 QNetworkManagerInterfaceDevice::ip4Address() const -{ - if (propertyMap.contains("Ip4Address")) - return propertyMap.value("Ip4Address").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceDevice::state() const -{ - if (propertyMap.contains("State")) - return propertyMap.value("State").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceDevice::deviceType() const -{ - if (propertyMap.contains("DeviceType")) - return propertyMap.value("DeviceType").toUInt(); - return 0; -} - -QDBusObjectPath QNetworkManagerInterfaceDevice::ip4config() const -{ - if (propertyMap.contains("Ip4Config")) - return qvariant_cast(propertyMap.value("Ip4Config")); - return QDBusObjectPath(); -} - -void QNetworkManagerInterfaceDevice::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) { - if (i.key() == QLatin1String("AvailableConnections")) { //Device - const QDBusArgument &dbusArgs = qvariant_cast(i.value()); - QDBusObjectPath path; - QStringList paths; - dbusArgs.beginArray(); - while (!dbusArgs.atEnd()) { - dbusArgs >> path; - paths << path.path(); - } - dbusArgs.endArray(); - Q_EMIT connectionsChanged(paths); - } - propertyMap.insert(i.key(),i.value()); - } - Q_EMIT propertiesChanged(map); -} - -QNetworkManagerInterfaceDeviceWired::QNetworkManagerInterfaceDeviceWired(const QString &ifaceDevicePath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - NM_DBUS_INTERFACE_DEVICE_WIRED, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } - PropertiesDBusInterface deviceWiredPropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - DBUS_PROPERTIES_INTERFACE, - QDBusConnection::systemBus(),parent); - - QDBusPendingReply propsReply - = deviceWiredPropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerInterfaceDeviceWired::~QNetworkManagerInterfaceDeviceWired() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - path(), - QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QString QNetworkManagerInterfaceDeviceWired::hwAddress() const -{ - if (propertyMap.contains("HwAddress")) - return propertyMap.value("HwAddress").toString(); - return QString(); -} - -quint32 QNetworkManagerInterfaceDeviceWired::speed() const -{ - if (propertyMap.contains("Speed")) - return propertyMap.value("Speed").toUInt(); - return 0; -} - -bool QNetworkManagerInterfaceDeviceWired::carrier() const -{ - if (propertyMap.contains("Carrier")) - return propertyMap.value("Carrier").toBool(); - return false; -} - -QStringList QNetworkManagerInterfaceDeviceWired::availableConnections() -{ - QStringList list; - if (propertyMap.contains("AvailableConnections")) { - const QDBusArgument &dbusArgs = qvariant_cast(propertyMap.value("Carrier")); - QDBusObjectPath path; - dbusArgs.beginArray(); - while (!dbusArgs.atEnd()) { - dbusArgs >> path; - list << path.path(); - } - dbusArgs.endArray(); - } - - return list; -} - -void QNetworkManagerInterfaceDeviceWired::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) { - propertyMap.insert(i.key(),i.value()); - if (i.key() == QLatin1String("Carrier")) - Q_EMIT carrierChanged(i.value().toBool()); - } - Q_EMIT propertiesChanged(map); -} - -QNetworkManagerInterfaceDeviceWireless::QNetworkManagerInterfaceDeviceWireless(const QString &ifaceDevicePath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - NM_DBUS_INTERFACE_DEVICE_WIRELESS, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } - - interfacePath = ifaceDevicePath; - QDBusPendingReply > nmReply - = call(QLatin1String("GetAccessPoints")); - - if (!nmReply.isError()) { - accessPointsList = nmReply.value(); - } - - PropertiesDBusInterface deviceWirelessPropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - interfacePath, - DBUS_PROPERTIES_INTERFACE, - QDBusConnection::systemBus(),parent); - - QDBusPendingReply propsReply - = deviceWirelessPropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - interfacePath, - QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerInterfaceDeviceWireless::~QNetworkManagerInterfaceDeviceWireless() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - path(), - QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -bool QNetworkManagerInterfaceDeviceWireless::setConnections() -{ - return true; -} - -QList QNetworkManagerInterfaceDeviceWireless::getAccessPoints() -{ - if (accessPointsList.isEmpty()) { - //qWarning("Using blocking call!"); - QDBusReply > reply - = call(QLatin1String("GetAccessPoints")); - accessPointsList = reply.value(); - } - return accessPointsList; -} - -QString QNetworkManagerInterfaceDeviceWireless::hwAddress() const -{ - if (propertyMap.contains("HwAddress")) - return propertyMap.value("HwAddress").toString(); - return QString(); -} - -quint32 QNetworkManagerInterfaceDeviceWireless::mode() const -{ - if (propertyMap.contains("Mode")) - return propertyMap.value("Mode").toUInt(); - return 0; -} - -quint32 QNetworkManagerInterfaceDeviceWireless::bitrate() const -{ - if (propertyMap.contains("Bitrate")) - return propertyMap.value("Bitrate").toUInt(); - return 0; -} - -QDBusObjectPath QNetworkManagerInterfaceDeviceWireless::activeAccessPoint() const -{ - if (propertyMap.contains("ActiveAccessPoint")) - return qvariant_cast(propertyMap.value("ActiveAccessPoint")); - return QDBusObjectPath(); -} - -quint32 QNetworkManagerInterfaceDeviceWireless::wirelessCapabilities() const -{ - if (propertyMap.contains("WirelelessCapabilities")) - return propertyMap.value("WirelelessCapabilities").toUInt(); - return 0; -} - -void QNetworkManagerInterfaceDeviceWireless::requestScan() -{ - asyncCall(QLatin1String("RequestScan")); -} - -void QNetworkManagerInterfaceDeviceWireless::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) { - propertyMap.insert(i.key(),i.value()); - if (i.key() == QLatin1String("ActiveAccessPoint")) //DeviceWireless - Q_EMIT propertiesChanged(map); - } -} - -QNetworkManagerInterfaceDeviceModem::QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - NM_DBUS_INTERFACE_DEVICE_MODEM, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } - PropertiesDBusInterface deviceModemPropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - QLatin1String("org.freedesktop.DBus.Properties"), - QDBusConnection::systemBus(),parent); - - QDBusPendingReply propsReply - = deviceModemPropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - ifaceDevicePath, - QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerInterfaceDeviceModem::~QNetworkManagerInterfaceDeviceModem() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - path(), - QLatin1String(NM_DBUS_PATH_SETTINGS), - QLatin1String(NM_DBUS_IFACE_SETTINGS), - QLatin1String("NewConnection"), - this, SIGNAL(newConnection(QDBusObjectPath))); -} - -QNetworkManagerInterfaceDeviceModem::ModemCapabilities QNetworkManagerInterfaceDeviceModem::modemCapabilities() const -{ - if (propertyMap.contains("ModemCapabilities")) - return static_cast(propertyMap.value("ModemCapabilities").toUInt()); - return QNetworkManagerInterfaceDeviceModem::None; -} - -QNetworkManagerInterfaceDeviceModem::ModemCapabilities QNetworkManagerInterfaceDeviceModem::currentCapabilities() const -{ - if (propertyMap.contains("CurrentCapabilities")) - return static_cast(propertyMap.value("CurrentCapabilities").toUInt()); - return QNetworkManagerInterfaceDeviceModem::None; -} - -void QNetworkManagerInterfaceDeviceModem::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) - propertyMap.insert(i.key(),i.value()); - Q_EMIT propertiesChanged(map); -} - - -QNetworkManagerSettings::QNetworkManagerSettings(const QString &settingsService, QObject *parent) - : QDBusAbstractInterface(settingsService, - NM_DBUS_PATH_SETTINGS, - NM_DBUS_IFACE_SETTINGS, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } - interfacePath = settingsService; - QDBusPendingReply > nmReply - = call(QLatin1String("ListConnections")); - - if (!nmReply.isError()) { - connectionsList = nmReply.value(); - } -} - -QNetworkManagerSettings::~QNetworkManagerSettings() -{ -} - -bool QNetworkManagerSettings::setConnections() -{ - bool allOk = true; - if (!QDBusConnection::systemBus().connect(interfacePath, - QLatin1String(NM_DBUS_PATH_SETTINGS), - QLatin1String(NM_DBUS_IFACE_SETTINGS), - QLatin1String("NewConnection"), - this, SIGNAL(newConnection(QDBusObjectPath)))) { - allOk = false; - qWarning("NewConnection could not be connected"); - } - - return allOk; -} - -QList QNetworkManagerSettings::listConnections() -{ - if (connectionsList.isEmpty()) { - //qWarning("Using blocking call!"); - QDBusReply > reply - = call(QLatin1String("ListConnections")); - connectionsList = reply.value(); - } - return connectionsList; -} - - -QString QNetworkManagerSettings::getConnectionByUuid(const QString &uuid) -{ - QDBusReply reply = call(QDBus::Block, QLatin1String("GetConnectionByUuid"), uuid); - return reply.value().path(); -} - -QNetworkManagerSettingsConnection::QNetworkManagerSettingsConnection(const QString &settingsService, const QString &connectionObjectPath, QObject *parent) - : QDBusAbstractInterface(settingsService, - connectionObjectPath, - NM_DBUS_IFACE_SETTINGS_CONNECTION, - QDBusConnection::systemBus(), parent) -{ - qDBusRegisterMetaType(); - if (!isValid()) { - return; - } - interfacepath = connectionObjectPath; - QDBusPendingReply nmReply - = call(QLatin1String("GetSettings")); - if (!nmReply.isError()) { - settingsMap = nmReply.value(); - } -} - -QNetworkManagerSettingsConnection::~QNetworkManagerSettingsConnection() -{ - QDBusConnection::systemBus().disconnect(service(), - path(), - QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), - QLatin1String("Updated"), - this, SIGNAL(updated())); - QDBusConnection::systemBus().disconnect(service(), - path(), - QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), - QLatin1String("Removed"), - this, SIGNAL(slotSettingsRemoved())); -} - -bool QNetworkManagerSettingsConnection::setConnections() -{ - if (!isValid()) - return false; - - QDBusConnection dbusConnection = QDBusConnection::systemBus(); - bool allOk = true; - if (!dbusConnection.connect(service(), - interfacepath, - QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), - QLatin1String("Updated"), - this, SIGNAL(updated()))) { - allOk = false; - } - - if (!dbusConnection.connect(service(), - interfacepath, - QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), - QLatin1String("Removed"), - this, SIGNAL(slotSettingsRemoved()))) { - allOk = false; - } - return allOk; -} - -void QNetworkManagerSettingsConnection::slotSettingsRemoved() -{ - Q_EMIT removed(interfacepath); -} - -QNmSettingsMap QNetworkManagerSettingsConnection::getSettings() -{ - if (settingsMap.isEmpty()) { - //qWarning("Using blocking call!"); - QDBusReply reply = call(QLatin1String("GetSettings")); - settingsMap = reply.value(); - } - return settingsMap; -} - -NMDeviceType QNetworkManagerSettingsConnection::getType() -{ - const QString devType = - settingsMap.value(QLatin1String("connection")).value(QLatin1String("type")).toString(); - - if (devType == QLatin1String("802-3-ethernet")) - return DEVICE_TYPE_ETHERNET; - else if (devType == QLatin1String("802-11-wireless")) - return DEVICE_TYPE_WIFI; - else if (devType == QLatin1String("gsm")) - return DEVICE_TYPE_MODEM; - else - return DEVICE_TYPE_UNKNOWN; -} - -bool QNetworkManagerSettingsConnection::isAutoConnect() -{ - const QVariant autoConnect = - settingsMap.value(QLatin1String("connection")).value(QLatin1String("autoconnect")); - - // NetworkManager default is to auto connect - if (!autoConnect.isValid()) - return true; - - return autoConnect.toBool(); -} - -quint64 QNetworkManagerSettingsConnection::getTimestamp() -{ - return settingsMap.value(QLatin1String("connection")) - .value(QLatin1String("timestamp")).toUInt(); -} - -QString QNetworkManagerSettingsConnection::getId() -{ - return settingsMap.value(QLatin1String("connection")).value(QLatin1String("id")).toString(); -} - -QString QNetworkManagerSettingsConnection::getUuid() -{ - const QString id = settingsMap.value(QLatin1String("connection")) - .value(QLatin1String("uuid")).toString(); - - // is no uuid, return the connection path - return id.isEmpty() ? path() : id; -} - -QString QNetworkManagerSettingsConnection::getSsid() -{ - return settingsMap.value(QLatin1String("802-11-wireless")) - .value(QLatin1String("ssid")).toString(); -} - -QString QNetworkManagerSettingsConnection::getMacAddress() -{ - NMDeviceType type = getType(); - - if (type == DEVICE_TYPE_ETHERNET) { - return settingsMap.value(QLatin1String("802-3-ethernet")) - .value(QLatin1String("mac-address")).toString(); - } else if (type == DEVICE_TYPE_WIFI) { - return settingsMap.value(QLatin1String("802-11-wireless")) - .value(QLatin1String("mac-address")).toString(); - } else { - return QString(); - } -} - -QStringList QNetworkManagerSettingsConnection::getSeenBssids() -{ - if (getType() == DEVICE_TYPE_WIFI) { - return settingsMap.value(QLatin1String("802-11-wireless")) - .value(QLatin1String("seen-bssids")).toStringList(); - } else { - return QStringList(); - } -} - -QNetworkManagerConnectionActive::QNetworkManagerConnectionActive(const QString &activeConnectionObjectPath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - activeConnectionObjectPath, - NM_DBUS_INTERFACE_ACTIVE_CONNECTION, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } - PropertiesDBusInterface connectionActivePropertiesInterface(QLatin1String(NM_DBUS_SERVICE), - activeConnectionObjectPath, - QLatin1String("org.freedesktop.DBus.Properties"), - QDBusConnection::systemBus()); - - - QDBusPendingReply propsReply - = connectionActivePropertiesInterface.call(QDBus::Block, QLatin1String("GetAll"), QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION)); - - if (!propsReply.isError()) { - propertyMap = propsReply.value(); - } else { - qWarning() << propsReply.error().message(); - } - - QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), - activeConnectionObjectPath, - QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QNetworkManagerConnectionActive::~QNetworkManagerConnectionActive() -{ - QDBusConnection::systemBus().disconnect(QLatin1String(NM_DBUS_SERVICE), - path(), - QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION), - QLatin1String("PropertiesChanged"), - this,SLOT(propertiesSwap(QMap))); -} - -QDBusObjectPath QNetworkManagerConnectionActive::connection() const -{ - if (propertyMap.contains("Connection")) - return qvariant_cast(propertyMap.value("Connection")); - return QDBusObjectPath(); -} - -QDBusObjectPath QNetworkManagerConnectionActive::specificObject() const -{ - if (propertyMap.contains("SpecificObject")) - return qvariant_cast(propertyMap.value("SpecificObject")); - return QDBusObjectPath(); -} - -QStringList QNetworkManagerConnectionActive::devices() const -{ - QStringList list; - if (propertyMap.contains("Devices")) { - const QDBusArgument &dbusArgs = qvariant_cast(propertyMap.value("Devices")); - QDBusObjectPath path; - - dbusArgs.beginArray(); - while (!dbusArgs.atEnd()) { - dbusArgs >> path; - list.append(path.path()); - } - dbusArgs.endArray(); - } - return list; -} - -quint32 QNetworkManagerConnectionActive::state() const -{ - if (propertyMap.contains("State")) - return propertyMap.value("State").toUInt(); - return 0; -} - -bool QNetworkManagerConnectionActive::defaultRoute() const -{ - if (propertyMap.contains("Default")) - return propertyMap.value("Default").toBool(); - return false; -} - -bool QNetworkManagerConnectionActive::default6Route() const -{ - if (propertyMap.contains("Default6")) - return propertyMap.value("Default6").toBool(); - return false; -} - -void QNetworkManagerConnectionActive::propertiesSwap(QMap map) -{ - for (auto i = map.cbegin(), end = map.cend(); i != end; ++i) { - propertyMap.insert(i.key(),i.value()); - if (i.key() == QLatin1String("State")) { - quint32 state = i.value().toUInt(); - if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED - || state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) { - Q_EMIT propertiesChanged(map); - } - } - } -} - -QNetworkManagerIp4Config::QNetworkManagerIp4Config( const QString &deviceObjectPath, QObject *parent) - : QDBusAbstractInterface(QLatin1String(NM_DBUS_SERVICE), - deviceObjectPath, - NM_DBUS_INTERFACE_IP4_CONFIG, - QDBusConnection::systemBus(), parent) -{ - if (!isValid()) { - return; - } -} - -QNetworkManagerIp4Config::~QNetworkManagerIp4Config() -{ -} - -QStringList QNetworkManagerIp4Config::domains() const -{ - return property("Domains").toStringList(); -} - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h deleted file mode 100644 index bff7a71097..0000000000 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h +++ /dev/null @@ -1,500 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNETWORKMANAGERSERVICE_H -#define QNETWORKMANAGERSERVICE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#ifndef QT_NO_DBUS - -#ifndef NETWORK_MANAGER_H -typedef enum NMDeviceType -{ - DEVICE_TYPE_UNKNOWN = 0, - DEVICE_TYPE_ETHERNET, - DEVICE_TYPE_WIFI, - DEVICE_TYPE_MODEM = 8 -} NMDeviceType; - -typedef enum -{ - NM_DEVICE_STATE_UNKNOWN = 0, - NM_DEVICE_STATE_UNMANAGED = 10, - NM_DEVICE_STATE_UNAVAILABLE = 20, - NM_DEVICE_STATE_DISCONNECTED = 30, - NM_DEVICE_STATE_PREPARE = 40, - NM_DEVICE_STATE_CONFIG = 50, - NM_DEVICE_STATE_NEED_AUTH = 60, - NM_DEVICE_STATE_IP_CONFIG = 70, - NM_DEVICE_STATE_ACTIVATED = 100, - NM_DEVICE_STATE_DEACTIVATING = 110, - NM_DEVICE_STATE_FAILED = 120 -} NMDeviceState; - -typedef enum -{ - NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0, - NM_ACTIVE_CONNECTION_STATE_ACTIVATING, - NM_ACTIVE_CONNECTION_STATE_ACTIVATED, - NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4 -} NMActiveConnectionState; - -#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager" - -#define NM_DBUS_PATH "/org/freedesktop/NetworkManager" -#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager" -#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" - -#define NM_DBUS_PATH_SETTINGS "/org/freedesktop/NetworkManager/Settings" - -#define NM_DBUS_IFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection" -#define NM_DBUS_IFACE_SETTINGS "org.freedesktop.NetworkManager.Settings" -#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION NM_DBUS_INTERFACE ".Connection.Active" -#define NM_DBUS_INTERFACE_IP4_CONFIG NM_DBUS_INTERFACE ".IP4Config" - -#define NM_DBUS_SERVICE_USER_SETTINGS "org.freedesktop.NetworkManagerUserSettings" -#define NM_DBUS_SERVICE_SYSTEM_SETTINGS "org.freedesktop.NetworkManagerSystemSettings" - -#define NM_802_11_AP_FLAGS_NONE 0x00000000 -#define NM_802_11_AP_FLAGS_PRIVACY 0x00000001 -#endif - -QT_BEGIN_NAMESPACE - -typedef QMap< QString, QMap > QNmSettingsMap; -typedef QList ServerThing; - -QT_END_NAMESPACE - -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QNmSettingsMap)) -Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ServerThing)) - -QT_BEGIN_NAMESPACE - -class QNetworkManagerInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - typedef enum - { - NM_STATE_UNKNOWN = 0, - NM_STATE_ASLEEP = 10, - NM_STATE_DISCONNECTED = 20, - NM_STATE_DISCONNECTING = 30, - NM_STATE_CONNECTING = 40, - NM_STATE_CONNECTED_LOCAL = 50, - NM_STATE_CONNECTED_SITE = 60, - NM_STATE_CONNECTED_GLOBAL = 70 - } NMState; - - QNetworkManagerInterface(QObject *parent = nullptr); - ~QNetworkManagerInterface(); - - QList getDevices(); - void activateConnection(QDBusObjectPath connection,QDBusObjectPath device, QDBusObjectPath specificObject); - void deactivateConnection(QDBusObjectPath connectionPath); - - QDBusObjectPath path() const; - - bool wirelessEnabled() const; - bool wirelessHardwareEnabled() const; - QList activeConnections() const; - NMState state(); - QString version() const; - bool setConnections(); - -Q_SIGNALS: - void deviceAdded(QDBusObjectPath); - void deviceRemoved(QDBusObjectPath); - void propertiesChanged(QMap); - void stateChanged(quint32); - void activationFinished(QDBusPendingCallWatcher*); - void propertiesReady(); - void devicesListReady(); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; - QList devicesPathList; - -}; - -class QNetworkManagerInterfaceAccessPoint : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - enum DeviceState { - Unknown = 0, - Unmanaged, - Unavailable, - Disconnected, - Prepare, - Config, - NeedAuthentication, - IpConfig, - Activated, - Failed - }; - - enum ApFlag { - ApNone = 0x0, - Privacy = 0x1 - }; - - Q_DECLARE_FLAGS(ApFlags, ApFlag) - - enum ApSecurityFlag { - ApSecurityNone = 0x0, - PairWep40 = 0x1, - PairWep104 = 0x2, - PairTkip = 0x4, - PairCcmp = 0x8, - GroupWep40 = 0x10, - GroupWep104 = 0x20, - GroupTkip = 0x40, - GroupCcmp = 0x80, - KeyPsk = 0x100, - Key8021x = 0x200 - }; - - Q_DECLARE_FLAGS(ApSecurityFlags, ApSecurityFlag) - - explicit QNetworkManagerInterfaceAccessPoint(const QString &dbusPathName, QObject *parent = nullptr); - ~QNetworkManagerInterfaceAccessPoint(); - - quint32 flags() const; - quint32 wpaFlags() const; - quint32 rsnFlags() const; - QString ssid() const; - quint32 frequency() const; - QString hwAddress() const; - quint32 mode() const; - quint32 maxBitrate() const; - quint32 strength() const; - // bool setConnections(); - -Q_SIGNALS: - void propertiesChanged(QMap); - void propertiesReady(); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; -}; - -class QNetworkManagerInterfaceDevice : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - explicit QNetworkManagerInterfaceDevice(const QString &deviceObjectPath, QObject *parent = nullptr); - ~QNetworkManagerInterfaceDevice(); - - QString udi() const; - QString networkInterface() const; - quint32 ip4Address() const; - quint32 state() const; - quint32 deviceType() const; - - QDBusObjectPath ip4config() const; - -Q_SIGNALS: - void stateChanged(const QString &, quint32); - void propertiesChanged(QMap); - void connectionsChanged(QStringList); - void propertiesReady(); -private Q_SLOTS: - void propertiesSwap(QMap); -private: - QVariantMap propertyMap; -}; - -class QNetworkManagerInterfaceDeviceWired : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - explicit QNetworkManagerInterfaceDeviceWired(const QString &ifaceDevicePath, - QObject *parent = nullptr); - ~QNetworkManagerInterfaceDeviceWired(); - - QString hwAddress() const; - quint32 speed() const; - bool carrier() const; - QStringList availableConnections(); - -Q_SIGNALS: - void propertiesChanged(QMap); - void propertiesReady(); - void carrierChanged(bool); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; -}; - -class QNetworkManagerInterfaceDeviceWireless : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - enum DeviceCapability { - None = 0x0, - Wep40 = 0x1, - Wep104 = 0x2, - Tkip = 0x4, - Ccmp = 0x8, - Wpa = 0x10, - Rsn = 0x20 - }; - - explicit QNetworkManagerInterfaceDeviceWireless(const QString &ifaceDevicePath, - QObject *parent = nullptr); - ~QNetworkManagerInterfaceDeviceWireless(); - - QList getAccessPoints(); - - QString hwAddress() const; - quint32 mode() const; - quint32 bitrate() const; - QDBusObjectPath activeAccessPoint() const; - quint32 wirelessCapabilities() const; - bool setConnections(); - - void requestScan(); -Q_SIGNALS: - void propertiesChanged(QMap); - void propertiesReady(); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; - QList accessPointsList; - QString interfacePath; -}; - -class QNetworkManagerInterfaceDeviceModem : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - enum ModemCapability { - None = 0x0, - Pots = 0x1, - Cmda_Edvo = 0x2, - Gsm_Umts = 0x4, - Lte = 0x08 - }; - Q_DECLARE_FLAGS(ModemCapabilities, ModemCapability) - - explicit QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath, - QObject *parent = nullptr); - ~QNetworkManagerInterfaceDeviceModem(); - - ModemCapabilities modemCapabilities() const; - ModemCapabilities currentCapabilities() const; - -Q_SIGNALS: - void propertiesChanged(QMap); - void propertiesReady(); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkManagerInterfaceDeviceModem::ModemCapabilities) - -class QNetworkManagerSettings : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - explicit QNetworkManagerSettings(const QString &settingsService, QObject *parent = nullptr); - ~QNetworkManagerSettings(); - - QList listConnections(); - QString getConnectionByUuid(const QString &uuid); - bool setConnections(); - -Q_SIGNALS: - void newConnection(QDBusObjectPath); - void connectionsListReady(); -private: - QList connectionsList; - QString interfacePath; -}; - -class QNetworkManagerSettingsConnection : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QNetworkManagerSettingsConnection(const QString &settingsService, const QString &connectionObjectPath, QObject *parent = nullptr); - ~QNetworkManagerSettingsConnection(); - - QNmSettingsMap getSettings(); - bool setConnections(); - NMDeviceType getType(); - bool isAutoConnect(); - quint64 getTimestamp(); - QString getId(); - QString getUuid(); - QString getSsid(); - QString getMacAddress(); - QStringList getSeenBssids(); - -Q_SIGNALS: - void updated(); - void removed(const QString &path); - void settingsReady(); - -private Q_SLOTS: - void slotSettingsRemoved(); -private: - QNmSettingsMap settingsMap; - QString interfacepath; -}; - -class QNetworkManagerConnectionActive : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - enum ActiveConnectionState { - Unknown = 0, - Activating = 1, - Activated = 2 - }; - - explicit QNetworkManagerConnectionActive(const QString &dbusPathName, QObject *parent = nullptr); - ~ QNetworkManagerConnectionActive(); - - QDBusObjectPath connection() const; - QDBusObjectPath specificObject() const; - QStringList devices() const; - quint32 state() const; - bool defaultRoute() const; - bool default6Route() const; - - -Q_SIGNALS: - void propertiesChanged(QMap); - void propertiesReady(); - -private Q_SLOTS: - void propertiesSwap(QMap); - -private: - QVariantMap propertyMap; -}; - -class QNetworkManagerIp4Config : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - explicit QNetworkManagerIp4Config(const QString &dbusPathName, QObject *parent = nullptr); - ~QNetworkManagerIp4Config(); - - QStringList domains() const; -}; - -class PropertiesDBusInterface : public QDBusAbstractInterface -{ -public: - PropertiesDBusInterface(const QString &service, const QString &path, - const QString &interface, const QDBusConnection &connection, - QObject *parent = nullptr) - : QDBusAbstractInterface(service, path, interface.toLatin1().data(), connection, parent) - {} -}; - -QT_END_NAMESPACE - -#endif // QT_NO_DBUS -#endif //QNETWORKMANAGERSERVICE_H diff --git a/src/plugins/bearer/nla/main.cpp b/src/plugins/bearer/nla/main.cpp deleted file mode 100644 index 8e45c071e8..0000000000 --- a/src/plugins/bearer/nla/main.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnlaengine.h" - -#include - -#include - -QT_BEGIN_NAMESPACE - -class QNlaEnginePlugin : public QBearerEnginePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "nla.json") - -public: - QNlaEnginePlugin(); - ~QNlaEnginePlugin(); - - QBearerEngine *create(const QString &key) const; -}; - -QNlaEnginePlugin::QNlaEnginePlugin() -{ -} - -QNlaEnginePlugin::~QNlaEnginePlugin() -{ -} - -QBearerEngine *QNlaEnginePlugin::create(const QString &key) const -{ - if (key == QLatin1String("nla")) - return new QNlaEngine; - else - return 0; -} - -QT_END_NAMESPACE - -#include "main.moc" diff --git a/src/plugins/bearer/nla/nla.json b/src/plugins/bearer/nla/nla.json deleted file mode 100644 index 2554d2c5c4..0000000000 --- a/src/plugins/bearer/nla/nla.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "nla" ] -} diff --git a/src/plugins/bearer/nla/nla.pro b/src/plugins/bearer/nla/nla.pro deleted file mode 100644 index 2582dc7cd4..0000000000 --- a/src/plugins/bearer/nla/nla.pro +++ /dev/null @@ -1,17 +0,0 @@ -TARGET = qnlabearer - -QT = core core-private network network-private - -QMAKE_USE_PRIVATE += ws2_32 - -HEADERS += qnlaengine.h \ - ../platformdefs_win.h - -SOURCES += main.cpp \ - qnlaengine.cpp - -OTHER_FILES += nla.json - -PLUGIN_TYPE = bearer -PLUGIN_CLASS_NAME = QNlaEnginePlugin -load(qt_plugin) diff --git a/src/plugins/bearer/nla/qnlaengine.cpp b/src/plugins/bearer/nla/qnlaengine.cpp deleted file mode 100644 index ab3c0d0e3a..0000000000 --- a/src/plugins/bearer/nla/qnlaengine.cpp +++ /dev/null @@ -1,639 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnlaengine.h" -#include - -#include - -#include -#include -#include -#include - -#include - -#include "../platformdefs_win.h" - -QT_BEGIN_NAMESPACE - -QWindowsSockInit2::QWindowsSockInit2() -: version(0) -{ - //### should we try for 2.2 on all platforms ?? - WSAData wsadata; - - // IPv6 requires Winsock v2.0 or better. - if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0) { - qWarning("QBearerManagementAPI: WinSock v2.0 initialization failed."); - } else { - version = 0x20; - } -} - -QWindowsSockInit2::~QWindowsSockInit2() -{ - WSACleanup(); -} - -#ifdef BEARER_MANAGEMENT_DEBUG -static void printBlob(NLA_BLOB *blob) -{ - qDebug() << "==== BEGIN NLA_BLOB ====" << Qt::endl - - << "type:" << blob->header.type << Qt::endl - << "size:" << blob->header.dwSize << Qt::endl - << "next offset:" << blob->header.nextOffset; - - switch (blob->header.type) { - case NLA_RAW_DATA: - qDebug() << "Raw Data" << Qt::endl - << '\t' << blob->data.rawData; - break; - case NLA_INTERFACE: - qDebug() << "Interface" << Qt::endl - << "\ttype:" << blob->data.interfaceData.dwType << Qt::endl - << "\tspeed:" << blob->data.interfaceData.dwSpeed << Qt::endl - << "\tadapter:" << blob->data.interfaceData.adapterName; - break; - case NLA_802_1X_LOCATION: - qDebug() << "802.1x Location" << Qt::endl - << '\t' << blob->data.locationData.information; - break; - case NLA_CONNECTIVITY: - qDebug() << "Connectivity" << Qt::endl - << "\ttype:" << blob->data.connectivity.type << Qt::endl - << "\tinternet:" << blob->data.connectivity.internet; - break; - case NLA_ICS: - qDebug() << "ICS" << Qt::endl - << "\tspeed:" << blob->data.ICS.remote.speed << Qt::endl - << "\ttype:" << blob->data.ICS.remote.type << Qt::endl - << "\tstate:" << blob->data.ICS.remote.state << Qt::endl - << "\tmachine name:" << blob->data.ICS.remote.machineName << Qt::endl - << "\tshared adapter name:" << blob->data.ICS.remote.sharedAdapterName; - break; - default: - qDebug("UNKNOWN BLOB TYPE"); - } - - qDebug("===== END NLA_BLOB ====="); -} -#endif - -static QNetworkConfiguration::BearerType qGetInterfaceType(const QString &interface) -{ - unsigned long oid; - DWORD bytesWritten; - - NDIS_MEDIUM medium; - NDIS_PHYSICAL_MEDIUM physicalMedium; - - HANDLE handle = CreateFile((TCHAR *)QString::fromLatin1("\\\\.\\%1").arg(interface).utf16(), 0, - FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); - if (handle == INVALID_HANDLE_VALUE) - return QNetworkConfiguration::BearerUnknown; - - oid = OID_GEN_MEDIA_SUPPORTED; - bytesWritten = 0; - bool result = DeviceIoControl(handle, IOCTL_NDIS_QUERY_GLOBAL_STATS, &oid, sizeof(oid), - &medium, sizeof(medium), &bytesWritten, 0); - if (!result) { - CloseHandle(handle); - return QNetworkConfiguration::BearerUnknown; - } - - oid = OID_GEN_PHYSICAL_MEDIUM; - bytesWritten = 0; - result = DeviceIoControl(handle, IOCTL_NDIS_QUERY_GLOBAL_STATS, &oid, sizeof(oid), - &physicalMedium, sizeof(physicalMedium), &bytesWritten, 0); - if (!result) { - CloseHandle(handle); - - if (medium == NdisMedium802_3) - return QNetworkConfiguration::BearerEthernet; - else - return QNetworkConfiguration::BearerUnknown; - } - - CloseHandle(handle); - - if (medium == NdisMedium802_3) { - switch (physicalMedium) { - case NdisPhysicalMediumWirelessLan: - return QNetworkConfiguration::BearerWLAN; - case NdisPhysicalMediumBluetooth: - return QNetworkConfiguration::BearerBluetooth; - case NdisPhysicalMediumWiMax: - return QNetworkConfiguration::BearerWiMAX; - default: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "Physical Medium" << physicalMedium; -#endif - return QNetworkConfiguration::BearerEthernet; - } - } - -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << medium << physicalMedium; -#endif - - return QNetworkConfiguration::BearerUnknown; -} - -class QNlaThread : public QThread -{ - Q_OBJECT - -public: - QNlaThread(QNlaEngine *parent = 0); - ~QNlaThread(); - - QList getConfigurations(); - - void forceUpdate(); - -protected: - virtual void run(); - -private: - void updateConfigurations(QList &configs); - DWORD parseBlob(NLA_BLOB *blob, QNetworkConfigurationPrivate *cpPriv) const; - QNetworkConfigurationPrivate *parseQuerySet(const WSAQUERYSET *querySet) const; - void fetchConfigurations(); - -signals: - void networksChanged(); - -private: - QMutex mutex; - HANDLE handle; - bool done; - QList fetchedConfigurations; -}; - -QNlaThread::QNlaThread(QNlaEngine *parent) -: QThread(parent), handle(0), done(false) -{ -} - -QNlaThread::~QNlaThread() -{ - mutex.lock(); - - done = true; - - if (handle) { - /* cancel completion event */ - if (WSALookupServiceEnd(handle) == SOCKET_ERROR) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("WSALookupServiceEnd error %d", WSAGetLastError()); -#endif - } - } - mutex.unlock(); - - wait(); -} - -QList QNlaThread::getConfigurations() -{ - QMutexLocker locker(&mutex); - - QList foundConfigurations = fetchedConfigurations; - fetchedConfigurations.clear(); - - return foundConfigurations; -} - -void QNlaThread::forceUpdate() -{ - mutex.lock(); - - if (handle) { - /* cancel completion event */ - if (WSALookupServiceEnd(handle) == SOCKET_ERROR) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("WSALookupServiceEnd error %d", WSAGetLastError()); -#endif - } - handle = 0; - } - mutex.unlock(); -} - -void QNlaThread::run() -{ - WSAEVENT changeEvent = WSACreateEvent(); - if (changeEvent == WSA_INVALID_EVENT) - return; - - while (true) { - fetchConfigurations(); - - WSAQUERYSET qsRestrictions; - - memset(&qsRestrictions, 0, sizeof(qsRestrictions)); - qsRestrictions.dwSize = sizeof(qsRestrictions); - qsRestrictions.dwNameSpace = NS_NLA; - - mutex.lock(); - if (done) { - mutex.unlock(); - break; - } - int result = WSALookupServiceBegin(&qsRestrictions, LUP_RETURN_ALL, &handle); - mutex.unlock(); - - if (result == SOCKET_ERROR) - break; - - WSACOMPLETION completion; - WSAOVERLAPPED overlapped; - - memset(&overlapped, 0, sizeof(overlapped)); - overlapped.hEvent = changeEvent; - - memset(&completion, 0, sizeof(completion)); - completion.Type = NSP_NOTIFY_EVENT; - completion.Parameters.Event.lpOverlapped = &overlapped; - - DWORD bytesReturned = 0; - result = WSANSPIoctl(handle, SIO_NSP_NOTIFY_CHANGE, 0, 0, 0, 0, - &bytesReturned, &completion); - if (result == SOCKET_ERROR) { - if (WSAGetLastError() != WSA_IO_PENDING) - break; - } - - // Not interested in unrelated IO completion events - // although we also don't want to block them - while (WaitForSingleObjectEx(changeEvent, WSA_INFINITE, true) != WAIT_IO_COMPLETION && - handle) - { - } - - mutex.lock(); - if (handle) { - result = WSALookupServiceEnd(handle); - if (result == SOCKET_ERROR) { - mutex.unlock(); - break; - } - handle = 0; - } - mutex.unlock(); - } - - WSACloseEvent(changeEvent); -} - -void QNlaThread::updateConfigurations(QList &configs) -{ - mutex.lock(); - - while (!fetchedConfigurations.isEmpty()) - delete fetchedConfigurations.takeFirst(); - - fetchedConfigurations = configs; - - mutex.unlock(); - - emit networksChanged(); -} - -DWORD QNlaThread::parseBlob(NLA_BLOB *blob, QNetworkConfigurationPrivate *cpPriv) const -{ -#ifdef BEARER_MANAGEMENT_DEBUG - printBlob(blob); -#endif - - switch (blob->header.type) { - case NLA_RAW_DATA: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: unhandled header type NLA_RAW_DATA", __FUNCTION__); -#endif - break; - case NLA_INTERFACE: - cpPriv->state = QNetworkConfiguration::Active; - if (QNlaEngine *engine = qobject_cast(parent())) { - engine->configurationInterface[cpPriv->id.toUInt()] = - QString::fromLatin1(blob->data.interfaceData.adapterName); - } - break; - case NLA_802_1X_LOCATION: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: unhandled header type NLA_802_1X_LOCATION", __FUNCTION__); -#endif - break; - case NLA_CONNECTIVITY: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: unhandled header type NLA_CONNECTIVITY", __FUNCTION__); -#endif - break; - case NLA_ICS: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: unhandled header type NLA_ICS", __FUNCTION__); -#endif - break; - default: -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("%s: unhandled header type %d", __FUNCTION__, blob->header.type); -#endif - ; - } - - return blob->header.nextOffset; -} - -QNetworkConfigurationPrivate *QNlaThread::parseQuerySet(const WSAQUERYSET *querySet) const -{ - QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate; - - cpPriv->name = QString::fromWCharArray(querySet->lpszServiceInstanceName); - cpPriv->isValid = true; - cpPriv->id = QString::number(qHash(QLatin1String("NLA:") + cpPriv->name)); - cpPriv->state = QNetworkConfiguration::Defined; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "size:" << querySet->dwSize; - qDebug() << "service instance name:" << QString::fromUtf16(querySet->lpszServiceInstanceName); - qDebug() << "service class id:" << querySet->lpServiceClassId; - qDebug() << "version:" << querySet->lpVersion; - qDebug() << "comment:" << QString::fromUtf16(querySet->lpszComment); - qDebug() << "namespace:" << querySet->dwNameSpace; - qDebug() << "namespace provider id:" << querySet->lpNSProviderId; - qDebug() << "context:" << QString::fromUtf16(querySet->lpszContext); - qDebug() << "number of protocols:" << querySet->dwNumberOfProtocols; - qDebug() << "protocols:" << querySet->lpafpProtocols; - qDebug() << "query string:" << QString::fromUtf16(querySet->lpszQueryString); - qDebug() << "number of cs addresses:" << querySet->dwNumberOfCsAddrs; - qDebug() << "cs addresses:" << querySet->lpcsaBuffer; - qDebug() << "output flags:" << querySet->dwOutputFlags; -#endif - - if (querySet->lpBlob) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug() << "blob size:" << querySet->lpBlob->cbSize; - qDebug() << "blob data:" << querySet->lpBlob->pBlobData; -#endif - - DWORD offset = 0; - do { - NLA_BLOB *blob = reinterpret_cast(querySet->lpBlob->pBlobData + offset); - DWORD nextOffset = parseBlob(blob, cpPriv); - if (nextOffset == offset) - break; - else - offset = nextOffset; - } while (offset != 0 && offset < querySet->lpBlob->cbSize); - } - - if (QNlaEngine *engine = qobject_cast(parent())) { - const QString interface = engine->getInterfaceFromId(cpPriv->id); - cpPriv->bearerType = qGetInterfaceType(interface); - } - - return cpPriv; -} - -void QNlaThread::fetchConfigurations() -{ - QList foundConfigurations; - - WSAQUERYSET qsRestrictions; - HANDLE hLookup = 0; - - memset(&qsRestrictions, 0, sizeof(qsRestrictions)); - qsRestrictions.dwSize = sizeof(qsRestrictions); - qsRestrictions.dwNameSpace = NS_NLA; - - int result = WSALookupServiceBegin(&qsRestrictions, LUP_RETURN_ALL | LUP_DEEP, &hLookup); - if (result == SOCKET_ERROR) { - mutex.lock(); - fetchedConfigurations.clear(); - mutex.unlock(); - } - - char buffer[0x10000]; - while (result == 0) { - DWORD bufferLength = sizeof(buffer); - result = WSALookupServiceNext(hLookup, LUP_RETURN_ALL, - &bufferLength, reinterpret_cast(buffer)); - - if (result == SOCKET_ERROR) - break; - - QNetworkConfigurationPrivate *cpPriv = - parseQuerySet(reinterpret_cast(buffer)); - - foundConfigurations.append(cpPriv); - } - - if (hLookup) { - result = WSALookupServiceEnd(hLookup); - if (result == SOCKET_ERROR) { -#ifdef BEARER_MANAGEMENT_DEBUG - qDebug("WSALookupServiceEnd error %d", WSAGetLastError()); -#endif - } - } - - updateConfigurations(foundConfigurations); -} - -QNlaEngine::QNlaEngine(QObject *parent) -: QBearerEngineImpl(parent), nlaThread(0) -{ - nlaThread = new QNlaThread(this); - connect(nlaThread, SIGNAL(networksChanged()), - this, SLOT(networksChanged())); - nlaThread->start(); - - qApp->processEvents(QEventLoop::ExcludeUserInputEvents); -} - -QNlaEngine::~QNlaEngine() -{ - delete nlaThread; -} - -void QNlaEngine::networksChanged() -{ - QMutexLocker locker(&mutex); - - QStringList previous = accessPointConfigurations.keys(); - - QList foundConfigurations = nlaThread->getConfigurations(); - while (!foundConfigurations.isEmpty()) { - QNetworkConfigurationPrivate *cpPriv = foundConfigurations.takeFirst(); - - previous.removeAll(cpPriv->id); - - if (accessPointConfigurations.contains(cpPriv->id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(cpPriv->id); - - bool changed = false; - - ptr->mutex.lock(); - - if (ptr->isValid != cpPriv->isValid) { - ptr->isValid = cpPriv->isValid; - changed = true; - } - - if (ptr->name != cpPriv->name) { - ptr->name = cpPriv->name; - changed = true; - } - - if (ptr->state != cpPriv->state) { - ptr->state = cpPriv->state; - changed = true; - } - - ptr->mutex.unlock(); - - if (changed) { - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } - - delete cpPriv; - } else { - QNetworkConfigurationPrivatePointer ptr(cpPriv); - - accessPointConfigurations.insert(ptr->id, ptr); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - } - } - - while (!previous.isEmpty()) { - QNetworkConfigurationPrivatePointer ptr = - accessPointConfigurations.take(previous.takeFirst()); - - locker.unlock(); - emit configurationRemoved(ptr); - locker.relock(); - } - - locker.unlock(); - emit updateCompleted(); -} - -QString QNlaEngine::getInterfaceFromId(const QString &id) -{ - QMutexLocker locker(&mutex); - - return configurationInterface.value(id.toUInt()); -} - -bool QNlaEngine::hasIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - - return configurationInterface.contains(id.toUInt()); -} - -void QNlaEngine::connectToId(const QString &id) -{ - emit connectionError(id, OperationNotSupported); -} - -void QNlaEngine::disconnectFromId(const QString &id) -{ - emit connectionError(id, OperationNotSupported); -} - -void QNlaEngine::requestUpdate() -{ - QMutexLocker locker(&mutex); - - nlaThread->forceUpdate(); -} - -QNetworkSession::State QNlaEngine::sessionStateForId(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - - if (!ptr) - return QNetworkSession::Invalid; - - if (!ptr->isValid) { - return QNetworkSession::Invalid; - } else if ((ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - return QNetworkSession::Connected; - } else if ((ptr->state & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - return QNetworkSession::Disconnected; - } else if ((ptr->state & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined) { - return QNetworkSession::NotAvailable; - } else if ((ptr->state & QNetworkConfiguration::Undefined) == - QNetworkConfiguration::Undefined) { - return QNetworkSession::NotAvailable; - } - - return QNetworkSession::Invalid; -} - -QNetworkConfigurationManager::Capabilities QNlaEngine::capabilities() const -{ - return QNetworkConfigurationManager::ForcedRoaming; -} - -QNetworkSessionPrivate *QNlaEngine::createSessionBackend() -{ - return new QNetworkSessionPrivateImpl; -} - -QNetworkConfigurationPrivatePointer QNlaEngine::defaultConfiguration() -{ - return QNetworkConfigurationPrivatePointer(); -} - -#include "qnlaengine.moc" -QT_END_NAMESPACE - diff --git a/src/plugins/bearer/nla/qnlaengine.h b/src/plugins/bearer/nla/qnlaengine.h deleted file mode 100644 index 90efa50201..0000000000 --- a/src/plugins/bearer/nla/qnlaengine.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNLAENGINE_P_H -#define QNLAENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include - -#include - -QT_BEGIN_NAMESPACE - -class QNetworkConfigurationPrivate; -class QNlaThread; - -class QWindowsSockInit2 -{ -public: - QWindowsSockInit2(); - ~QWindowsSockInit2(); - int version; -}; - -class QNlaEngine : public QBearerEngineImpl -{ - Q_OBJECT - - friend class QNlaThread; - -public: - QNlaEngine(QObject *parent = 0); - ~QNlaEngine(); - - QString getInterfaceFromId(const QString &id); - bool hasIdentifier(const QString &id); - - void connectToId(const QString &id); - void disconnectFromId(const QString &id); - - Q_INVOKABLE void requestUpdate(); - - QNetworkSession::State sessionStateForId(const QString &id); - - QNetworkConfigurationManager::Capabilities capabilities() const; - - QNetworkSessionPrivate *createSessionBackend(); - - QNetworkConfigurationPrivatePointer defaultConfiguration(); - -private Q_SLOTS: - void networksChanged(); - -private: - QWindowsSockInit2 winSock; - QNlaThread *nlaThread; - QMap configurationInterface; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/bearer/platformdefs_win.h b/src/plugins/bearer/platformdefs_win.h deleted file mode 100644 index 0477dc45c3..0000000000 --- a/src/plugins/bearer/platformdefs_win.h +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMDEFS_WIN_H -#define QPLATFORMDEFS_WIN_H - -// Since we need to include winsock2.h, we need to define WIN32_LEAN_AND_MEAN -// somewhere above so windows.h won't include winsock.h. -#include -#include -#undef interface -#include -#include - -QT_BEGIN_NAMESPACE - -#ifndef NS_NLA - -#define NS_NLA 15 - -#ifndef NLA_NAMESPACE_GUID -enum NLA_BLOB_DATA_TYPE { - NLA_RAW_DATA = 0, - NLA_INTERFACE = 1, - NLA_802_1X_LOCATION = 2, - NLA_CONNECTIVITY = 3, - NLA_ICS = 4 -}; - -enum NLA_CONNECTIVITY_TYPE { - NLA_NETWORK_AD_HOC = 0, - NLA_NETWORK_MANAGED = 1, - NLA_NETWORK_UNMANAGED = 2, - NLA_NETWORK_UNKNOWN = 3 -}; - -enum NLA_INTERNET { - NLA_INTERNET_UNKNOWN = 0, - NLA_INTERNET_NO = 1, - NLA_INTERNET_YES = 2 -}; - -struct NLA_BLOB { - struct { - NLA_BLOB_DATA_TYPE type; - DWORD dwSize; - DWORD nextOffset; - } header; - - union { - // NLA_RAW_DATA - CHAR rawData[1]; - - // NLA_INTERFACE - struct { - DWORD dwType; - DWORD dwSpeed; - CHAR adapterName[1]; - } interfaceData; - - // NLA_802_1X_LOCATION - struct { - CHAR information[1]; - } locationData; - - // NLA_CONNECTIVITY - struct { - NLA_CONNECTIVITY_TYPE type; - NLA_INTERNET internet; - } connectivity; - - // NLA_ICS - struct { - struct { - DWORD speed; - DWORD type; - DWORD state; - WCHAR machineName[256]; - WCHAR sharedAdapterName[256]; - } remote; - } ICS; - } data; -}; -#endif // NLA_NAMESPACE_GUID - -#endif - -enum NDIS_MEDIUM { - NdisMedium802_3 = 0, -}; - -enum NDIS_PHYSICAL_MEDIUM { - NdisPhysicalMediumWirelessLan = 1, - NdisPhysicalMediumBluetooth = 10, - NdisPhysicalMediumWiMax = 12, -}; - -#define OID_GEN_MEDIA_SUPPORTED 0x00010103 -#define OID_GEN_PHYSICAL_MEDIUM 0x00010202 - -#define IOCTL_NDIS_QUERY_GLOBAL_STATS \ - CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0, METHOD_OUT_DIRECT, FILE_ANY_ACCESS) - -QT_END_NAMESPACE - -#endif // QPLATFORMDEFS_WIN_H diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index cd4d301194..df738c419f 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -2,7 +2,6 @@ TEMPLATE = subdirs QT_FOR_CONFIG += network qtHaveModule(sql): SUBDIRS += sqldrivers -qtHaveModule(network):qtConfig(bearermanagement): SUBDIRS += bearer qtHaveModule(gui) { SUBDIRS *= platforms platforminputcontexts platformthemes qtConfig(imageformatplugin): SUBDIRS *= imageformats diff --git a/src/tools/uic/qclass_lib_map.h b/src/tools/uic/qclass_lib_map.h index 456101c2e7..03b3ffa5dd 100644 --- a/src/tools/uic/qclass_lib_map.h +++ b/src/tools/uic/qclass_lib_map.h @@ -363,9 +363,6 @@ QT_CLASS_LIB(QNetworkCookieJar, QtNetwork, qnetworkcookiejar.h) QT_CLASS_LIB(QNetworkDiskCache, QtNetwork, qnetworkdiskcache.h) QT_CLASS_LIB(QNetworkReply, QtNetwork, qnetworkreply.h) QT_CLASS_LIB(QNetworkRequest, QtNetwork, qnetworkrequest.h) -QT_CLASS_LIB(QNetworkConfigurationManager, QtNetwork, qnetworkconfigmanager.h) -QT_CLASS_LIB(QNetworkConfiguration, QtNetwork, qnetworkconfiguration.h) -QT_CLASS_LIB(QNetworkSession, QtNetwork, qnetworksession.h) QT_CLASS_LIB(QAuthenticator, QtNetwork, qauthenticator.h) QT_CLASS_LIB(QIPv6Address, QtNetwork, qhostaddress.h) QT_CLASS_LIB(Q_IPV6ADDR, QtNetwork, qhostaddress.h) -- cgit v1.2.3