Commit Graph

3702 Commits (2d2fae48637d0aaa77cdd7dd413c40efec27a8a5)

Author SHA1 Message Date
Juha Vuolle 1965940037 Add QHttpHeaders::nameAt() function
We need a way for users to consume the complete contents of
QHttpHeaders.

For now, the only way is

    for (const auto &name : h.names())
        use(h.value/combinedValue(name));

which is quadratic.

Adding the usual iterators and operator[] would require us to
expose the underlying value_type, which we're not ready to do, yet.

So add nameAt() and (in a previous commit) valueAt() functions to
enable efficient indexed iteration without the need to expose a
value_type.

Return by QLatin1StringView, not QAnyStringView, because that
statically encodes the actual encoding used (and required by HTTP
specs and promised by the class documentation, so it won't need to
change). For the setters, we want to be accomodating QString,
QByteArray, etc, which is why those take QAnyStringView.

Resulted from API-review.

Pick-to: 6.7
Change-Id: I0153c5aad0f6260b5dbc963de0aaf4ef42fdd4f1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2024-01-20 04:35:29 +01:00
Juha Vuolle 4bb12dab6a Add QHttpHeaders::valueAt() function
We need a way for users to consume the complete contents of
QHttpHeaders.

For now, the only way is

    for (const auto &name : h.names())
        use(h.value/combinedValue(name));

which is quadratic.

Adding the usual iterators and operator[] would require us to
expose the underlying value_type, which we're not ready to do, yet.

So add valueAt() and (in a follow-up) nameAt() functions to enable
efficient indexed iteration without the need to expose a value_type.

Resulted from API-review

Pick-to: 6.7
Change-Id: I863f59618cea5682386ce26b66b4b1655eac7950
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2024-01-20 03:35:25 +00:00
Mårten Nordheim a3a48815cc QH2Connection: Fix issue with unity-build/odr
The static function appeared in two places, and in a unity-build
this fails quite visibly.

Pick-to: 6.7
Change-Id: I60000d01194a2c79ca9c101f2a6d3f77f469f1a7
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Nodir Temirkhodjaev <nodir.temir@gmail.com>
2024-01-18 21:56:46 +01:00
Marc Mutz fab57c25e2 QH2Expected: use Rule Of Zero
It doesn't always pay to be explicit about SMFs. In the present case,
clang-tidy complains that the move ctors of the class aren't
noexcept. It's a false positive, but just removing all the =default'ed
SMFs makes it go away, too.

Amends 0dba3f6b71.

Pick-to: 6.7
Change-Id: Ib641d4eed9e214b41c143b60494e82790da6fda8
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-01-18 14:49:22 +00:00
Mårten Nordheim d77162a458 Fix accidental implicit QBA->QString conversion
And make sure it cannot happen again by adding the
QT_NO_CAST_FROM_ASCII define to the Network module.

Amends 5346404da6

Change-Id: Ib10d7822c514caaf40b6b36ee71947c034daf338
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2024-01-18 14:18:00 +01:00
Mårten Nordheim 88f5fc47eb Http: Start more connections faster after determining network layer
Previously we would more or less wait for the first connection to finish before
initiating more connections. This was just happening by virtue of
calling startNextRequest when a request was finished.

Since we have already determined the preferred network layer, let's just
try to start more connections. In case we are using https this doesn't
make a difference because we will try http2 upgrade first before allowing
multiple connections. Unless, of course, http2 has been disabled.

Fixes: QTBUG-120619
Pick-to: 6.7 6.6 6.5
Change-Id: Id3c3be59fd07120bff574d63481119e5ed9eb88a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2024-01-18 14:18:00 +01:00
Thiago Macieira c09219e946 QNetworkRequest: export the static constexpr (inline) member variables
All that is required is that we write the declaration as if they weren't
inline, like we used to for C++98 non-constexpr static members. Amends
090991123d.

This is required with MinGW and happens with both GCC and Clang: when a
static constexpr variable found in an exported class is used in a
context that requires getting its address, the compiler emit a DLL-
importing statement. For example:

 void f(const std::chrono::milliseconds &ms);
 void f()
 {
    f(QNetworkRequest::DefaultTransferTimeout);
 }

Emits with GCC:
 _Z1fv:
        movq    __imp__ZN15QNetworkRequest22DefaultTransferTimeoutE(%rip), %rcx
        jmp     _Z1fRKNSt6chrono8durationIxSt5ratioILx1ELx1000EEEE

And Clang:
 _Z1fv:                                  # @_Z1fv
 # %bb.0:
        movq    __imp__ZN15QNetworkRequest22DefaultTransferTimeoutE(%rip), %rcx
        jmp     _Z1fRKNSt6chrono8durationIxSt5ratioILx1ELx1000EEEE # TAILCALL

Pick-to: 6.7
Fixes: QTBUG-121135
Change-Id: I76ffba14ece04f24b43efffd17aae1a98071c570
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
Reviewed-by: André Klitzing <aklitzing@gmail.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-01-17 21:50:27 +00:00
Alexey Edelev e86c24c20c Remove the use of GENERATE_PRIVATE_CPP_EXPORTS argument
Task-number: QTBUG-117983
Change-Id: Ic12e6c9daedd56f54cbde20e6bebd19f8420604c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2024-01-17 20:30:36 +01:00
Mårten Nordheim 0dba3f6b71 Privately introduce QHttp2Connection
For use in QtGRPC.

There is some duplication between this code and the code in
QHttp2ProtocolHandler. But let's not change the implementation of
the protocol handler after the 6.7 beta release. Nor do I think we
should do it for 6.8 LTS. So let's just live with the duplication
until that has branched.

Pick-to: 6.7
Fixes: QTBUG-105491
Change-Id: I69aa38a3c341347e702f9c07c27287aee38a16f2
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-01-17 16:05:25 +01:00
Juha Vuolle 37549cda72 Add static access function to wellknown headers
Resulted from API-review

Pick-to: 6.7
Change-Id: I438a5cf9c88b572adece99af0314eefbc4371f8f
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-01-17 05:46:36 +02:00
Marcin Zdunek 5346404da6 Fix missing certs directory in VxWorks
tst_qsslsocket checks for system CA certificates, which VxWorks doesn't have out of the box, which causes a lot of testcases to fail.
As VxWorks doesn't provide default directory structure, directory with ssl certs is provided by setting a variable.

 Task-number: QTBUG-115777

Change-Id: I5c93933ee5fbcafd6ffd76b574d8793fe75dbdbc
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-01-16 11:21:55 +01:00
Juha Vuolle 89dab8578c Remove HTTP headers equals() / comparison
There's several ways to compare HTTP headers, and arguably
the need for it is not very high. For the time being users can use
different accessors and compare in ways that make sense for
their use cases.

Consequently since HTTP headers are no longer trivially comparable,
it makes also comparing the request factories more 'moot' because
headers are a central piece of request information. So removed
comparison from request factory as well.

These comparisons can be restored later if a clear understanding
on it's need, and on how it should be best done, emerges.

Resulted from API-review

Pick-to: 6.7
Change-Id: Idb5ab3710268b52a8e59656db8cc7de82f0ae511
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-15 10:29:07 +02:00
Juha Vuolle 819a8f30f4 Rename QNetworkRequestFactory header functions to commonHeaders
Resulted from API-review

Pick-to: 6.7
Change-Id: Iae712e67839d27064a0155830fd201ab15693091
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-15 09:43:38 +02:00
Juha Vuolle 723ab99b1a Rename the replace() function's value to newValue to reflect its role
Found in API-review

Pick-to: 6.7
Change-Id: Ib047c79d977ad6870c1e426cd1add994a3634df4
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-12 10:28:06 +02:00
Juha Vuolle f0db080880 Rename qnetworkrequestfactory's request() to createRequest()
Resulted from API-review

Pick-to: 6.7
Change-Id: I09349dbddbfc191d871563b834396b387c6153c9
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2024-01-12 10:28:06 +02:00
Marc Mutz 3a61de282c QRestReply: optionally return the QJsonParseError from json()
... and remove the debug output of the internal QJsonParseError.

This allows users of the function to get the details in
machine-readable form, and to distinguish between !finished and an
actual Json parsing error.

Found in API-review.

Pick-to: 6.7
Change-Id: Ia237b192a894d692b965f6bedb4c94d3b6537535
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2024-01-12 06:37:19 +02:00
Marc Mutz fbe29fb368 QRestReply: include / fwd-declare what you need
Don't depend on transitive includes and forward declarations.

Found in API-review.

Pick-to: 6.7
Change-Id: I61b9517453f164391abb9254d92e7ea38051e730
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2024-01-12 06:37:16 +02:00
Juha Vuolle 1702a37a39 Change QRestReply json return type to QJsonDocument
The json return type and function naming has gone back
and forth. Let's go with QJsonDocument after all, and add new
overloads in future if necessary.

Pick-to: 6.7
Task-number: QTBUG-119002
Change-Id: I3f9de0e6cba7d5c52d016d252d65b81f345af050
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-12 06:37:11 +02:00
Juha Vuolle e2462b09b7 Rename QHttpHeaders::has() to contains()
Resulted from API-review

Pick-to: 6.7
Change-Id: I84e880dc6edb9c62fd1ddd50d477347443fd52a7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-11 14:22:08 +02:00
Juha Vuolle b5665f6fab Add QHttpHeaders::reserve()
Found in API-review

Pick-to: 6.7
Change-Id: Ia41eb91e9e62a252b76c20c67c1c599c0f6a633d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2024-01-11 05:03:48 +00:00
Kai Köhne f23154c05b Simplify QHttpHeaders documentation
Simplify wording, leave out historical baggage (which
is not really relevant for users that look into new code).

Pick-to: 6.7
Change-Id: I9be1d42b6d75dd4bf6fccd6ecb47bc7cd6026ed3
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2024-01-10 17:14:27 +01:00
Juha Vuolle ec98afd192 Remove an unused, leftover, include
Pick-to: 6.7
Task-number: QTBUG-119002
Change-Id: Ic4054e82c11eede7823389d534bbe56328ce3dc8
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2024-01-10 16:36:05 +02:00
Juha Vuolle 4da14a67a6 Add streaming text support to QRestReply
Provides the possibility to read text data as it arrives, instead
of needing to wait until the whole body is received.

Pick-to: 6.7
Task-number: QTBUG-119002
Change-Id: I64f90148fd41a77c4ae2d5dbd6194a924a9f3a86
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2024-01-10 16:36:05 +02:00
Marc Mutz 7897ec88f4 QHttpHeaders: add value(name, fall-back)
The vast majority of header fields appear only once, but there was no
efficient way to get that value: values() returns as a
QList<QByteArray> (allocating) while combinedValue() returns a
QByteArray constructed from values().join() (also allocating).

It follows that the QHttpHeaders API is incomplete (lacks an efficient
basis of operations in EoP terms).

Add a value() function that returns either the value or a
user-provided fall-back as a QByteArrayView. Unlike values() and
combinedValue(), this function can be noexcept, greatly improving
codegen for callers.

Found in API review.

Pick-to: 6.7
Task-number: QTBUG-107042
Change-Id: I2da20815fd46fdd7f150c224f41eee53abed313e
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-01-09 18:54:46 +01:00
Ivan Solovev 936e72d180 Fix QThreadPool::maxThreadCount() usage
The docs claim that QThreadPool always creates at least one thread.
However, the user can (usually by mistake) request zero or a negative
number of threads.
The maxThreadCount() function is simply returning the value, that was
requested by the user.
Since it's a public API, it is used in several places in QtConcurrent,
where it is assumed that the value is always positive. This can lead
to a crash if the user sets zero as a maxThreadCount.

Update all such places with std::max(maxThreadCount(), 1).
Prefer this approach over changing the return value of
maxThreadCount(), because its behavior is documented and tested.

Amends 885eff0537.

Fixes: QTBUG-120335
Pick-to: 6.7 6.6 6.5 6.2
Change-Id: Id3b2087cec7fbc7a2d42febca6586f2dacffe444
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2024-01-08 18:29:26 +01:00
Mårten Nordheim 8ce261f6d8 Http2: move assemble_hpack_block declaration to header
Pick-to: 6.7
Change-Id: I5033d433d2aa499007a6e436dbb70d9c48315e8b
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-01-08 18:29:26 +01:00
Alexey Edelev b72f013fcc Remove the use of Q_NETWORK_PRIVATE_EXPORT
Task-number: QTBUG-117983
Change-Id: I2339dc96b49aba38169ad3e84f48c9d3c97d6117
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-22 19:07:27 +01:00
Marc Mutz 1e6bb61af3 Http2: fix potential overflow in assemble_hpack_block()
The function is given a vector of Http2::Frame's and flattens it into
a vector<uchar>. While each Frame can contain a maximum of 16GiB of
data (24-bit size field), one "only" needs 257 of them to overflow the
quint32 variable's range.

So make sure any overflow does not go undetected.

Keep the limited uint32_t range for now, as we don't know whether all
consumers of the result can deal with more than 4GiB of data.

Since all these frames must be in memory, this cannot overflow in
practice on 32-bit machines.

Pick-to: 6.7 6.6 6.5 6.2 5.15
Change-Id: Iafaa7d1c870cba9100e75065db11d95934f86213
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-20 14:33:49 +01:00
Krzysztof Sommerfeld 38fa1d55ee Enable IPv6 tests for VxWorks
Task-number: QTBUG-115777
Pick-to: 6.7
Change-Id: I1ec9cda2f9fc72bf539e75fa7144d9b4b97d7369
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-12-15 17:12:38 +00:00
Tor Arne Vestbø c90ee82789 Remove qDeleteInEventHandler
It's equivalent to delete these days, and has been for a long time,
since 2011 in fact, when the last remnants of QT_JAMBI_BUILD were
removed.

Change-Id: I7703e41c04204844da4ee75fa251b361e0db4ead
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-12-14 20:49:47 +01:00
Marc Mutz ee5da1f2ea HPack: fix incorrect integer overflow check
This code never worked:

For the comparison with max() - 32 to trigger, on 32-bit platforms (or
Qt 5) signed interger overflow would have had to happen in the
addition of the two sizes. The compiler can therefore remove the
overflow check as dead code.

On Qt 6 and 64-bit platforms, the signed integer addition would be
very unlikely to overflow, but the following truncation to uint32
would yield the correct result only in a narrow 32-value window just
below UINT_MAX, if even that.

Fix by using the proper tool, qAddOverflow.

Pick-to: 6.7 6.6 6.5 6.2 5.15
Change-Id: I7599f2e75ff7f488077b0c60b81022591005661c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2023-12-13 21:54:00 +01:00
Marc Mutz 658607a34e HPack: fix a Yoda Condition
Putting the variable on the LHS of a relational operation makes the
expression easier to read. In this case, we find that the whole
expression is nonsensical as an overflow protection, because if
name.size() + value.size() overflows, the result will exactly _not_
be > max() - 32, because UB will have happened.

To be fixed in a follow-up commit.

As a drive-by, add parentheses around the RHS.

Pick-to: 6.7 6.6 6.5 6.2 5.15
Change-Id: I35ce598884c37c51b74756b3bd2734b9aad63c09
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2023-12-13 21:54:00 +01:00
Topi Reinio 3861b92ed9 Doc: QRestAccessManager: Qualify template arguments in \fn commands
Since version 6.7, QDoc requires accurate definition of template
arguments in signatures passed to the \fn command.

Qualify the 'if_compatible_callback' template with the class it's
declared in.

Pick-to: 6.7
Change-Id: Ifd4618071c950e812c4df9a2e4e212317a6c9118
Reviewed-by: Luca Di Sera <luca.disera@qt.io>
2023-12-13 18:52:17 +00:00
Marc Mutz 5fb2d50e42 Make QNetworkRequest::KnownHeaders a Q_ENUM
... so QDebug e.g. stringyifies it automatically.

Requires making QNetworkRequest a Q_GADGET.

Task-number: QTBUG-114647
Change-Id: Idb4f3ecd98f79c1e28596c7be763898aba4b6562
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2023-12-09 02:04:24 +01:00
Juha Vuolle 0bfec6cd11 QHttpHeaders: reserve memory for headers when creating from a container
To avoid any potential resizes during append looping

Task-number: QTBUG-119002
Change-Id: I8f4c391f05b5c5bd0b48a4f17b11996652006508
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2023-12-08 15:53:36 +02:00
Juha Vuolle 11b19b3341 Mark REST helper classes as tech preview
Task-number: QTBUG-119002
Change-Id: Icf4d50b0e6f25e4e5f82df0b23a249332bbf55bf
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:36 +02:00
Juha Vuolle 8da4156da7 Add PATCH support for QRestAccessManager
It is somewhat common HTTP method with RESTful use cases
(partial updates on resources)

Task-number: QTBUG-114637
Change-Id: Id252d3f4b54c3ebb8df5c93259e64a4af2d0ca2f
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:36 +02:00
Juha Vuolle a80ed49b10 QRestAM custom HTTP 'method' support
This commit adds support for sending custom, non-standard, HTTP
methods / verbs.

Fixes: QTBUG-116262
Change-Id: I77addb389a7e4346b63526176bf8323696a7a337
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2023-12-08 15:53:36 +02:00
Juha Vuolle 98b240d00a Add username/password support to QNetworkRequestFactory
Task-number: QTBUG-114717
Change-Id: I8d6beb6f81668dcba59cbaee6044606fb874bad2
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:35 +02:00
Juha Vuolle b72701a690 Add QDebug support for QRestAccessManager
Task-number: QTBUG-114705
Change-Id: Id33dbfd6906989dfcde654a4f7d6ab4b5e743c33
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:35 +02:00
Juha Vuolle 0f34316fb7 Add QDebug support for QRestReply
Task-number: QTBUG-114705
Change-Id: I6c355d683389b773082c5966434d733bf5aec506
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:35 +02:00
Juha Vuolle 6420e8b895 Add QDebug support for QNetworkRequestFactory
Task-number: QTBUG-114705
Change-Id: If3e9d67ee310192debf58771e365f6035d4b2da6
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2023-12-08 15:53:35 +02:00
Juha Vuolle 669a48e5ae Functions for setting request transfer timeouts
Added to both QNetworkRequestFactory and QRestAccessManager

Task-number: QTBUG-114717
Change-Id: Ibca55bba548a034a0da7ea60550642c150b63dc2
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:35 +02:00
Juha Vuolle 090991123d Support for std::chrono as transferTimeout type
Provide users with means to use more modern time/duration type.

Please note that since QTimer does not currently support
timeouts larger than 'int' milliseconds, the limit on how long
durations can be expressed, remains. This should not
be an issue in practice with network requests, as a typical
int32 system can express timeouts of ~24 days.

[ChangeLog][QtNetwork][QNetworkAccessManager] Add std::chrono
support for transfer timeout.

[ChangeLog][QtNetwork][QNetworkRequest] Add std::chrono support
for transfer timeout.

Fixes: QTBUG-118714
Change-Id: If85678a5994c59bac5926e47f98c9cfeb2a07c30
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2023-12-08 15:53:34 +02:00
Juha Vuolle 298d5a4bbd Add uploadProgress signal for QRestReply
Task-number: QTBUG-114717
Change-Id: I2052e4cc4da90962483f5f1931dc20552e484e34
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2023-12-08 15:53:34 +02:00
Juha Vuolle e9f703ed3b Add signals and methods for QRestReply download progress
These include:
- readyRead(), signal for indicating new data availability
- bytesAvailable(), function for checking available data amount
- downloadProgress(), signal for monitoring download progress

Task-number: QTBUG-114717
Change-Id: Id6c49530d7857f5c76bd111eba84525137294ea7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:33 +02:00
Juha Vuolle e560adef21 Add REST client convenience wrappers
[ChangeLog][QtNetwork][QRestAccessManager] Added new convenience
classes QRestAccessManager and QRestReply for typical RESTful
client application usage

Task-number: QTBUG-114637
Task-number: QTBUG-114701
Change-Id: I65057e56bf27f365b54bfd528565efd5f09386aa
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Mate Barany <mate.barany@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2023-12-08 15:53:33 +02:00
Juha Vuolle f587ba1036 QNetworkRequestFactory convenience class
The class provides a way to represent server-side service endpoints.
With RESTful applications these endpoints typically have a need for
repeating requests fields such as headers, query parameters,
bearer token, base URL, SSL configuration. This class allows setting
of the repeating parts, while allowing the setting of changing parts
on a per-request basis.

[ChangeLog][QtNetwork][QNetworkRequestFactory] Added a new convenience
class to help with the needs of repeating network request details
imposed by the server-side service endpoints, which is common
with RESTful applications.

Task-number: QTBUG-113814
Change-Id: Iabcfaed786949ffbb0ad0c75297d0db6ecc1a3cc
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Mate Barany <mate.barany@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-08 15:53:32 +02:00
Juha Vuolle 925ce9e908 Add QHttpHeaders class
New QHttpHeaders class for use in place of
std::pair<QBA,QBA>, QMap<QBA>, and QMultiMap/Hash<QBA,QBA>
to represent HTTP headers.

[ChangeLog][QtNetwork][QHttpHeaders] New QHttpHeaders class

Task-number: QTBUG-107042
Change-Id: I54766886a491acfc9a813a3414322a75011acb9d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2023-12-08 15:53:32 +02:00
Thiago Macieira 9323351695 Re-do the namespace fix for the linker scripts
This amends and corrects b63045477e. The
fix there was incorrect for two reasons:
1) it missed one symbol in QtCore (the QFutureInterfaceBase one
   added in 0f0371c830.
2) it only worked for namespaces that were 15 characters long

Instead, just use a wildcard where the namespace should be for Qt
symbols (note: an extra wildcard appears for plain types because they go
from <N><type> to N<N><namespace><N><type>E).

Pick-to: 6.6
Change-Id: Iae41eb8991e349ceb836fffd179d6e709d6632f8
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
2023-12-07 14:55:06 -08:00
Timur Pocheptsov 66a5f9fdd4 QSslConfiguration: remove example
It uses the ciphersuite name which smart tools one day will mark as
weak (i.e. https://ciphersuite.info/cs/TLS_DHE_DSS_WITH_AES_256_CBC_SHA/
in our example), names in the example are not in the standard notation,
+ it is and always was OpenSSL-specific example.

Pick-to: 6.6 6.5 6.2
Fixes: QTBUG-119464
Change-Id: Ic6f095ff2c861582de756bf220e2e74106b88e83
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-12-05 18:43:58 +01:00
Marc Mutz f96a17225f Rename EINTR_LOOP -> QT_EINTR_LOOP
This non-namespaced macro was defined in a header, and while that
header is private, we shouldn't define non-namespaced macros in our
headers.

The macro also clashed with one of the same name defined in forkfd.c,
which broke unity-builds including the forkfd_qt.cpp TU. This rename
fixes that, too, so we can now remove forkfd_qt.cpp from
NO_UNITY_BUILD_SOURCES.

Pick-to: 6.6 6.5
Change-Id: Ic4bb4e4d7a632ca87905e48913db788a7c202314
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-11-30 22:52:11 +01:00
Rami Potinkara 7b84cd62b0 Android: bump Android target API level to 34
Bumped on network related .gradle files too.

Fixes: QTBUG-119145
Change-Id: I95f70e6cda1aad7a6bd7246c623eb6f143a829cb
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2023-11-30 08:57:55 +02:00
Piotr Wierciński f2f2b6ef18 wasm: Proxy emscripten_fetch() to the main thread
Calling emscripten_fetch() on worker thread which never yields control
back to the browser, will leave the fetch request pending forever.
This can be a problematic for example in QML Loader, which tries
to load resource by network.
Proxy this function call to the main thread, so it can be processed by
the browser.

Fixes: QTBUG-118225
Pick-to: 6.6 6.5
Change-Id: I969d73f6a66670c4135960e08d2eedc8d2a6e5c3
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2023-11-22 20:15:38 +00:00
Mårten Nordheim fe1b668861 http2: Fix authentication code and race
By attempting to get credentials and potentially emitting error
during header parsing we may not have gotten the DATA frames yet
which would leave us emitting error() and finished() without any
body.

Pick-to: 6.6 6.5 6.2
Change-Id: Ibc5fb78193af80ddabaca2c9e4149bbcac9789a1
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-11-15 12:18:14 +01:00
Michal Klocek b63045477e Fix android build
Fix qt namespace issues:

* qjniarray.h:339:30: error: no template named 'Traits';
* ld.lld: error: version script assignment of 'Qt_6' to symbol '_ZNTestQTNamespace114QReadWriteLock16destroyRecursiveEP21QReadWriteLockPrivate' failed: symbol not defined
* same for _ZN16QNetworkDatagram7destroyEP23QNetworkDatagramPrivate
* qtimezoneprivate_android.cpp:14:21: error: unknown type name 'TimeZone'
* qandroidplatformclipboard.h:13:1: error: no template named 'Object'

Change-Id: Ia5fc3990af4a4d762e194c7951727f8d5b10670e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-11-14 15:54:38 +01:00
Mårten Nordheim 127e6cc907 QNonContiguousByteDeviceThreadForwardImpl: reset m_atEnd during reset()
Because otherwise the atEnd() function will return true if we finished
an upload, and then we reset due to an error and try to upload again.
In a future patch we rely on atEnd() returning true only if the data
has actually been consumed, so re-uploads will not work correctly.

Pick-to: 6.6 6.5
Change-Id: Id914648f2509dd112b6bfc71231caa59cbe8ae68
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-11-06 18:23:19 +01:00
Mårten Nordheim 747dd2460b Http: simplify check for preconnect request
Change-Id: I132533b9bc1f2b4d66f94599efb04def571cd2ff
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-11-06 18:23:19 +01:00
Anton Kudryavtsev 90e1e1ee86 qhttpnetworkreply: remove unused findChallenge method
This method is part of private API, so it's safe.

Change-Id: Idc7464a825841db2fa9dddd47d6dbda82668601d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-03 14:44:54 +03:00
Anton Kudryavtsev 3c80e88924 qnetworkcookie: remove parseCookies
that takes QBA in favor of QBAV version

Change-Id: I56bbe5cc5c7fa3e31e6b6e71d97211de3eb1ab26
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-02 00:19:07 +03:00
Anton Kudryavtsev ebbd9ddf88 qhttpnetworkreply: use QBAV more
to reduce allocations

Change-Id: I89879a68626631970d34bbc0357528dcbb8b1c17
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-01 23:05:39 +03:00
Anton Kudryavtsev d3ec9fd359 qhttpnetworkreply_p: port parseStatus and parseHeader to QBAV
Change-Id: Ib3bb2d29460827f9dfceb51975ce822d8a41aba0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-01 23:05:39 +03:00
Anton Kudryavtsev 8f6b30ec8d QNetworkReplyHttpImplPrivate: de-duplicate literals
While touching code, use CaseInsensitive compare more to avoid needless tmp allocation

Change-Id: I4fe8496133925887df6879b48c730c36f486fa9c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-01 20:05:38 +00:00
Anton Kudryavtsev 0bd9265867 network: use CIS compare more
to reduce allocations

Change-Id: I648518fd152a834bbdc6afcedb693f02c1b13af1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-01 23:05:38 +03:00
Anton Kudryavtsev 457309c9fa QHttp2ProtocolHandler: optimize updateStream
Use QBAV more to reduce allocations

Change-Id: I009144156fafa64dd241c446bd4081fe197aa2bf
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-11-01 22:28:24 +03:00
Kai Köhne 675f380c4d Doc: Fix name of example to highlight
Since commit  d3526c16, the example is just named 'Secure Socket Client'.

Change-Id: Iba15a04aa8c6ab3cd7e933903154575c15a5a81b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2023-10-31 19:35:59 +02:00
Mårten Nordheim ce4531a490 QNetworkInfo: if no builtin defaults are found, load anything
As a fallback before picking the dummy backend.

[ChangeLog][QtNetwork][QNetworkInformation]
QNetworkInformation::defaultBackend() will now load any available
backend with Reachability support if the default ones are not available.
If none are available it will create a backend that always returns the
default values for each property.

Change-Id: I40889eeb51929e81f77ec2d84999932b095baf0b
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-10-31 11:37:38 +02:00
Anton Kudryavtsev 11a68f13e9 qnetworkcookiejar: optimize validateCookie
Use string view more to reduce allocations

Change-Id: Ib73fb9607438c7da115406f61653641163370122
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:33:15 +03:00
Anton Kudryavtsev 0774a9c556 qnetworkcookiejar::deleteCookie: port raw loop to algorithm
Use std::find_if with const iterators to avoid unconditional detach

Change-Id: Ibc9d05586a1926fefba5c6fd73c5b15ee815cd6d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:32:44 +03:00
Anton Kudryavtsev 08fff11232 qnetworkcookiejar: optimize cookiesForUrl
Check cheap conditions first.
Use string view types more
Don't insert in the middle of list, just append and then sort

Change-Id: I1ad7c3459eab45b2289bfe044314eec7130d8153
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:32:28 +03:00
Anton Kudryavtsev 33fec53e55 QHttpNetworkConnection: use QSB more
to avoid needless tmp allocation

Change-Id: I582f86adbe274b67ddbc7255caea63a39137edcc
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:25:35 +03:00
Anton Kudryavtsev bf42be723f QHttpNetworkConnection: mark some methods as const
These get methods (sslContext and connectionType)
are part of private API, so it's safe

Change-Id: I6c2e14d5dbcbefc051d69985d1e9b490274ba7ef
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:25:34 +03:00
Anton Kudryavtsev 981804752a qnetworkcookiejar: port internal functions to QSV
Change-Id: I2f377ca63b2d376736fa8adff88c47616939dd23
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:25:34 +03:00
Anton Kudryavtsev 8db967a860 qhttpmultipart: use range-for more
to improve readability

Change-Id: I9b7cad485c354b58b1acee7cea159988bf37c9df
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-30 22:25:34 +03:00
Anton Kudryavtsev 56bb4ac484 qnetworkrequest, qnetworkreply: port some methods to QBAV
[ChangeLog][QtNetwork] Ported hasRawHeader and rawHeader of
QNetworkReply and QNetworkRequest to QByteArrayView.

Change-Id: Ife71ba11b1ee8907c104dba3210d7a033568edf4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-10-30 21:28:57 +03:00
André Klitzing fd9c567156 Use SSL_CTX_set_dh_auto if DHparam is empty
[ChangeLog][QtNetwork][QSslDiffieHellmanParameters] An empty
Diffie-Hellmann parameter enables auto selection of openssl
backend.

Fixes: QTBUG-117666
Change-Id: Ic2e0529d48542752ca801bcb4d609988e5ddff25
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-25 17:23:13 +02:00
Ahmad Samir ceee7acf43 qcore_unix: port qt_safe_poll to QDeadlineTimer
Remove qt_poll_msecs() since the "forever" state can be simply expressed
with a QDeadlineTimer::Forever arg, instead of passing a nullptr
timespec, and the negative timeouts treated as "run forever" is also
encapsulated by QDealineTimer.

Use the QDealineTimer(qint64) constructor in the call sites where
the timeout could be negative, so that it creates a Forever timer (the
QDeadlineTimer(chrono::duration) constructor uses
setRemainingTime(duration) which handles negative timeouts by creating
expired timers).

Remove qt_gettime() (and do_gettime()).

Drive-by changes:
- Fix a narrowing conversion warning, qt_make_pollfd() takes an int
- Remove an unused include

Change-Id: I096319af5e191e28c3d39295fb1aafe9d69841e6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-10-24 18:29:45 +03:00
Mårten Nordheim ef76bd02a6 Remove Qt_6_PRIVATE_API ELF from a symbol used by ~QNetworkDatagram
As in 0f0371c830.

Pick-to: 6.6
Fixes: QTBUG-118229
Change-Id: Ie05c213ceb694413194826e4e119f3fb9ff1f1e8
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-10-21 02:18:37 +02:00
Mårten Nordheim 478df0ca80 Make QHttpNetworkConnectionPrivate::parseRedirectResponse static
We will use it without holding an instance later. And there's
no reason it is not static already.

Change-Id: I06d455bb2852244c8a4993ea75ceda4e1cb679fb
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-10-18 19:48:54 +02:00
Kai Köhne bef5d486d5 Doc: Highlight 5 network examples
Pick-to: 6.5 6.6
Task-number: QTBUG-117222
Change-Id: I5d18a1c86201404609cbc58fd127f001cdc32478
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2023-10-18 19:01:45 +02:00
Mate Barany 0345f07dd1 Support body for an HTTP GET request
Add two overloads to QNetworkAccessManager to support GET requests
with body.

Modify QNetworkReplyHttpImpl as well as these requests should not
be cached.

If the request is redirected it is possible that its type changes
from POST/PUT to GET and in this case the message body is deleted.
However, if a GET request has a body it should keep it after it has
been redirected - modify QNetworkReplyHttpImpl to keep the message
body after it has been redirected.

Fixes: QTBUG-112871
Change-Id: Ib01898638ed94238a98291870a5c51d56030868a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
2023-10-17 21:23:42 +02:00
Mårten Nordheim 14510bac9a Network: Use the new invokeMethod overload
Saves us from having to create a lambda functor object.

Change-Id: I5e790e693b57ae414ac6d6be84f18b76b3e8185c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-10-17 21:23:41 +02:00
Mårten Nordheim 13c4e11c49 http2: When a reply is removed from the queue, only remove one
We were using the .remove(Key) API on the map instead of
erase(iterator), so we were removing any reply of the same priority that
had not yet been popped from the queues.

Rewrote to drop loop and only work with iterators.
This issue was there since SPDY days, so not picking all the way back to
5.15, where HTTP2 anyway is not enabled by default.

As a drive-by, drop the #ifndef QT_NO_SSL, which was also there from
SPDY times, which was TLS-only.

Pick-to: 6.6 6.5 6.2
Fixes: QTBUG-116167
Change-Id: Id7e1eb311e009b86054c1fe3d049c760d711a18a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-10-16 19:28:26 +02:00
Mårten Nordheim 479c2add32 QNonContigByteDeviceThreadForwardImpl: NSDMI
Makes it clearer what members depend on arguments to the ctor. And
what the initial value of all the members are.

Change-Id: Ie1cd2361955053eaf4c4e6887d23ac245738288d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mate Barany <mate.barany@qt.io>
2023-10-13 11:58:51 +02:00
Mårten Nordheim 5c7c44cf83 Http: don't try to send request on a closed socket
We have code in the protocolHandlers that tries to handle this case, but
if we have an error before we create protocolHandler (read: proxy
complains about something) we will assert in debug, or
deref nullptr in release.

Pick-to: 6.6 6.5 6.2
Change-Id: I4bde9c8af0fa96dc11f77ca4d4b5cb84c31b54fa
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-10-13 06:23:21 +00:00
Marc Mutz 4a7c76d4a5 Include what you need: <QPointer>
All these TUs relied on transitive includes of qpointer.h, maybe to a
large extent via qevent.h, though, given that qevent.h is more or less
the only public QtBase header that includes qpointer.h, something else
seems to be at play here.

Said qevent.h actually needs QPointer in-name-only, so a forward
declaration would suffice. Prepare for qevent.h dropping the include.

The algorithm I used was:

If the TU mentions 'passiveGrabbers', the name of the QEvent function
that returns QPointers, and the TU doesn't have qpointer.h included
explicitly, include it. That may produce False Positives, but better
safe than sorry. Otherwise, in src/, add an include to all source and
header files which mention QPointer. Exception: if foo.h of a foo.cpp
already includes it, don't include again.

Task-number: QTBUG-117670
Change-Id: I3321cccdb41ce0ba6d8a709cea92427aba398254
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2023-10-12 21:38:54 +02:00
Topi Reinio dc33b0ca7a Doc: Fix warnings and linking issues
Remove or replace links to examples that were removed or moved under
manual tests.

Replace code snippets that were quoting the now-missing examples.

Fix documentation of QSet::removeIf().

Fix typo in documentation macro: Unknown command '\examplecateogry'.

Add qtopengl, qtshadertools dependencies to Qt Widgets documentation
project to enable correct linking to those topics.

Mark all documentation sets in qtbase as free of warnings.

Pick-to: 6.6 6.5
Change-Id: I058cd5f2063aa933ea310bceff906f05422a7cb2
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2023-10-09 17:24:07 +00:00
Kai Köhne 1b5402d229 Doc: Fix link to renamed setIncludesSubDomains() method
Fix capitalization of setIncludesSubDomains(). While a it,
make the links explicit, so that qdoc generates warnings if they fail.

Pick-to: 6.5 6.6
Change-Id: I74542c288083ec58f866a616da32bd40fcb3f40a
Reviewed-by: Andreas Eliasson <andreas.eliasson@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-10-09 12:32:59 +02:00
Ahmad Samir b358672556 QLocalSocket: port to QDeadlineTimer
Easier logic for such use-cases.

Change-Id: I4ce14bbaeda5441294f33993195396d9f47710dc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-10-07 21:07:06 +03:00
Ahmad Samir 6ecf43120f QHttpSocketEngine: de-duplicate some code
Change-Id: I4699e3ea0d4687a9772f6f90e6033f5582c1a346
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-10-07 21:07:06 +03:00
Ahmad Samir 032ffb70a8 QAbstractSocketEngine: port to QDeadlineTimer
qnativesocketengine_win.cpp: don't check if timeout is < 0, because
remainingTimeAsDuration() doesn't return negative values.

All the changes done in one go, not function by function, as that causes
the least churn. You can think of them as a couple of very similar
changes repeated various times.

Drive-by change: replace `forever {` with `for (;;)`

Task-number: QTBUG-113518
Change-Id: Ie9f20031bf0d4ff19e5b2da5034822ba61f9cbc3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-07 02:28:12 +03:00
Mårten Nordheim 51c812af07 QHttpThreadDelegate: use new(std::nothrow) instead of try..catch
We usually compile without exceptions, so the try..catch is a noop.
So, if the `new` fails we would crash (or get UB) anyway. Instead
of that, use the nothrow version of `new` and check the result.

Pick-to: 6.6 6.5
Change-Id: I1902b717c70afcc44c1f3237370aae346262452a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-10-07 00:10:32 +02:00
Mårten Nordheim 23996976cf http: fix leakage of network cache qiodevice
The QIODevice is owned by the caller of data(), so we should have
freed it.

Amends a6776de0c7

Fixes: QTBUG-117787
Pick-to: 6.6 6.5 6.2
Change-Id: Ic5575649038480f52cc13ee229980ee1c7cee728
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Mate Barany <mate.barany@qt.io>
2023-10-06 19:40:23 +02:00
Øystein Heskestad c73ee7353a Fix not emitting proxyAuthenticationRequired signal for NTLM
During NTLM http proxy authentication QHttpSocketEngine did
not emit the proxyAuthenticationRequired signal during
handling of HTTP 407 responses. As a consequence, the proxy
server was spammed with connection requests that never
worked.

Fixes: QTBUG-109718
Pick-to: 6.6 6.5
Change-Id: Icf0ccf58e3f2690d210652713155a303026ed3b1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-10-02 07:13:45 +00:00
Kai Köhne 54b5ffb602 Doc: Don't mention setDefaultCiphers() (removed in Qt 6.0)
Pick-to: 6.5 6.6
Change-Id: I775da7679bf4ff398a22334103c3116befec7da9
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-28 19:29:31 +02:00
Łukasz Matysiak af3e139941 Remove obsolete code related to ioctl on vxworks
Previous implementation of qt_safe_ioctl mentioned that vxworks defines
ioctl in a non-standard way.
As of VxWorks 23.03 ioctl is now properly defined so the comment and
check in the code are obsolete.

Task-number: QTBUG-115777
Change-Id: I0fdf614e45063b031e2c998339d6987ba69167ca
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-27 23:56:27 +02:00
Thiago Macieira e95467bc6b QNativeSocketEngine: fix build with FreeBSD: sockaddr_dl wasn't declared
This partially reverts fcb548878b.

qnativesocketengine_unix.cpp:872:40: error: unknown type name
'sockaddr_dl'; did you mean 'sockaddr_in'?

Pick-to: 6.6
Change-Id: Ifeb6206a9fa04424964bfffd178844096ee7741b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-26 20:40:15 +00:00
Mårten Nordheim 5863568c53 QNetworkInfo: Simplify flags check
Change-Id: I5e369b9cd2b3abc6c0ac1e632e495b05c506980b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-26 18:08:19 +02:00
Anton Kudryavtsev bbace99e94 QHttp2ProtocolHandler: reduce allocations
Don't use QMap for parsing. Indroduce local enum and use it with std::array

Change-Id: I60fed6991ac415e4ff3827ae621f2c9b5071dcbe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-25 20:06:39 +03:00
Anton Kudryavtsev 7cccbae61f qnetworkreplyhttpimpl: use QBAV more
Change-Id: Ieee68c06962da7c12af2b4145495b3d5ba5a02fb
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-25 14:17:56 +00:00
Anton Kudryavtsev 0b512d7f41 QHttp2ProtocolHandler: extract method
for making url to improve readability

Change-Id: I743f183b64f2ed9c9363ea4fd2bdb8588fd84547
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-25 17:17:56 +03:00
Assam Boudjelthia b74f180ac0 Android: bump Android target API level to 33
To follow latest Play Store requirement.

Pick-to: 6.6.0 6.6 6.5
Fixes: QTBUG-112637
Change-Id: I1ef4f8b639f4b0cc759a2363b7b9b9864b159509
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2023-09-23 17:38:23 +00:00
Tatiana Borisova b856790d67 Add Q_ENUM macros for registering QSsl/QSslSocket in Meta-system
- Macros provide possibility to use enums in QML via QtNetwork QML module

Task-number: QTBUG-115056
Change-Id: I1ed96a7eb4b12681d16137528307fec6db5b016c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2023-09-21 19:28:43 +02:00
Volker Hilsheimer 7f4cdb9941 JNI: replace TYPE declarations with CLASS declarations
That we have two macros to declare a C++ type to represent a Java class
is confusing. The TYPE macro as of now allows us to declare array types,
but with QJniArray we won't need that anymore, and can just use Class[]
as the type instead. Changing that will be a follow-up commit; for now,
get rid of TYPE-usages to declare regular classes.

Change-Id: Iea0a9548772ca701148442412cf6ad567583213f
Reviewed-by: Zoltan Gera <zoltan.gera@qt.io>
Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2023-09-20 00:05:39 +02:00
Vladimir Belyavsky 6b4cc9bf73 QNetworkConnectionEvents: fix potential nullptr access
Fix potential nullptr access in
QNetworkConnectionEvents::getNetworkConnectionFromAdapterGuid().
This can happen if for some reason the NetworkListManager instance
failed to be instantiated in QNetworkConnectionEvents constructor.

Fixes: QTBUG-117097
Pick-to: 6.6 6.5
Change-Id: If51ea383e22461a6c3124576c4e1be3f30dde1f6
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-18 12:21:44 +00:00
Anton Kudryavtsev ae6a3fd26c Tidy up QNetworkDiskCache::prepare
use std::nothrow more

Change-Id: I7c681089777e86a31db2fba831362771e6607496
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-09-12 02:00:03 +03:00
Thiago Macieira 62b53011d3 QNetworkInterface: replace CMake check for ifr_index with SFINAE
Detecting if a member exists is very easy and saves us from running the
test at CMake time. Saves about 350 ms.

Change-Id: I2b24e1d3cad44897906efffd178007fdcdd18e37
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-09 11:55:41 -07:00
Anton Kudryavtsev de6d322174 qsocks5socketengine: avoid impicit detach
by const method usage

Change-Id: I0ff04508917a728acec282920df02c667a29e597
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-09 17:14:46 +03:00
Giuseppe D'Angelo 5e2f22f8a1 QHostInfo::lookupHost: do not violate lookupHostImpl preconditions
lookupHostImpl requires either `receiver` or `slotObj` to be non-null.
Since this code path deals with the string-based slots, `slotObj` is
going to be null, therefore check that `receiver` is non-null.
For completeness: also check that `member` is non-null.

Emit a warning (à la QObject::connect) in case the user did something
wrong.

Change-Id: Ic6dcd51d7ddd977b121484369b1aef48844364c5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-08 13:30:36 +02:00
Anton Kudryavtsev b9c10312f9 qsslcertificate: use _ba literal more
to reduce allocations

Change-Id: I10a449887b79e40fb4e501634f64b9c86cc8f111
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-07 16:05:04 +03:00
Anton Kudryavtsev 576e7d49f5 qsslcertificate: use QStringView more
to avoid needless allocations

Change-Id: I54d159cbaa0854355286c942a6971e45c4494a14
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-07 16:05:04 +03:00
Anton Kudryavtsev f5f78400e1 qsslcertificate: use QAnyStringView more
to avoid needless allocations

Change-Id: I03494d7075e2f333cbd3974797d9ea97f2c915fd
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-07 16:05:04 +03:00
Anton Kudryavtsev cd0f4d2eef qsslcertificate: avoid implicit detach
by using const methods

Change-Id: I62bf869ed1fd4109c855caafa88b8f29a6e5cc05
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-07 16:05:04 +03:00
Anton Kudryavtsev 996a0c85e7 QHttpNetworkConnectionChannel: reduce allocations
- don't use QMap::values, just iterate over QMap directly
- use const methods to avoid implicit detatch

While touching code, use isEmpty() to check container instead of size() with 0

Change-Id: I300b5f123f339dc92a4f932bd0b356f31ead3589
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-07 13:05:03 +00:00
Giuseppe D'Angelo f18082bbed QHostInfo::abortLookup: ignore -1
The id -1 is the one of a default-constructed QHostInfo (invalid).
It's also returned by various codepaths to mean a lookup failure.
Attemping to abort its lookup should simply be ignored.

Change-Id: I0413dd248a890f57195e4f5b5baea011b6737102
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-07 03:26:37 +02:00
Anton Kudryavtsev f81e39695a network: use string view types more
Prefer QLatin1StringView overloads

Change-Id: I23846761f2c93021de4f6e6b7eba1d74045f89a1
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-09-06 19:36:05 +00:00
Vladimir Belyavsky 74fb2519e3 QNetworkReply: fix potential nullptr access in loadFromCacheIfAllowed()
Fix a potential nullptr access in
QNetworkReplyHttpImplPrivate::loadFromCacheIfAllowed() on accessing to
QAbstractNetworkCache::data(). It is not yet clear in what cases
cached data can be null, especially if metaData is present,
but we have user reports of such crashes.

Amends a6776de0c7

Fixes: QTBUG-116788
Pick-to: 6.2 6.5 6.6
Change-Id: I548065c6f809d9d45db6dd785c28acbdc77621e2
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-06 18:19:12 +00:00
Ahmad Samir ac9e968755 Remove redundant QPair includes
Nothing in those files uses QPair; and a local build finished fine without them.

Task-number: QTBUG-115841
Change-Id: I669cfecaa9129bce6b31e464826287f138b159db
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-06 17:24:40 +00:00
Mårten Nordheim 177ffb473b qnetworkproxy[libproxy]: Add missing include
Amends cda98280ed

Pick-to: 6.6
Fixes: QTBUG-116758
Change-Id: I337d946a054eb9c9e2f6ec9e8af40694b37afe12
Reviewed-by: André Klitzing <aklitzing@gmail.com>
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
2023-09-06 17:24:40 +00:00
Mate Barany 9334947d36 Add dummy backend to QNetworkInformation
The integration of QTBUG-113813 has failed because at the moment there
is no network information backend for QNX. Implement a simple dummy
backend to handle these cases.

Task-number: QTBUG-113813
Change-Id: Id6fa3e590c43b0125d82e8680733e30788d9894e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-06 13:23:15 +02:00
Giuseppe D'Angelo 5054279bee QHostInfoResult::postResultsReady: streamline the implementation
QHostInfo's lookup can notify a slot specified either via the
string-based SLOT or via PMF/function objects. In the first case,
an actual connection is established and a signal is emitted carrying the
result object.

In the PMF case, QHostInfo does not establish a connection and calls
the slot object "directly" (using some private QObject APIs).

The implementation was (and still somehow is) quite convoluted: the
index of the QHostInfoResult signal to be emitted was looked up, and
used to create a metacall event. However the metacall event was also
intercepted in an override of event(), and from there the slot was
called.

But we don't need to look the signal index up at all to do that, since
we are actually never emitting the signal! This can be done with a
custom event.

... but I'm not doing that as that's reinventing the wheel. Instead, I'm
using invokeMethod to call a private function of QHostInfoResult, and
from there we can invoke the slot object. This allows us to get rid of
the signal index lookup, remove the manual metacall event handling, and
the copy() kludge for SlotObjUniquePtr.

Change-Id: I2193acdad57788efd5250bd29f7a1c7505eed2f1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-06 13:23:15 +02:00
Giuseppe D'Angelo 797edbc58c QHostInfoResult: use the same semantics as the contextless connect()
The 3-arg QObject::connect() overload (the "contextless" one) simply
forwards to the 4-arg overload, using the sender object as both
the sender and the receiver/context.

QHostInfo does not use connect() directly in order to emit notifications
that a lookup is finished. Instead, it uses some of QObject private
plumbing. When handling a lookup request that specifies a function
to call when done, but no context object, QHostInfo passes nullptr
as context/receiver.

Change QHostInfoResult's behavior to always have a "receiver": in case
the caller didn't specify one, use `this` (= the sender).
As a drive-by, this allows to streamline some code.

Change-Id: Ic2e63ac18ba36269036950b6f6b7fecea51d0c99
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-06 13:23:15 +02:00
Giuseppe D'Angelo dd50d58af2 QHostInfo: add a Qt 7 note
Change-Id: I45ee4eba1f7ded358acaccf678e4e12a006b91b6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-06 01:50:16 +02:00
Anton Kudryavtsev 4bd3567484 QDecompressHelper: uncache acceptedEncoding
The only user already has its own cache of transformed copy of acceptedEncoding list since 43d15dd572

Change-Id: I485b41555f327c6ff39dd48347240a725f00e09b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-05 18:58:47 +00:00
Anton Kudryavtsev 76e56eb164 QNetworkAccessCacheBackend: reduce allocations
Use CaseInsensitive compare more.

Change-Id: I2f6d19fd63ac2e06c5b0dcb285a578f9ed61c6ab
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-05 21:58:47 +03:00
Giuseppe D'Angelo 552dc1ecfe QHostInfo::lookupHostImpl: code tidies
Since a non-null `member` implies a non-null `receiver`, streamline
the redundant check(s). While at it, introduce a simple boolean that
conveys the meaning of what we're checking for.

Change-Id: Ib9be162075771de74b1a6bc4426008b7c194df3a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-05 16:34:20 +02:00
Giuseppe D'Angelo c63de2cda3 QHostInfo::lookupHostImpl: add another precondition check
If `member` is set it means that the caller wants us to connect
to a slot using string-based connections. That means `receiver`
must be non-null as well. Check for it.

Change-Id: I6b3542855147e95fecbf4c645b556c2047a1ed69
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-05 16:34:13 +02:00
Giuseppe D'Angelo 4367abb75a QHostInfo::lookupHost: enable QT_NO_CONTEXTLESS_CONNECT
QHostInfo::lookupHost uses some QObject private APIs in order to have a
invoke a slot/function when the lookup is finished. The overload that
simply takes a function (and not a context object) was still available
even under QT_NO_CONTEXTLESS_CONNECT, because indeed the implementation
bypasses the public QObject::connect API. Hence, explicitly the overload
that doesn't take a context object.

Change-Id: Ibf5b0efc49b7f9c8d045862ae061f4e05ee1b769
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-09-05 15:00:38 +02:00
Anton Kudryavtsev 470fab51fb Tidy up QAuthenticatorPrivate::calculateResponse
call toBase64() with temp value

Change-Id: Idedfd91f60900ec51923803a6bb9ed6631e64d94
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2023-09-04 18:16:28 +03:00
Anton Kudryavtsev b4f6399a51 qauthenticator: use QBAV more
Change-Id: Iaa208785f6e1dc8eb5f32ab5e099c8df277bb2f1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:16:11 +03:00
Anton Kudryavtsev 50fa7996d0 qhttpnetworkconnection: extract method makeAcceptLanguage
and micro optimize it:
- avoid allocation in case of C locale
- don't call replace in case of C locale

Change-Id: I9afefd53b673e5f1236afdb3130d77779614acc7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:16:08 +03:00
Anton Kudryavtsev 43d15dd572 qhttpnetworkconnection: cache acceptedEncoding header
Encodings are configured at compile time, so no need to re-create acceptedEncoding header for every request, just cache it.

Change-Id: Ibfaf7cdec0504cf90c4b6a59848e7c945d060ebe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:16:06 +03:00
Anton Kudryavtsev 5f032cdeff QDecompressHelper: port some methods to QBAV
Change-Id: I907019f19cbf4f6086fd6480ea9e01f5ab63b004
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:16:03 +03:00
Anton Kudryavtsev d9620f0660 qnetworkcookie: reduce allocations
Use CaseInsensitive compare more.
While touching code, replcace QBA literal with QBAV

Change-Id: Iecd2740c995f1e24b4285440b9440e4745f93208
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:16:00 +03:00
Anton Kudryavtsev 4ee081c2f7 qauthenticator: reduce allocations in parseHttpResponse
by QBAV usage. While touching code, port index based loop to range based

Change-Id: I06a784b94678b901d1074cca224c926e8534bd8e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-04 18:15:48 +03:00
Anton Kudryavtsev 3e62ecbc25 qnetworkreplyhttpimpl: optimize fetchCacheMetaData
Reduce allocations by usage of case insensitive compare method

While touching code, reorder condition to use cheap int compare first

Change-Id: I01a5d18ae69658a9cd1c27b40a9cdf369231b5fe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-02 15:35:59 +03:00
André Klitzing cda98280ed Fix living QLibProxyWrapper after shutdown of QCoreApplication
Pick-to: 6.6
Task-number: QTBUG-84234
Change-Id: I8f5e2947b6529a0a8871d040050205934ee60354
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-01 22:05:29 +02:00
Anton Kudryavtsev 0e5f60a6ca qhttpheaderparser: use algorithms more
No raw loops. Also de-duplicate functors by lambda generator

Change-Id: I053890a0a472bfe2846d7007fda8cca779d812a8
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-01 16:06:27 +00:00
Anton Kudryavtsev cf066f7d03 QHostInfo::localDomainName: use QBAV more
to reduce allocations

Change-Id: If75c3818333880ba34f2e58038b05869979ae14d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-09-01 17:47:28 +03:00
Anton Kudryavtsev 8c5e5af11f qnetworkreplyhttpimpl: use const more
to avoid implicit detach

Change-Id: Ifac91e514b069d0426c70bd7e11cc04baca7994b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 21:38:49 +03:00
Anton Kudryavtsev ec6267499e qnetworkreplyhttpimpl: port parseHttpOptionHeader to QBAV
Change-Id: Ib6ac31048b9e2063350e8b956791baeb3d5fbfae
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 21:38:45 +03:00
Anton Kudryavtsev e28292b3d7 qnetworkreplyhttpimpl: use _ba literal more
to reduce allocations

Change-Id: I742a0ad34bfda8e7def0a7b075a331ab08d18c9a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 21:38:26 +03:00
Anton Kudryavtsev 51acd52cf7 qnetworkreplyhttpimpl: use range based for more
to improve readability. While touching code, remove needless copy of container

Change-Id: I04e44819621b5ea9a71f89352e8dd25d4c41de3d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 21:38:21 +03:00
Anton Kudryavtsev 22cce68b2c qhttpnetworkrequest: use range based for more
to improve readability

Change-Id: Iaffb3ab8e4a188ee7cba3d9afc527cf3038a8040
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 11:48:09 +00:00
Anton Kudryavtsev 60133c364a qnetworkrequest: use _ba literal more
to avoid allocations

Change-Id: I747d212e5752bcb42977d6714d241918363d47db
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 14:48:05 +03:00
Anton Kudryavtsev e84d9ea5e6 qnetworkrequest: extract method
De-duplicate code for cookie header making

Change-Id: I3ac59445089ee151a2f719454fa50cb9f37f72e4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-31 14:48:03 +03:00
Thiago Macieira fcb548878b CMake/Network: limit the testing for some network iface features
These features are now only used for qnetworkinterface_unix.cpp, so they
aren't needed for Windows or for Linux with AF_NETLINK support. This
commit removes the last couple of placess outside of that file where
they were used (the qnativesocketengine_unix.cpp code looked stale
anyway).

These tests cost us approximately 1300 ms during CMake time. This commit
does not change that because the tests are checked even if the condition
has already been forced OFF by previous conditions.

[ChangeLog][Build system] The QT_NO_GETIFADDRS and QT_NO_IPV6IFNAME
macros are deprecated. On a standard Linux build, they will be defined
to 1, even if the system does support getifaddrs() and ifnametoindex().

Task-number: QTBUG-107248
Task-number: QTBUG-115705
Change-Id: Ifbf974a4d10745b099b1fffd17775822a1a6e55f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-30 23:26:25 -07:00
Anton Kudryavtsev a6886859ad hpack: use QBAV more
While touching code, use constexpr more

Change-Id: I1c5d80f257f742a2999147c12340bba38e8b1e2f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-08-29 18:15:05 +00:00
Anton Kudryavtsev 6cc1a84005 qnetworkrequest: reduce branches in loop
Unconditionally append separator and then chop last one

Change-Id: I33d004df07ce0c3c0076dc374ae7a2f8c413aeba
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-28 19:11:15 +03:00
Anton Kudryavtsev 3730212312 qnetworkrequest: port parseMatchImpl to QBAV
to save allocations, and use tokenize to avoid temp container

Change-Id: I2a43612b9d15538a93d4afd2c544714507141f0f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-08-28 14:49:36 +03:00