diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2020-06-05 09:24:37 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2020-06-06 20:25:49 +0200 |
commit | 45b0f1be686cfba8dcecb9be5c875cae59c69276 (patch) | |
tree | 363dfd46575d147206267d854ce14747157f432e /src/network/kernel | |
parent | aa81b90738ce9faee5e433617c8bd243cb238729 (diff) |
Remove winrt
Macros and the await helper function from qfunctions_winrt(_p).h are
needed in other Qt modules which use UWP APIs on desktop windows.
Task-number: QTBUG-84434
Change-Id: Ice09c11436ad151c17bdccd2c7defadd08c13925
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/network/kernel')
-rw-r--r-- | src/network/kernel/kernel.pri | 16 | ||||
-rw-r--r-- | src/network/kernel/qdnslookup_winrt.cpp | 157 | ||||
-rw-r--r-- | src/network/kernel/qhostaddress.cpp | 8 | ||||
-rw-r--r-- | src/network/kernel/qnetworkinterface_winrt.cpp | 245 | ||||
-rw-r--r-- | src/network/kernel/qnetworkproxy_win.cpp | 8 |
5 files changed, 5 insertions, 429 deletions
diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri index 7dd5b1d97e..d7d0dd522c 100644 --- a/src/network/kernel/kernel.pri +++ b/src/network/kernel/kernel.pri @@ -62,16 +62,10 @@ android:qtConfig(dnslookup) { } win32: { - SOURCES += kernel/qhostinfo_win.cpp - - !winrt { - SOURCES += kernel/qnetworkinterface_win.cpp - qtConfig(dnslookup): SOURCES += kernel/qdnslookup_win.cpp - LIBS_PRIVATE += -ldnsapi -liphlpapi - } else { - SOURCES += kernel/qnetworkinterface_winrt.cpp - qtConfig(dnslookup): SOURCES += kernel/qdnslookup_winrt.cpp - } + SOURCES += kernel/qhostinfo_win.cpp \ + kernel/qnetworkinterface_win.cpp + qtConfig(dnslookup): SOURCES += kernel/qdnslookup_win.cpp + LIBS_PRIVATE += -ldnsapi -liphlpapi } mac { @@ -94,7 +88,7 @@ qtConfig(gssapi): QMAKE_USE_PRIVATE += gssapi uikit:HEADERS += kernel/qnetworkinterface_uikit_p.h osx:SOURCES += kernel/qnetworkproxy_mac.cpp -else:win32:!winrt: SOURCES += kernel/qnetworkproxy_win.cpp +else:win32: SOURCES += kernel/qnetworkproxy_win.cpp else: qtConfig(libproxy) { SOURCES += kernel/qnetworkproxy_libproxy.cpp QMAKE_USE_PRIVATE += libproxy libdl diff --git a/src/network/kernel/qdnslookup_winrt.cpp b/src/network/kernel/qdnslookup_winrt.cpp deleted file mode 100644 index 30510d89fc..0000000000 --- a/src/network/kernel/qdnslookup_winrt.cpp +++ /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$ -** -****************************************************************************/ - -#include "qdnslookup_p.h" - -#include <qfunctions_winrt.h> -#include <qurl.h> -#include <qdebug.h> - -#include <wrl.h> -#include <windows.foundation.h> -#include <windows.foundation.collections.h> -#include <windows.networking.h> -#include <windows.networking.sockets.h> - -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; -using namespace ABI::Windows::Networking::Sockets; - -#define E_NO_SUCH_HOST 0x80072af9 - -QT_BEGIN_NAMESPACE - -void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestName, const QHostAddress &nameserver, QDnsLookupReply *reply) -{ - // TODO: Add nameserver support for winRT - if (!nameserver.isNull()) - qWarning("Ignoring nameserver as its currently not supported on WinRT"); - - // TODO: is there any way to do "proper" dns lookup? - if (requestType != QDnsLookup::A && requestType != QDnsLookup::AAAA - && requestType != QDnsLookup::ANY) { - reply->error = QDnsLookup::InvalidRequestError; - reply->errorString = QLatin1String("WinRT only supports IPv4 and IPv6 requests"); - return; - } - - QString aceHostname = QUrl::fromAce(requestName); - if (aceHostname.isEmpty()) { - reply->error = QDnsLookup::InvalidRequestError; - reply->errorString = requestName.isEmpty() ? tr("No hostname given") : tr("Invalid hostname"); - return; - } - - ComPtr<IHostNameFactory> hostnameFactory; - HRESULT hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_HostName).Get(), - IID_PPV_ARGS(&hostnameFactory)); - if (FAILED(hr)) { - reply->error = QDnsLookup::ResolverError; - reply->errorString = QLatin1String("Could not obtain hostname factory"); - return; - } - ComPtr<IHostName> host; - HStringReference hostNameRef((const wchar_t*)aceHostname.utf16()); - hr = hostnameFactory->CreateHostName(hostNameRef.Get(), &host); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr<IDatagramSocketStatics> datagramSocketStatics; - hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_DatagramSocket).Get(), &datagramSocketStatics); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr<IAsyncOperation<IVectorView<EndpointPair *> *>> op; - hr = datagramSocketStatics->GetEndpointPairsAsync(host.Get(), - HString::MakeReference(L"0").Get(), - &op); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr<IVectorView<EndpointPair *>> endpointPairs; - hr = QWinRTFunctions::await(op, endpointPairs.GetAddressOf(), QWinRTFunctions::YieldThread, 60 * 1000); - if (hr == E_NO_SUCH_HOST || !endpointPairs) { - reply->error = QDnsLookup::NotFoundError; - reply->errorString = tr("Host %1 could not be found.").arg(aceHostname); - return; - } - if (FAILED(hr)) { - reply->error = QDnsLookup::ServerFailureError; - reply->errorString = tr("Unknown error"); - return; - } - - unsigned int size; - hr = endpointPairs->get_Size(&size); - Q_ASSERT_SUCCEEDED(hr); - // endpoint pairs might contain duplicates so we temporarily store addresses in a QSet - QSet<QHostAddress> addresses; - for (unsigned int i = 0; i < size; ++i) { - ComPtr<IEndpointPair> endpointpair; - hr = endpointPairs->GetAt(i, &endpointpair); - Q_ASSERT_SUCCEEDED(hr); - ComPtr<IHostName> remoteHost; - hr = endpointpair->get_RemoteHostName(&remoteHost); - Q_ASSERT_SUCCEEDED(hr); - HostNameType type; - hr = remoteHost->get_Type(&type); - Q_ASSERT_SUCCEEDED(hr); - if (type == HostNameType_Bluetooth || type == HostNameType_DomainName - || (requestType != QDnsLookup::ANY - && ((type == HostNameType_Ipv4 && requestType == QDnsLookup::AAAA) - || (type == HostNameType_Ipv6 && requestType == QDnsLookup::A)))) - continue; - - HString name; - hr = remoteHost->get_CanonicalName(name.GetAddressOf()); - Q_ASSERT_SUCCEEDED(hr); - UINT32 length; - PCWSTR rawString = name.GetRawBuffer(&length); - addresses.insert(QHostAddress(QString::fromWCharArray(rawString, length))); - } - for (const QHostAddress &address : qAsConst(addresses)) { - QDnsHostAddressRecord record; - record.d->name = aceHostname; - record.d->value = address; - reply->hostAddressRecords.append(record); - } -} - -QT_END_NAMESPACE diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index b9fc129685..0783c0751f 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -479,14 +479,10 @@ QHostAddress::QHostAddress(const QString &address) QHostAddress::QHostAddress(const struct sockaddr *sockaddr) : d(new QHostAddressPrivate) { -#ifndef Q_OS_WINRT if (sockaddr->sa_family == AF_INET) setAddress(htonl(((const sockaddr_in *)sockaddr)->sin_addr.s_addr)); else if (sockaddr->sa_family == AF_INET6) setAddress(((const sockaddr_in6 *)sockaddr)->sin6_addr.s6_addr); -#else - Q_UNUSED(sockaddr) -#endif } /*! @@ -659,15 +655,11 @@ bool QHostAddress::setAddress(const QString &address) void QHostAddress::setAddress(const struct sockaddr *sockaddr) { d.detach(); -#ifndef Q_OS_WINRT clear(); if (sockaddr->sa_family == AF_INET) setAddress(htonl(((const sockaddr_in *)sockaddr)->sin_addr.s_addr)); else if (sockaddr->sa_family == AF_INET6) setAddress(((const sockaddr_in6 *)sockaddr)->sin6_addr.s6_addr); -#else - Q_UNUSED(sockaddr) -#endif } /*! diff --git a/src/network/kernel/qnetworkinterface_winrt.cpp b/src/network/kernel/qnetworkinterface_winrt.cpp deleted file mode 100644 index 24ac3df52f..0000000000 --- a/src/network/kernel/qnetworkinterface_winrt.cpp +++ /dev/null @@ -1,245 +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 "qnetworkinterface.h" -#include "qnetworkinterface_p.h" - -#ifndef QT_NO_NETWORKINTERFACE - -#include <qfunctions_winrt.h> - -#include <wrl.h> -#include <windows.foundation.h> -#include <windows.foundation.collections.h> -#include <windows.networking.h> -#include <windows.networking.connectivity.h> - -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; - -#include <qhostinfo.h> - -QT_BEGIN_NAMESPACE - -struct HostNameInfo { - GUID adapterId; - unsigned char prefixLength; - QString address; -}; - -uint QNetworkInterfaceManager::interfaceIndexFromName(const QString &name) -{ - // TBD - may not be possible - Q_UNUSED(name); - return 0; -} - -QString QNetworkInterfaceManager::interfaceNameFromIndex(uint index) -{ - // TBD - may not be possible - return QString::number(index); -} - -static QNetworkInterfacePrivate *interfaceFromProfile(IConnectionProfile *profile, QList<HostNameInfo> *hostList) -{ - if (!profile) - return 0; - - QNetworkInterfacePrivate *iface = new QNetworkInterfacePrivate; - - NetworkConnectivityLevel connectivityLevel; - HRESULT hr = profile->GetNetworkConnectivityLevel(&connectivityLevel); - Q_ASSERT_SUCCEEDED(hr); - if (connectivityLevel != NetworkConnectivityLevel_None) - iface->flags = QNetworkInterface::IsUp | QNetworkInterface::IsRunning; - iface->flags |= QNetworkInterface::CanBroadcast; - - ComPtr<INetworkAdapter> adapter; - hr = profile->get_NetworkAdapter(&adapter); - // Indicates that no internet connection is available/the device is in airplane mode - if (hr == E_INVALIDARG) - return 0; - Q_ASSERT_SUCCEEDED(hr); - UINT32 type; - hr = adapter->get_IanaInterfaceType(&type); - Q_ASSERT_SUCCEEDED(hr); - if (type == 23) - iface->flags |= QNetworkInterface::IsPointToPoint; - GUID id; - hr = adapter->get_NetworkAdapterId(&id); - Q_ASSERT_SUCCEEDED(hr); - OLECHAR adapterName[39]={0}; - StringFromGUID2(id, adapterName, 39); - iface->name = QString::fromWCharArray(adapterName); - - // According to http://stackoverflow.com/questions/12936193/how-unique-is-the-ethernet-network-adapter-id-in-winrt-it-is-derived-from-the-m - // obtaining the MAC address using WinRT API is impossible - // iface->hardwareAddress = ? - - for (int i = 0; i < hostList->length(); ++i) { - const HostNameInfo hostInfo = hostList->at(i); - if (id != hostInfo.adapterId) - continue; - - QNetworkAddressEntry entry; - entry.setIp(QHostAddress(hostInfo.address)); - entry.setPrefixLength(hostInfo.prefixLength); - iface->addressEntries << entry; - - hostList->takeAt(i); - --i; - } - return iface; -} - -static QList<QNetworkInterfacePrivate *> interfaceListing() -{ - QList<QNetworkInterfacePrivate *> interfaces; - - QList<HostNameInfo> hostList; - - ComPtr<INetworkInformationStatics> hostNameStatics; - HRESULT hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_Connectivity_NetworkInformation).Get(), &hostNameStatics); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr<IVectorView<HostName *>> hostNames; - hr = hostNameStatics->GetHostNames(&hostNames); - Q_ASSERT_SUCCEEDED(hr); - if (!hostNames) - return interfaces; - - unsigned int hostNameCount; - hr = hostNames->get_Size(&hostNameCount); - Q_ASSERT_SUCCEEDED(hr); - for (unsigned i = 0; i < hostNameCount; ++i) { - HostNameInfo hostInfo; - ComPtr<IHostName> hostName; - hr = hostNames->GetAt(i, &hostName); - Q_ASSERT_SUCCEEDED(hr); - - HostNameType type; - hr = hostName->get_Type(&type); - Q_ASSERT_SUCCEEDED(hr); - if (type == HostNameType_DomainName) - continue; - - ComPtr<IIPInformation> ipInformation; - hr = hostName->get_IPInformation(&ipInformation); - Q_ASSERT_SUCCEEDED(hr); - ComPtr<INetworkAdapter> currentAdapter; - hr = ipInformation->get_NetworkAdapter(¤tAdapter); - Q_ASSERT_SUCCEEDED(hr); - - hr = currentAdapter->get_NetworkAdapterId(&hostInfo.adapterId); - Q_ASSERT_SUCCEEDED(hr); - - ComPtr<IReference<unsigned char>> prefixLengthReference; - hr = ipInformation->get_PrefixLength(&prefixLengthReference); - Q_ASSERT_SUCCEEDED(hr); - - hr = prefixLengthReference->get_Value(&hostInfo.prefixLength); - Q_ASSERT_SUCCEEDED(hr); - - // invalid prefixes - if ((type == HostNameType_Ipv4 && hostInfo.prefixLength > 32) - || (type == HostNameType_Ipv6 && hostInfo.prefixLength > 128)) - continue; - - HString name; - hr = hostName->get_CanonicalName(name.GetAddressOf()); - Q_ASSERT_SUCCEEDED(hr); - UINT32 length; - PCWSTR rawString = name.GetRawBuffer(&length); - hostInfo.address = QString::fromWCharArray(rawString, length); - - hostList << hostInfo; - } - - INetworkInformationStatics *networkInfoStatics; - hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Networking_Connectivity_NetworkInformation).Get(), &networkInfoStatics); - Q_ASSERT_SUCCEEDED(hr); - ComPtr<IConnectionProfile> connectionProfile; - hr = networkInfoStatics->GetInternetConnectionProfile(&connectionProfile); - Q_ASSERT_SUCCEEDED(hr); - QNetworkInterfacePrivate *iface = interfaceFromProfile(connectionProfile.Get(), &hostList); - if (iface) { - iface->index = 0; - interfaces << iface; - } - - ComPtr<IVectorView<ConnectionProfile *>> connectionProfiles; - hr = networkInfoStatics->GetConnectionProfiles(&connectionProfiles); - Q_ASSERT_SUCCEEDED(hr); - if (!connectionProfiles) - return interfaces; - - unsigned int size; - hr = connectionProfiles->get_Size(&size); - Q_ASSERT_SUCCEEDED(hr); - for (unsigned int i = 0; i < size; ++i) { - ComPtr<IConnectionProfile> profile; - hr = connectionProfiles->GetAt(i, &profile); - Q_ASSERT_SUCCEEDED(hr); - - iface = interfaceFromProfile(profile.Get(), &hostList); - if (iface) { - iface->index = i + 1; - interfaces << iface; - } - } - return interfaces; -} - -QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan() -{ - return interfaceListing(); -} - -QString QHostInfo::localDomainName() -{ - return QString(); -} - -QT_END_NAMESPACE - -#endif // QT_NO_NETWORKINTERFACE diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp index 9dfe32d5f7..c4dc33f66f 100644 --- a/src/network/kernel/qnetworkproxy_win.cpp +++ b/src/network/kernel/qnetworkproxy_win.cpp @@ -367,7 +367,6 @@ static QList<QNetworkProxy> parseServerList(const QNetworkProxyQuery &query, con return removeDuplicateProxies(result); } -#if !defined(Q_OS_WINRT) namespace { class QRegistryWatcher { Q_DISABLE_COPY_MOVE(QRegistryWatcher) @@ -421,7 +420,6 @@ private: QVector<HKEY> m_registryHandles; }; } // namespace -#endif // !defined(Q_OS_WINRT) class QWindowsSystemProxy { @@ -441,9 +439,7 @@ public: QStringList proxyServerList; QStringList proxyBypass; QList<QNetworkProxy> defaultResult; -#if !defined(Q_OS_WINRT) QRegistryWatcher proxySettingsWatcher; -#endif bool initialized; bool functional; bool isAutoConfig; @@ -477,9 +473,7 @@ void QWindowsSystemProxy::reset() void QWindowsSystemProxy::init() { bool proxySettingsChanged = false; -#if !defined(Q_OS_WINRT) proxySettingsChanged = proxySettingsWatcher.hasChanged(); -#endif if (initialized && !proxySettingsChanged) return; @@ -487,12 +481,10 @@ void QWindowsSystemProxy::init() reset(); -#if !defined(Q_OS_WINRT) proxySettingsWatcher.clear(); // needs reset to trigger a new detection proxySettingsWatcher.addLocation(HKEY_CURRENT_USER, QStringLiteral("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")); proxySettingsWatcher.addLocation(HKEY_LOCAL_MACHINE, QStringLiteral("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")); proxySettingsWatcher.addLocation(HKEY_LOCAL_MACHINE, QStringLiteral("Software\\Policies\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")); -#endif // load the winhttp.dll library QSystemLibrary lib(L"winhttp"); |