Commit Graph

17 Commits (39a5ed4bdd348d3cd18a08d322b48d85e8d116e8)

Author SHA1 Message Date
Yuhang Zhao bd7fa4a537 Windows: centralize how we handle error messages
Currently QtBase contains multiple implementation of how to get the Win32
and COM error messages, and they are almost exactly the same, what's worse,
Qt already has a private QSystemError class to do such things, so we are
re-inventing the wheel in many places. This patch removes all other custom
error message implementations besides the QSystemError one. And since there
are a lot of places need the COM error message, move the implementation to
QSystemError so that it can handle both Win32 error and COM error.

Since I'm touching these lines anyway, break them into short lines if they
are above the length limit.

Change-Id: I1067c874011800303f0f114b5cb8830ac6810fc0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-11-16 19:44:43 +08:00
Tor Arne Vestbø 1bc7e9e77b Add QComHelper class for dealing with COM on Windows
Unifies our approach to calling CoInitializeEx and CoUninitialize,
removing a lot of boilerplate in the process, and also fixes a few
bugs where we would incorrectly balance our calls to CoInitializeEx
and CoUninitialize.

The optimistic approach of qfilesystemengine_win.cpp of calling
CoCreateInstance without initializing the COM library explicitly
has been removed, as calling CoInitializeEx should be a noop in
the situation where it's already been loaded.

Change-Id: I9e2ec101678c2ebb9946504b5e8034e58f1bb56a
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-08-29 15:39:34 +02:00
Yuhang Zhao 8a0e0f8cc1 QtBase: Windows: Replace some deprecated API usages
Microsoft recommends to use CoInitializeEx()
and SetWindowLongPtr()/GetWindowLongPtr() in new code.

Use COINIT_DISABLE_OLE1DDE to avoid overhead of
initializing and using obsolete technology.

Pick-to: 6.4
Change-Id: I9d16943e864d4487dd4f46fd9325579c298c52b9
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-08-03 23:24:21 +08:00
Lucie Gérard 05fc3aef53 Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-05-16 16:37:38 +02:00
Mårten Nordheim a6f4a1b282 QNetConMonitor/Win: Drop all warnings down to debug
The things they warn about are not of any serious consequence
to users or end-users and there's nothing they can do about it.
Adding to that, in Qt 6 it has a reduced role since
QNAM::networkAccessible was removed.

Fixes: QTBUG-100482
Pick-to: 6.3 6.2
Change-Id: I178d056c513b5dbb122d5c731af602d3dc117d8e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-02-09 16:48:26 +01:00
Mårten Nordheim 67d2963583 Remove QNetworkStatusMonitor
Since the old code is now fully integrated in QNetworkInformation backends

Change-Id: Ia843d17bb3c98333e8d68752e25722b5860f48e0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
(cherry picked from commit 7860b9e6ffece207d054ac0c321bc3c5b983708f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2021-02-06 10:28:20 +00:00
Allan Sandfeld Jensen c2be9180b7 Replace Q_REQUIRED_RESULT with [[nodiscard]]
It was already used many places directly making the code inconsistent.

Change-Id: I3b14bc6c333640fb3ba33c71eba97e78c973e44b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-25 07:10:45 +02:00
Mårten Nordheim 949254d5e4 qnetconmon: Downgrade Warning to Debug
It triggers when connecting to localhost (or when using socks proxy) and
is nothing you can act on most of the time, so change it to qCDebug.

Change-Id: I669fbde4fa0ed194703ea6a4dab13790aa771852
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2020-08-28 08:53:38 +02:00
Mårten Nordheim f1f0aa4a3a QNAM: Make QNetworkConnectionMonitor able to move to another thread
Requires moving construction and destruction of the IConnectionPoint
(contained in QNetworkListManagerEvents contained in
QNetworkStatusMonitorPrivate) and the calls to CoInitialize and
CoUninitialize to start()/stop() so it can be taken down
and brought up in a reasonable way.

Partial squashed cherry pick of bde6b27882143acbafa8c0b2e8055c3808ae3dd4
and the following fixup patch 84be436ef0f8253af87cdd2742858107e54c228b.

Task-number: QTBUG-84031
Change-Id: I9d644261c6c730ea511e28d75da91bd34504bd03
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
(cherry picked from commit bde6b27882143acbafa8c0b2e8055c3808ae3dd4)
(cherry picked from commit 84be436ef0f8253af87cdd2742858107e54c228b)
2020-06-22 12:17:55 +02:00
Mårten Nordheim 382577419a QNAM/QNetConMon: Update handling of QNetworkConnectionMonitor::start
QNetworkConnectionMonitor::start was previously called after checking
d->networkAccessible, unfortunately that means if the network was
unavailable when QNetworkConnectionMonitor was created we don't
subscribe to updates or recheck the status (unless
QNetworkAccessManager::networkAccessible() is called).

Move the call to start to before the offline check. Also update the
Windows backend so that it updates networkAccessible on the call to
start()

Pick-to: 5.15
Change-Id: I37647f19f703947143e7cbdafe09619ce0d98cc1
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-04-30 14:48:56 +00:00
Mårten Nordheim 6c3bca01d9 QNetConMonitor(Win): Account for LOCALNETWORK reachability
What I originally thought NLM_CONNECTIVITY_IPV*_SUBNET meant turns out
to be what NLM_CONNECTIVITY_IPV*_LOCALNETWORK is, leaving me to wonder
when *_SUBNET is actually used. Anyway we now also check *_LOCALNETWORK
to make sure we're not unnecessarily denying certain connections to be
made.

At the same time check for link-local connections where both local and
remote are link-local, in this case even NLM_CONNECTIVITY_IPV*_NOTRAFFIC
is valid. Unfortunately this check cannot be done in
QNetworkStatusMonitor, so QNAM will likely not allow these connections.

Task-number: QTBUG-80947
Change-Id: Ieb96ce9f4a478eef0c3ea47f2471f701c102b4d4
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-02-14 13:56:52 +01:00
Mårten Nordheim af1c3bf884 qnetconmonitor_win: Mark destructors virtual
After these two classes were no longer marked final clang started
complaining because their dtor is not marked virtual.

Amends 9dc594b2bf

Change-Id: I42b78c0b444935d3e0cb4d476d3881fd5fb5c3cb
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-09-13 10:47:30 +02:00
Mårten Nordheim 0d336ab313 QNetworkConnectionMonitor(win): Fix memory leak
Through some misconceptions about ComPtr I ended up thinking that it did
not call AddRef internally on creation. But it does. This lead to always
having > 1 ref-counter.

Also stop the monitor on destruction if it hasn't already been stopped.
As was already done for QNetworkStatusMonitorPrivate.

Change-Id: Ic72a2f5cb3325f86c018f90b497caaec834cb214
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-08-25 09:54:06 +00:00
Friedemann Kleint 9dc594b2bf QNetworkConnectionMonitor: Fix compilation with older Windows Kits
Remove "final" since it has problems with 10.0.15063.0:

qnetconmonitor_win.cpp
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\winrt\wrl/client.h(61): error C3246: 'Microsoft::WRL::Details::RemoveIUnknownBase<T>': cannot inherit from 'QNetworkConnectionEvents' as it has been declared as 'final'
        with
        [
            T=QNetworkConnectionEvents
        ]
kernel\qnetconmonitor_win.cpp(102): note: see declaration of 'QNetworkConnectionEvents'
kernel\qnetconmonitor_win.cpp(373): note: see reference to class template instantiation 'Microsoft::WRL::Details::RemoveIUnknownBase<T>' being compiled
        with
        [
            T=QNetworkConnectionEvents
        ]
C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\winrt\wrl/client.h(61): error C3246: 'Microsoft::WRL::Details::RemoveIUnknownBase<T>': cannot inherit from 'QNetworkListManagerEvents' as it has been declared as 'final'
        with
        [
            T=QNetworkListManagerEvents
        ]
kernel\qnetconmonitor_win.cpp(468): note: see declaration of 'QNetworkListManagerEvents'
kernel\qnetconmonitor_win.cpp(650): note: see reference to class template instantiation 'Microsoft::WRL::Details::RemoveIUnknownBase<T>' being compiled
        with
        [
            T=QNetworkListManagerEvents
        ]

Change-Id: Ia35545b65acaebea3fcff194884be8a156974123
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-13 10:32:04 +02:00
Mårten Nordheim 19e45ee4c1 Win: qnetconmon: Use CoInitialize instead of CoInitializeEx
Somehow I didn't test using QNetwork{Status,Connection}Monitor together
with Gui. In qwindowstheme.cpp we call CoInitialize and as such we
cannot use CoInitializeEx with a different thread mode.

Change-Id: If4a4441cc2616371d8b7cda72cfad11187d8f153
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-17 11:42:46 +02:00
Mårten Nordheim 006baa1c60 qnetconmonitor: Fix misspelling of accessible
Change-Id: Ia898d305f64abb5d3d1de007c764c143b26c7654
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-08 12:12:51 +02:00
Mårten Nordheim dc431b7e85 Introduce QNetwork(Connection|Status)Monitor to Windows
Currently not available for mingw because it's missing all the
interfaces. But should start working once it has them.

Change-Id: I231e8b69e008c5300a83087fe9cd071acd0687cb
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-08 12:12:45 +02:00