Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qohosnetworkinformationbackend.cpp
Go to the documentation of this file.
1// Copyright (C) 2026 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#include <QtCore/qglobal.h>
6#include <QtCore/qloggingcategory.h>
7#include <QtNetwork/private/qnetworkinformation_p.h>
8#include <qohosnetconnection_p.h>
9
11
12Q_DECLARE_LOGGING_CATEGORY(lcNetInfoOhos)
13Q_LOGGING_CATEGORY(lcNetInfoOhos, "qt.network.info.ohos");
14
15namespace {
16
17QString backendName()
18{
19 return QString::fromUtf16(
20 QNetworkInformationBackend::PluginNames[QNetworkInformationBackend::PluginNamesOhosIndex]);
21}
22
23class QOhosNetworkInformationBackend : public QNetworkInformationBackend
24{
25 Q_OBJECT
26public:
27 QOhosNetworkInformationBackend();
28
29 QString name() const override;
30 QNetworkInformation::Features featuresSupported() const override;
31
32 static QNetworkInformation::Features featuresSupportedStatic();
33
34private:
35 void updateConnectivity();
36
37 QOhosSupplier<QtOhosNetConnection::NetState> m_netStateSupplier;
38
39 Q_DISABLE_COPY_MOVE(QOhosNetworkInformationBackend)
40};
41
42class QOhosNetworkInformationBackendFactory : public QNetworkInformationBackendFactory
43{
44 Q_OBJECT
45 Q_PLUGIN_METADATA(IID QNetworkInformationBackendFactory_iid)
46 Q_INTERFACES(QNetworkInformationBackendFactory)
47public:
48 QOhosNetworkInformationBackendFactory() = default;
49 ~QOhosNetworkInformationBackendFactory() override = default;
50 QString name() const override;
51 QNetworkInformation::Features featuresSupported() const override;
52 QNetworkInformationBackend *
53 create(QNetworkInformation::Features requiredFeatures) const override;
54
55private:
56 Q_DISABLE_COPY_MOVE(QOhosNetworkInformationBackendFactory)
57};
58
59QNetworkInformation::TransportMedium mapTransportMedium(QtOhosNetConnection::NetBearType bearerType)
60{
61 switch (bearerType) {
62 case QtOhosNetConnection::NetBearType::BEARER_CELLULAR:
63 return QNetworkInformation::TransportMedium::Cellular;
64 case QtOhosNetConnection::NetBearType::BEARER_WIFI:
65 return QNetworkInformation::TransportMedium::WiFi;
66 case QtOhosNetConnection::NetBearType::BEARER_BLUETOOTH:
67 return QNetworkInformation::TransportMedium::Bluetooth;
68 case QtOhosNetConnection::NetBearType::BEARER_ETHERNET:
69 return QNetworkInformation::TransportMedium::Ethernet;
70 case QtOhosNetConnection::NetBearType::BEARER_VPN:
71 return QNetworkInformation::TransportMedium::Unknown;
72 }
73
74 return QNetworkInformation::TransportMedium::Unknown;
75}
76
77QNetworkInformation::Reachability mapReachability(QtOhosNetConnection::NetworkReachability reachability)
78{
79 switch (reachability) {
80 case QtOhosNetConnection::NetworkReachability::Disconnected:
81 return QNetworkInformation::Reachability::Disconnected;
82 case QtOhosNetConnection::NetworkReachability::Local:
83 return QNetworkInformation::Reachability::Local;
84 case QtOhosNetConnection::NetworkReachability::Site:
85 return QNetworkInformation::Reachability::Site;
86 case QtOhosNetConnection::NetworkReachability::Online:
87 return QNetworkInformation::Reachability::Online;
88 }
89 return QNetworkInformation::Reachability::Unknown;
90}
91
92QString QOhosNetworkInformationBackend::name() const
93{
94 return backendName();
95}
96
97QNetworkInformation::Features QOhosNetworkInformationBackend::featuresSupported() const
98{
99 return featuresSupportedStatic();
100}
101
102QNetworkInformation::Features QOhosNetworkInformationBackend::featuresSupportedStatic()
103{
104 return QNetworkInformation::Feature::Reachability
105 | QNetworkInformation::Feature::TransportMedium
106 | QNetworkInformation::Feature::CaptivePortal
107 | QNetworkInformation::Feature::Metered;
108}
109
110QOhosNetworkInformationBackend::QOhosNetworkInformationBackend()
111 : m_netStateSupplier(QtOhosNetConnection::makeOhosNetStateDataSource(
112 [this](const QtOhosNetConnection::NetState &) {
113 updateConnectivity();
114 }))
115{
116 updateConnectivity();
117}
118
119void QOhosNetworkInformationBackend::updateConnectivity()
120{
121 const auto state = m_netStateSupplier();
122
123 setReachability(mapReachability(state.reachability));
124
125 auto transport = state.transport
126 ? mapTransportMedium(*state.transport)
127 : QNetworkInformation::TransportMedium::Unknown;
128 setTransportMedium(transport);
129 setBehindCaptivePortal(state.behindCaptivePortal);
130 setMetered(state.metered);
131
132 qCDebug(lcNetInfoOhos) << "updated reachability:" << reachability()
133 << "transport:" << transportMedium()
134 << "captive portal:" << behindCaptivePortal()
135 << "metered:" << isMetered();
136}
137
138QString QOhosNetworkInformationBackendFactory::name() const
139{
140 return backendName();
141}
142
143QNetworkInformation::Features QOhosNetworkInformationBackendFactory::featuresSupported() const
144{
145 return QOhosNetworkInformationBackend::featuresSupportedStatic();
146}
147
148QNetworkInformationBackend *
149QOhosNetworkInformationBackendFactory::create(QNetworkInformation::Features requiredFeatures) const
150{
151 if ((requiredFeatures & featuresSupported()) != requiredFeatures)
152 return nullptr;
153 return new QOhosNetworkInformationBackend();
154}
155
156}
157
158QT_END_NAMESPACE
159
160#include "qohosnetworkinformationbackend.moc"
Combined button and popup list for selecting options.
QtOhos::enums::ohos::net::connection::NetBearType NetBearType