Commit Graph

729 Commits

Author SHA1 Message Date
Alexey Edelev ebc6793fb5 Add the missing lookup for QuickTest component
Component is used in Grpc/Protobuf Qml tests.

Pick-to: 6.7 6.6
Change-Id: I7bee61771c2a7cf230673ac9f7f91a7c7fafe51e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Dennis Oberst <dennis.oberst@qt.io>
2024-03-11 18:00:41 +01:00
Alexey Edelev 72d78730e0 Avoid copying lists and maps when deserializing
Access the data stored in previous value directly to avoid redundtant
copies of the QList and QHash values, when deserializing protobuf
repeated and map fields respectively.

Assert if the previous value doesn't contain the expected QList or
QHash metatype.

Change-Id: I8c513e83419b20d70e781745d92fa93b83b9690a
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-03-11 11:55:16 +01:00
Samuli Piippo 1c985e5bfe CMake: install vehiclelib example library
Amend 84f941cec0 and install vehiclelib
as well.

Change-Id: Ia301101601a0e7f52f94c3fde2ae329080e0c6ae
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-11 10:59:55 +02:00
Qt Submodule Update Bot 02072a16c6 Update dependencies on 'dev' in qt/qtgrpc
Change-Id: I28dbcfda1a7ac6911c1d56b6aa19267dad94086d
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-03-10 16:52:01 +00:00
Alexey Edelev fea7b514a3 Move the list iterating logic when deserializing message using QProtobufJsonSerializer
Move the list iterating logic to the deserializeValue method. We
may detect the list type at the point when deserializing the
JSON-encoded repeated field. So it doesn't make sense to hold
this logic in list item deserializer, we may simply iterate over
list value there.

Pick-to: 6.7
Change-Id: I413993aed14971c8a1bc2c7bfd04aed6ad1cacda
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-03-08 14:16:32 +01:00
Alexey Edelev 6ba67dc89e Remove message registration in serialization handler map
QProtobufMessage::propertyOrdering now provides information
about the message property ordering. This allow us to use
the pointers to QProtobufMessage but not to the exact class
when (de)serializing messages.

This commit makes all private getter of message fields mutable.
If the message field is not initialized it will be initialized
at first access, like it's done in public getters.

This mechanism allows to hold the field allocation inside message
but not in the type deserializer. All serializers no should expect
that the message pointer that is passed to the deserialization
is valid message pointer.

To avoid unwanted message field allocation when using property
getter, QProtobufMessage::property method now accepts an extra argument.

If allowInitializeOptional is set to true, it skips checking the
'has<MessageField>' property before accessing the message field it self.

Protobuf messages that are used in oneof fields now require explicit
definition of operator=, since it's used when copying the data in
QVariant. Otherwise the warning related to the implicit definition of
operator= is produced.

Task-number: QTBUG-120931
Change-Id: I1b816295297e7ef8cd6d3f0abdcbe1e670597fd0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-03-08 14:16:29 +01:00
Alexey Edelev 0e95509104 Remove the redundant property ordering forwarding from all interfaces
QProtobufMessage::propertyOrdering now allows accessing the message
property ordering. So we can remove extra arguments from all interfaces
where the pointer or the reference to the related QProtobufMessage
is used as argument too.

[ChangeLog][Protobuf][QAbstractProtobufSerializer] The following
interfaces do not accept the QProtobufPropertyOrdering as an argument
anymore:
 - serializeObject
 - deserializeObject
 - serializeListObject
 - deserializeListObject
 - serializeMessage
 - deserializeMessage

Task-number: QTBUG-120931
Change-Id: I55cb8d3ceddd56751d542869e26aa0de73c22ebb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-03-08 14:16:22 +01:00
Alexandru Croitor 68b2e1db08 CMake: Make examples build as external projects
A couple of things are needed to ensure examples can be built as
external projects.

Change FindWrapgRPCPlugin to look for a cache var in addition to _ROOT
env var, because we can't easily pass env vars to external projects.

Ensure one of the non-Qt test libraries is built with at least C++17
to avoid compilation errors.

Derive a path to absl_ROOT from gRPC_ROOT assuming they are in the
same parent directory.

Use the new QT_EXAMPLE_CMAKE_VARS_TO_PASS variable introduced in
qtbase to allow passing additional cmake variables to all examples
that are built as external projects.
We need to use it for all 3rd party dependencies that have to be
found by the examples.

Make sure to look for GrpcTools package for magic8ball example, to
ensure the public api is available when cross-compiling, but there
is no target native grpc library available.

Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: I4420b7348c6a3b02b5516f34a96b19cceaccc649
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-06 17:14:45 +01:00
Giuseppe D'Angelo 5c2c831703 Port to QByteArray::max_size()
Remove the usage of the private MaxByteArraySize constant.

Change-Id: I334aaba0a93dadc9f88cf5355830e7b1880faaea
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-04 12:30:11 +01:00
Alexandru Croitor 93a3c6b5ae CMake: Don't build benchmark if qtprotobufgen is missing
Amends ed50bef7d1

Change-Id: I74e82a0b686aa5efb737202305801a49f5b811e4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-03-04 10:47:00 +01:00
Tatiana Borisova 84f941cec0 Multi-thread clients usage example
Since the Qt gRPC module does not ensure thread safety at the channel
level, we can include an example demonstrating multiple
QAbstractGrpcClients can communicate asynchronously.

Task-number: QTBUG-117370
Change-Id: I829a9000b405b2d2832cba496b21ec0082273ee2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-04 08:47:44 +01:00
Qt Submodule Update Bot 705e70b1a8 Update dependencies on 'dev' in qt/qtgrpc
Change-Id: Icef32f32910568dff9cba5152a3dc8e865c6d344
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-03-03 17:20:07 +00:00
Alexey Edelev ff26683d16 Workaround an issue related to the undefined std::size() method
Pick-to: 6.7
Task-number: QTBUG-122952
Change-Id: I261d0c7c07431b1a8bd9253a1ff0919a1ee407ba
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
2024-03-03 18:20:04 +01:00
Alexey Edelev 361902a3b5 Make the QHttp2Stream pointers raw pointers in QGrpcHttp2Channel
Store the QHttp2Stream pointers as the QPointer in QGrpcHttp2Channel.
The memory of the streams is managed by the QHttp2Connection
implicitly, so we should make sure that we do not attempt to remove
the stream that was removed by QHttp2Connection.

We cannot use raw pointers here because we pass Http2Handler to lambdas
and assume that Http2Handler lifetime is binded to the QHttp2Stream
lifetime.

Also ensure that we clear all Http2Handler before deleting the
QHttp2Connection instance.

The previous implementation led to double-free issue since,
QHttp2Connection was deleting all QHttp2Stream s that belong to it
first, and then there was semi-explicit removal invoked by
std::unique_ptr.

Pick-to: 6.7
Fixes: QTBUG-122908
Change-Id: I659eb9fc3f33dccc3ce70ba05db61f58973ce7c7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-03-01 20:18:22 +01:00
Mårten Nordheim ed50bef7d1 Protobuf: Add basic deserialize benchmark
Change-Id: I382269cd59c4f96f3f8e1956b8a1a97836e5b057
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-03-01 11:36:32 +00:00
Tatiana Borisova 5f11f7fee6 Add the missing QGrpcCall/ChannelOptions properties to QML
- added format serialization property

Task-number: QTBUG-120940
Change-Id: Ibf6486c9702c39c57f985ebbd22deb027463b5d1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2024-02-29 15:47:22 +01:00
Alexey Edelev 56f7edbe26 Extract wrapping namespace from package but not from messages/enums/services
Use the package defined in a .proto file when generating the wrapping
namespace statements. This fixes the crash when .proto file contain no
message definitions.

Pick-to: 6.5 6.6 6.7
Fixes: QTBUG-122816
Change-Id: I0eb474217eb0126dee5919bbd7b12a20f8078124
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2024-02-29 12:19:27 +01:00
Qt Submodule Update Bot 250eb5c2e3 Update dependencies on 'dev' in qt/qtgrpc
Change-Id: I792b769879faa12613bd95d808775872ac0a9cf2
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-02-27 16:11:29 +00:00
Mårten Nordheim 247304ed6e QProtobufMessage: add a proper copy-ctor to the private
To set the ref field to 1 in the copy.

Amends 573f0a5ba6

Pick-to: 6.7
Change-Id: I1e797c2077ae61b6d5fcfb968cd286c0763b5268
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-02-26 20:58:21 +01:00
Mårten Nordheim e532fdaa7c Fix cmake config failure when grpc is missing
Because we back out and do not create the testserver target when we
don't find the grpc dependency we fail during the genex further down.

Pick-to: 6.7
Change-Id: Ia0415dc7ae09933503dabd2882b4643f087943ff
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-02-26 18:21:01 +01:00
Alexey Edelev b1448525e3 Split documentation for repeatedValueCompare list and map variants
It doesn't seem the previous version worked. Split documentation into
two.

Pick-to: 6.5 6.6 6.7
Change-Id: If800e2e4e444cb8210f63574dc950e8d84347960
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-26 13:37:52 +01:00
Alexey Edelev 88ece74d1e Prettify qt_add_protobuf examples
Use the extended QML/Installation example in command documentation
only. Add the \section2 title to the general example. Update the
supplying sentences in places where the examples are included.

Pick-to: 6.6 6.7
Change-Id: I32d1911d280cb9ce9c21e8b8451c57534737e13b
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2024-02-26 13:37:49 +01:00
Alexey Edelev cdcd270bf9 Add the missing copyrigh/sdpx headers to docinc files
Wrap the docinc bodies with snippet begin/end markers and include them
accordingly.

Pick-to: 6.5 6.6 6.7
Change-Id: I711c14c342d0553ac64712c61d1001137659f72b
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2024-02-26 13:37:45 +01:00
Alexey Edelev 189dedfaa4 Document standalone Qt Protobuf library installation
Add short overview on how to install the standalone Qt Protobuf
library. This documentation is an extended documentation for the
OUTPUT_HEADERS, and OUTPUT_TARGETS arguments of the qt_add_protobuf
function.

Pick-to: 6.7 6.6
Change-Id: I92272e839354ef498ebe823cbe68a0dd97a353b0
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2024-02-26 09:28:43 +01:00
Alexey Edelev 5dfafece5a Generate the explicit presence flag for protobuf message fields
Protobuf messages should have the explicit presence according to the
field presence specs. We should mark them with the respective field
flag to enable QProtobufMessage::property logic that verifies the
field presence according to the 'has<FieldName>' property value.

Add the ExplicitPresence field flag that now is generated for all
optional, message, and oneof fields.

[ChangeLog][Protobuf] All fields that have the message type now
generate the has<FieldName> property that indicates whether the field
is intialized or not.
[ChangeLog][Protobuf] All fields that have explcit presence now set
the 'ExplicitPresence' flag in their property ordering structures.

Task-number: QTBUG-120931
Change-Id: I962c38e1ebde04d393cafaa8b512a277d660b5fa
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-25 18:37:59 +01:00
Alexey Edelev 2cb4aafacd Add the missing serialization result check to the deserializeList handler
We should check whether the serialization was successful before
appending the value to the repeated field.

Fixes: QTBUG-121560
Pick-to: 6.7
Change-Id: I56583826ffc97e503348b0f8b86245f49b7f076e
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-24 01:24:00 +01:00
Qt Submodule Update Bot cffa433422 Update dependencies on 'dev' in qt/qtgrpc
Change-Id: Ibd3d11db428f433671cb447b03bb06efb116d004
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-02-23 22:18:46 +00:00
Alexey Edelev 2901ebad17 Set OUTPUT_HEADERS and OUTPUT_TARGETS in qt_add_protobuf explicitly
Forward the OUTPUT_HEADERS and OUTPUT_TARGETS arguments to the
PARENT_SCOPE in qt_add_protobuf methods otherwise the variables remain
empty when calling versionless function.

Pick-to: 6.5 6.6 6.7
Fixes: QTBUG-122700
Change-Id: Iefcf802e51e995bdd9ab4f79c475bdb52a3bab4f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2024-02-23 19:18:08 +01:00
Alexey Edelev 7311a5e5b5 Attempt to reconnect to server when calling any method
Attempt reconnecting to the server each time when calling any method.
Also clean the operations queue to avoid handling of the formally
'dead' operations when reconnection attemt was successful.

This fixes the general connection scenario that was missing. After the
first connection attempt channel never tried to connect again. This led
to regression introduced during the QGrpcHttp2Channel refactoring.
After making a call QGrpcReply stuck in noop state, since channel only
puts the assigned QGrpcChannelOperation to queue. This behaivor is
fixed by attempting to re-establish the connection to server if
QGrpcHttp2Channel is in the Error state. All the assigned
QGrpcChannelOperation will then either emit errorOccured signals if
connection is failed again or will complete the call if connection
is established.

Fixes: QTBUG-122677
Pick-to: 6.7
Change-Id: I92b8a1a707c5cb9e955d72100b19095564310a63
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-23 19:17:45 +01:00
Alexey Edelev 3d00db15c2 Remove the redundant colon from the \section2 title
Pick-to: 6.7 6.6
Change-Id: I46ca59b51066a96487b88f1666787e063cdc8a3f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-23 16:36:50 +01:00
Tatiana Borisova b90ef8f4eb Put link to the macro's detailed description at the beginning of page
Pick-to: 6.7
Change-Id: I64d646730f4a3d0c50f7679367e6dd3b543a865b
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2024-02-22 10:59:05 +01:00
Mårten Nordheim 573f0a5ba6 QProtobufMessage: make private ref-counted
Avoids unnecessary allocations/deallocations, especially noticeable
while detaching lists of protobuf messages.

Pick-to: 6.7
Change-Id: I51703075ec8ed1d956da87f5a2636f71b214a440
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-02-21 15:53:16 +00:00
Alexey Edelev 889a91c1b4 Introduce QGrpcSerializationFormat
The QGrpcSerializationFormat class allows using either predefined
QAbstractProtobufSerializers(Protobuf/Json) or user-defined
serializers.

The serialization format is the part of QGrpcChannelOptions.
gRPC channel implementations should rely on respective value provided
by QGrpcChannelOptions when choosing the serialization format for
protobuf messages.

QGrpcHttp2Channel got full support of QGrpcSerializationFormat. It's
still possible to set the serialization format using the
QGrpcChannelOptions metadata, but QGrpcSerializationFormat is
considered with higher priority.

[ChangeLog][GRPC][QGrpcChannelOptions] Added the
withSerializationFormat and serializationFormat methods. These methods
allow to set/get the QGrpcSerializationFormat that should be used by
gRPC channel.

[ChangeLog][GRPC] Added the QGrpcSerializationFormat class.
QGrpcSerializationFormat allows customizing the serialization format
that is used in QAbstractGrpcChannel implementations.

Task-number: QTBUG-113777
Change-Id: Id9c802d08fb325a5bd09e603bd0d505a85f1d80d
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-21 14:30:10 +01:00
Alexey Edelev 5b84714ac3 Rewrite the test server in golang
The server requires JSON serialization support for our testing purposes,
C++ API doesn't allow using JSON serialization in gRPC channels, but
the golang one allows. This introduces the different gRPC server
implementation that serve out needs. golang-base server only available
for the host Qt builds if QT_ALLOW_DOWNLOAD is enabled.

The reference C++ server is still used for cross-compiled Qt and
for the cases when go is not present in the system.

Task-number: QTBUG-113777
Change-Id: I9d821d56e5da629604e197707dbead2d5367f844
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-21 14:30:06 +01:00
Alexey Edelev 76c05ac9d5 Add JSON serialization support to QGrpcHttp2Channel
It's now possible to preselect the serialization format when creating
the channel using the 'Content-Type' metadata. Supported values for the
header:
 - application/grpc(default)
 - application/grpc+protobuf
 - application/grpc+json

Note: Not all servers and clients support JSON serialization format.

Task-number: QTBUG-113777
Change-Id: Ia25b3382e3addb2306acce112489ea3427687c0d
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2024-02-21 14:30:03 +01:00
Alexey Edelev 2bed0bc836 Make sure that we require the cpp exports
When building static libraries or shared libraries on Windows platforms
we need to make sure that _protobuf_registration targets depend on the
generated cpp exports. This add the header file containing exports as
the source file to the _protobuf_registration targets and also
makes sure that we add the dependencies when using both qt_add_protobuf
and qt_add_grpc calls on the same target.

Pick-to: 6.7
Change-Id: Ibc6c04e363093c54dc7ff1725fc6e816b3c9ffdf
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2024-02-21 11:52:57 +01:00
Dennis Oberst dd38ba3d82 clang-format: change AlignEscapedNewlines to left
This aligns with the top-level formatting config.

Change-Id: Ifa6e256dcd55cba572f1a41c7a103edc9b63ba2e
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-02-20 15:30:20 +01:00
Dennis Oberst 2cae3a7510 clang-format: add AlignArrayOfStructures: Right
results in:

struct test demo[] =
{
    {56,    23, "hello"},
    {-1, 93463, "world"},
    { 7,     5,    "!!"}
};

Change-Id: I4f4f61e213c7584006104fa77df3bf8f083a901b
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
2024-02-20 15:30:09 +01:00
Alexey Edelev 48003f9433 Add the missing documentation for the QGrpcOperation::cancel method
Pick-to: 6.6 6.7
Change-Id: I3c0654a33f354aa7e50c2d42e659bff4c6c8181a
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2024-02-20 07:09:01 +01:00
Qt Submodule Update Bot d5aa049f65 Update dependencies on 'dev' in qt/qtgrpc
Change-Id: I0a6abd662073f61d3bd779fc6263b9be8111edcc
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-02-19 17:58:03 +00:00
Alexey Edelev c0285cea1e Document the generated Qt GRPC clients
Document how to use the gRPC service methods of the generated Qt
GRPC clients.

Pick-to: 6.7
Change-Id: I71e33baa628b27cea5cc310c4df1af576d9084f9
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-19 17:38:22 +01:00
Alexey Edelev f46f767f17 Fix the clazy non-POD type initialization warning
Use the static variable trick to initialize the StatusCodeMap in
QGrpcHttp2ChannelPrivate.

Pick-to: 6.7
Change-Id: I13cf8b91029b71cd68b226421a66603d827f9b5f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-12 12:23:49 +01:00
Alexey Edelev cd4d44348f Disallow overriding the mandatory HTTP2 headers
Mandatory HTTP2 headers shouldn't be duplicated or overwritten by the
user headers. The following user-defined headers will be ignored
silently:
 - :authority
 - :method
 - :path
 - :scheme

Pick-to: 6.7
Change-Id: I3656b19b80dd8f9106f3ee97ce83abeac2954073
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2024-02-12 12:23:44 +01:00
Alexey Edelev cc54dccb64 End the native gRPC channel support
Remove the native gRPC channel implementation, respective feature and
tests.

Pick-to: 6.7
Change-Id: I71ef99746bb842d24f634ad52c77fee94edbe86f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-12 12:23:40 +01:00
Alexey Edelev ad6c1128c0 Implement unix:// sockets support
Add the support for the UNIX sockets to QGrpcHttp2Channel. The channel
only supports the non-encrypted communicatoin.

Pick-to: 6.7
Task-number: QTBUG-119074
Change-Id: Ie404999d7511a783e4d1504a0ac51e5fc97f23ba
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-12 08:28:01 +01:00
Alexey Edelev 316de69d70 Enable client and bidir gRPC streaming
Enable the client and bidirectional gRPC streaming in gRPC HTTP/2
channel.

Pick-to: 6.7
Fixes: QTBUG-105494
Change-Id: I49c9a21cb118565bbf0c27add92fd7021e9f0d19
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
2024-02-12 08:27:57 +01:00
Alexey Edelev cdb7696b36 Reimplement QGrpcHttp2Channel using QHttp2Connection
The implementation uses the gRPC HTTP/2 channel private API from the
QtNetwork module. New implementation allows utlizing HTTP/2 streams to
not only receive data from server streams, but also to send data from
client size. This improvement unlocks implementation of client-side
streaming.

Pick-to: 6.7
Task-number: QTBUG-105494
Task-number: QTBUG-105493
Change-Id: Ida8b1b37b7c70f7130b1ff4dcf8d6114b2dfd089
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2024-02-12 08:27:53 +01:00
Qt Submodule Update Bot a48f0e7e0a Update dependencies on 'dev' in qt/qtgrpc
Change-Id: I9815ae83ca36f370ba43a837c610f4aefca589b5
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-02-11 00:40:00 +00:00
Qt Submodule Update Bot 68aad0293a Update dependencies on 'dev' in qt/qtgrpc
Change-Id: Ic578aee40b05bba655a2476466cbb98522299bd9
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2024-02-09 23:23:37 +00:00
Alexey Edelev 57e09d6092 Document the new format of the EXPORT_MACRO option
Add documentation that describes the new format of EXPORT_MACRO
that we introduced in Qt 6.7 already but want make it public in
Qt 6.8 only.

Change-Id: I3431668c3f4949b493f18f0401183fbdcb18c827
Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2024-02-09 15:32:36 +01:00