summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2021-10-21 13:07:33 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2021-10-22 09:40:49 +0200
commitbfe579613a12efe13be35b1a52975dddeb0d8026 (patch)
treea8d3431d449060e1e3fd17dde258c2fddffe0521
parent5f8e9c194e06b7a886cb69b24a37b62ab23c79a8 (diff)
QNI: Add a convenience method for loading the default plugin
We have some official plugins, we may as well treat them as default and give a convenient function which loads those. Change-Id: I6251c77ac042b795bcf24b86e510e960ee4bab54 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
-rw-r--r--src/network/kernel/qnetworkinformation.cpp55
-rw-r--r--src/network/kernel/qnetworkinformation.h1
-rw-r--r--src/network/kernel/qnetworkinformation_p.h11
-rw-r--r--src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp9
-rw-r--r--src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp10
-rw-r--r--src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp10
-rw-r--r--src/plugins/networkinformation/scnetworkreachability/qscnetworkreachabilitynetworkinformationbackend.mm11
-rw-r--r--tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp5
8 files changed, 94 insertions, 18 deletions
diff --git a/src/network/kernel/qnetworkinformation.cpp b/src/network/kernel/qnetworkinformation.cpp
index 79375dee81..4f0b1405ef 100644
--- a/src/network/kernel/qnetworkinformation.cpp
+++ b/src/network/kernel/qnetworkinformation.cpp
@@ -604,11 +604,62 @@ QNetworkInformation::Features QNetworkInformation::supportedFeatures() const
}
/*!
+ \since 6.3
+
+ Attempts to load the platform-default backend.
+
+ This platform-to-plugin mapping is as follows:
+
+ \table
+ \header
+ \li Platform
+ \li Plugin-name
+ \row
+ \li Windows
+ \li networklistmanager
+ \row
+ \li Apple (macOS/iOS)
+ \li scnetworkreachability
+ \row
+ \li Android
+ \li android
+ \row
+ \li Linux
+ \li networkmanager
+ \endtable
+
+ This function is provided for convenience where the default for a given
+ platform is good enough. If you are not using the default plugins you must
+ use one of the other load() overloads.
+
+ Returns \c true if it managed to load the backend or if it was already
+ loaded. Returns \c false otherwise.
+
+ \sa instance
+*/
+bool QNetworkInformation::load()
+{
+ int index = -1;
+#ifdef Q_OS_WIN
+ index = QNetworkInformationBackend::PluginNamesWindowsIndex;
+#elif defined(Q_OS_DARWIN)
+ index = QNetworkInformationBackend::PluginNamesAppleIndex;
+#elif defined(Q_OS_ANDROID)
+ index = QNetworkInformationBackend::PluginNamesAndroidIndex;
+#elif defined(Q_OS_LINUX)
+ index = QNetworkInformationBackend::PluginNamesLinuxIndex;
+#endif
+ if (index == -1)
+ return false;
+ return load(QNetworkInformationBackend::PluginNames[index]);
+}
+
+/*!
Attempts to load a backend whose name matches \a backend
(case insensitively).
Returns \c true if it managed to load the requested backend or
- if it was already loaded. Returns \c false otherwise
+ if it was already loaded. Returns \c false otherwise.
\sa instance
*/
@@ -622,7 +673,7 @@ bool QNetworkInformation::load(QStringView backend)
Load a backend which supports \a features.
Returns \c true if it managed to load the requested backend or
- if it was already loaded. Returns \c false otherwise
+ if it was already loaded. Returns \c false otherwise.
\sa instance
*/
diff --git a/src/network/kernel/qnetworkinformation.h b/src/network/kernel/qnetworkinformation.h
index febf5bbc8f..e280894fef 100644
--- a/src/network/kernel/qnetworkinformation.h
+++ b/src/network/kernel/qnetworkinformation.h
@@ -96,6 +96,7 @@ public:
bool supports(Features features) const;
Features supportedFeatures() const;
+ static bool load();
static bool load(QStringView backend);
static bool load(Features features);
static QStringList availableBackends();
diff --git a/src/network/kernel/qnetworkinformation_p.h b/src/network/kernel/qnetworkinformation_p.h
index ba07870be3..971340b6e3 100644
--- a/src/network/kernel/qnetworkinformation_p.h
+++ b/src/network/kernel/qnetworkinformation_p.h
@@ -67,6 +67,17 @@ class Q_NETWORK_EXPORT QNetworkInformationBackend : public QObject
using TransportMedium = QNetworkInformation::TransportMedium;
public:
+ static inline const char16_t PluginNames[4][22] = {
+ { u"networklistmanager" },
+ { u"scnetworkreachability" },
+ { u"android" },
+ { u"networkmanager" },
+ };
+ static constexpr int PluginNamesWindowsIndex = 0;
+ static constexpr int PluginNamesAppleIndex = 1;
+ static constexpr int PluginNamesAndroidIndex = 2;
+ static constexpr int PluginNamesLinuxIndex = 3;
+
QNetworkInformationBackend() = default;
~QNetworkInformationBackend() override;
diff --git a/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp b/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp
index 14e42a9de8..8f90ea82bd 100644
--- a/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp
+++ b/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp
@@ -47,7 +47,10 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(lcNetInfoAndroid)
Q_LOGGING_CATEGORY(lcNetInfoAndroid, "qt.network.info.android");
-static const QString backendName = QStringLiteral("android");
+static QString backendName() {
+ return QString::fromUtf16(QNetworkInformationBackend::PluginNames
+ [QNetworkInformationBackend::PluginNamesAndroidIndex]);
+}
class QAndroidNetworkInformationBackend : public QNetworkInformationBackend
{
@@ -56,7 +59,7 @@ public:
QAndroidNetworkInformationBackend();
~QAndroidNetworkInformationBackend() { m_valid = false; }
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return featuresSupportedStatic();
@@ -88,7 +91,7 @@ class QAndroidNetworkInformationBackendFactory : public QNetworkInformationBacke
public:
QAndroidNetworkInformationBackendFactory() = default;
~QAndroidNetworkInformationBackendFactory() = default;
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return QAndroidNetworkInformationBackend::featuresSupportedStatic();
diff --git a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp
index e8b36be02e..3e6e4074bb 100644
--- a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp
+++ b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp
@@ -50,7 +50,11 @@ QT_BEGIN_NAMESPACE
// Declared in qnetworklistmanagerevents.h
Q_LOGGING_CATEGORY(lcNetInfoNLM, "qt.network.info.netlistmanager");
-static const QString backendName = QStringLiteral("networklistmanager");
+static QString backendName()
+{
+ return QString::fromUtf16(QNetworkInformationBackend::PluginNames
+ [QNetworkInformationBackend::PluginNamesWindowsIndex]);
+}
namespace {
bool testCONNECTIVITY(NLM_CONNECTIVITY connectivity, NLM_CONNECTIVITY flag)
@@ -90,7 +94,7 @@ public:
QNetworkListManagerNetworkInformationBackend();
~QNetworkListManagerNetworkInformationBackend();
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return featuresSupportedStatic();
@@ -130,7 +134,7 @@ class QNetworkListManagerNetworkInformationBackendFactory : public QNetworkInfor
public:
QNetworkListManagerNetworkInformationBackendFactory() = default;
~QNetworkListManagerNetworkInformationBackendFactory() = default;
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return QNetworkListManagerNetworkInformationBackend::featuresSupportedStatic();
diff --git a/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp b/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp
index ad61b6baea..5e2f4b61e6 100644
--- a/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp
+++ b/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp
@@ -120,7 +120,11 @@ transportMediumFromDeviceType(QNetworkManagerInterface::NMDeviceType type)
}
}
-static QString backendName = QStringLiteral("networkmanager");
+static QString backendName()
+{
+ return QString::fromUtf16(QNetworkInformationBackend::PluginNames
+ [QNetworkInformationBackend::PluginNamesLinuxIndex]);
+}
class QNetworkManagerNetworkInformationBackend : public QNetworkInformationBackend
{
@@ -129,7 +133,7 @@ public:
QNetworkManagerNetworkInformationBackend();
~QNetworkManagerNetworkInformationBackend() = default;
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
if (!isValid())
@@ -160,7 +164,7 @@ class QNetworkManagerNetworkInformationBackendFactory : public QNetworkInformati
public:
QNetworkManagerNetworkInformationBackendFactory() = default;
~QNetworkManagerNetworkInformationBackendFactory() = default;
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
if (!QNetworkManagerInterfaceBase::networkManagerAvailable())
diff --git a/src/plugins/networkinformation/scnetworkreachability/qscnetworkreachabilitynetworkinformationbackend.mm b/src/plugins/networkinformation/scnetworkreachability/qscnetworkreachabilitynetworkinformationbackend.mm
index c732afc012..1da671e549 100644
--- a/src/plugins/networkinformation/scnetworkreachability/qscnetworkreachabilitynetworkinformationbackend.mm
+++ b/src/plugins/networkinformation/scnetworkreachability/qscnetworkreachabilitynetworkinformationbackend.mm
@@ -48,8 +48,11 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(lcNetInfoSCR)
Q_LOGGING_CATEGORY(lcNetInfoSCR, "qt.network.info.scnetworkreachability");
-
-static QString backendName = QStringLiteral("scnetworkreachability");
+static QString backendName()
+{
+ return QString::fromUtf16(QNetworkInformationBackend::PluginNames
+ [QNetworkInformationBackend::PluginNamesAppleIndex]);
+}
class QSCNetworkReachabilityNetworkInformationBackend : public QNetworkInformationBackend
{
@@ -58,7 +61,7 @@ public:
QSCNetworkReachabilityNetworkInformationBackend();
~QSCNetworkReachabilityNetworkInformationBackend();
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return featuresSupportedStatic();
@@ -87,7 +90,7 @@ class QSCNetworkReachabilityNetworkInformationBackendFactory : public QNetworkIn
public:
QSCNetworkReachabilityNetworkInformationBackendFactory() = default;
~QSCNetworkReachabilityNetworkInformationBackendFactory() = default;
- QString name() const override { return backendName; }
+ QString name() const override { return backendName(); }
QNetworkInformation::Features featuresSupported() const override
{
return QSCNetworkReachabilityNetworkInformationBackend::featuresSupportedStatic();
diff --git a/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp b/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
index e38ff7494f..8cac940874 100644
--- a/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
+++ b/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
@@ -46,9 +46,8 @@ int main(int argc, char **argv)
QCoreApplication app(argc, argv);
#endif
- if (!QNetworkInformation::load(QNetworkInformation::Feature::Reachability
- | QNetworkInformation::Feature::CaptivePortal
- | QNetworkInformation::Feature::TransportMedium)) {
+ // Use the platform-default:
+ if (!QNetworkInformation::load()) {
qWarning("Failed to load any backend");
qDebug() << "Backends available:" << QNetworkInformation::availableBackends().join(", ");
return -1;