91 Commits

Author SHA1 Message Date
Mikhail Svetkin
983e93c3b1 Fix linkage error in QFutureInterface<QHttpServerResponse>::takeResult
The error:
    QtPrivate::ExceptionStore::throwPossibleException already defined
    in QHttpServerFutureResponse.

Task-number: QTBUG-85191
Change-Id: I055b2aa563cbde7d01309a01fa59d4283c9c2e36
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-07-02 20:08:23 +02:00
Mikhail Svetkin
e49b9a111a Introduce QHttpServerFutureResponse
Provide simple API for asynchronous resoponses

Change-Id: Ic0c92cce95751dc8f9d6b0dfa96e39019f5f5e9e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-06-11 21:20:57 +02:00
Mikhail Svetkin
2a67efadf1 Don't destory socket and request objects while handling a request
Task-number: QTBUG-84617
Change-Id: Ibf98fb329c817ae39f66e539cdb30a4194cb3b42
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-06-06 21:48:40 +02:00
Mikhail Svetkin
7e29e0dfeb cmake: Remove unused conditions
Change-Id: I15a7bdd80c6bbaab85f2ed10d1e598661eb38a05
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-05-16 22:36:11 +02:00
Mikhail Svetkin
e0fa374411 Add QHttpServer::afterRequest
This function allows to register a function to be run after each request.

Task-number: QTBUG-77090
Change-Id: I40dd4c1e9a447fbe034149ffc1923c7c814cf0e9
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-05-14 20:36:31 +02:00
Mikhail Svetkin
f28694ea2c tst_qhttpserver: Add expected warning messages
Change-Id: Iffbde346b6e8454dc9e8b19d96e8a4a4e860f1e2
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-05-14 19:52:34 +02:00
Mikhail Svetkin
1c254ef8d4 gitignore: add object_script.*
msys2 environment generates
 - src/httpserver/object_script.Qt5HttpServer.Release
 - src/httpserver/object_script.Qt5HttpServerd.Debug

Change-Id: Ia828cf2cf2aebb8d81992a49ada8af56ab1f7a5f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-05-06 19:44:18 +02:00
Mikhail Svetkin
4b2790aa6d Add cmake support for Qt6/dev branch
Change-Id: Icca0edab01d6028d786b76f99fba388565bd6e76
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2020-05-05 19:43:56 +02:00
Mikhail Svetkin
6d0a9b6f83 Add missing QStringBuilder header
Change-Id: Idfda1af35ac2b65f202b3b76682a959e946b426f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-05-05 19:41:25 +02:00
Mikhail Svetkin
e8f01b2042 Fix Project ERROR: Unknown module(s) in QT: sslserver
It looks like qmake -r does not resolve dependencies correctly.

Change-Id: Ifd6bd6cac9af1b5eee249aef99fd32ed68f72a9e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-04-24 16:54:30 +02:00
Maurice Kalinowski
9304ea94c6 Fix warning about unused variable
Change-Id: I42fdf82516dce4ea504c402981ee4bc969471e7e
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
2020-04-24 13:00:28 +02:00
Mikhail Svetkin
a8d172617b Add cmake test and remove dead code
cmake test was removed accidentally 9719bf64bb471b8da10e8a5aa419308e8d3b1238

Change-Id: I96f3717e936256d353816094506c6b48538f0fc8
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-04-19 10:44:12 +02:00
Mikhail Svetkin
9719bf64bb Add dependencies file for Coin
Coin by default uses dev branch of qtbase.
Add 5.12 qtbase into the dependencies file

Change-Id: I849ea65e36c74f153dbd5531c01e3a3b00ab4fef
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-04-19 00:01:36 +02:00
Mikhail Svetkin
a65cc1fa6e Do not disconnect on HTTP CONNECT method
According HTTP/1.1 specifications (RFC 7231) CONNECT is intended only
for use in requests to a proxy. That it is why http-parser sets the upgrade flag.

This patch will allow users to decide how to handle this.

Change-Id: Ic2d10ca4ab113b4cac85e14f15af7890d5773e98
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-02-26 12:53:15 +01:00
Mikhail Svetkin
65ba5db9e0 Small refactoring of QHttpServerRequest and QAbstractHttpServer
1. Move initialization of httpParser from QAbstractHttpServer
to QHttpServerRequest.

2. Simplify access to an upgrade header value from a request.
httpParser sets an upgrade flag only if the request has two headers
or the request is HTTP CONNECT method.

Change-Id: I39c2325558a58679e40d38e46706cd61ef36d327
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-02-24 21:27:24 +01:00
Mikhail Svetkin
a96d975ea8 Fix QString::QString(const QByteArray&)’ is deprecated
warning: ‘QString::QString(const QByteArray&)’ is deprecated:
Use fromUtf8, QStringLiteral, or QLatin1String

Change-Id: Ia3901f2a1aeb7a3f241eb3ae4ed2f67da76e57bc
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-02-24 09:06:48 +01:00
Mikhail Svetkin
68a4458a7b Fix memory leak in test
QTcpSocket was created on heap without a parent and it never called
delete.

Change-Id: I492633f9797427e546065f9afadf19a672dc552c
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@kdab.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-02-20 08:26:05 +01:00
Mårten Nordheim
93ff67a3fc Make QAbstractHttpServer::listen return 0 on fail
Which then makes it compatible with other listen() functions in Qt
in the sense that doing if (server.listen()) will behave
consistently.
Ports being listened to can then be gotten from the new serverPorts()
function, mirroring serverPort() from QTcpServer etc., except it's a
QVector.

This is a source incompatible change, but is allowed because this
module is still in tech preview.

Fixes: QTBUG-79411
Change-Id: I09764afbf8fd866af4f43ab90fcf9c2e9a373237
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-02-18 12:17:22 +01:00
Tasuku Suzuki
4b87afbbe6 Fix crash when CONNECT method is used
When the parser received "CONNECT / HTTP/1.1\n\n", its upgrade variable
is set to 1 even though there is no "upgrade" header available.
In this case, QMap::find() returns its end.

Task-number: QTBUG-82053
Change-Id: I41cc23511459c6735a474bb7b903638dd4b1208f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-02-13 20:37:43 +09:00
Mårten Nordheim
bf9bb2acb6 Remove dependence on QtNetworkPrivate from QSslServer
Locally I was unable to build QSslServer due to
QAbstractSocketEnginePrivate not being exported.

Change-Id: I739b63d03d2ff378e03ef3fcd7b1ab55db24f63b
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@kdab.com>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-02-07 14:19:20 +01:00
Tasuku Suzuki
10ca6d493a Allow simple example to be built without gui module
Change-Id: I173e418eb03dc471e64284f89182bbb1b2806d88
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-02-07 03:55:43 +09:00
Mårten Nordheim
17365af1f7 Remove unused local variables
Fixes compiler complaints

Change-Id: Ic5923a9a15d7ec9f487d3fe02ec16361eaa4838c
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2020-02-06 11:20:59 +01:00
Mikhail Svetkin
92c069d772 qhttpserver: Fix documentation for special arguments
Change-Id: Ibb373e7462220cb678330bb0cb7421407ccb37e3
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-11-21 12:00:22 +00:00
Mikhail Svetkin
7dc185f101 Refactor access to QMetaEnum for QHttpServerRequest::Method
Replace QHttpServerRequest::staticMetaObject.indexOfEnumerator("Method")
with QMetaEnum::fromType<QHttpServerRequest::Method>.

Change-Id: Idda142fd065e9ce216e2d76c09a5b19d384df1b3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-11-10 22:41:25 +01:00
Mikhail Svetkin
dba675ed61 Refactor QHttpServerRequestPrivate::parseUrl
There are few changes:
1. Remove std::function. A lambda can be converted to a function pointer
   if it does not capture.
2. Change std::map to std::array and mark it as constexpr. It will
   eliminate run-time initialization and checking.
3. Remove unnecessary nesting

Change-Id: I5379cb11016def47aee0c57c3de39677aae072d7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-11-10 20:10:25 +00:00
Mikhail Svetkin
5fcfbb6629 qhttpserverrequest: Change QSharedPointer to QScopedPointer
And disable copy for QHttpServerRequest since it's not intended
to be copy-able.

Change-Id: I34ba6929507cc4f020fac52bf36c816b194fd250
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-10-29 15:29:40 +00:00
Mikhail Svetkin
45e1139892 Fix compilation with gcc 4.8
GCC 4.8 doesn't like using QPointers in signal connections.
Additional to e35fdc4763a54aff3768bcd0144ae97249bd7185.

Fixes: QTBUG-79345
Change-Id: Id5677139a31affab737d11e4456f9bf8d174601f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
2019-10-29 07:28:11 +01:00
Mikhail Svetkin
43a04e17a1 Allow using QHttpServerRequest/Responder at the same time
Fixes: QTBUG-77088
Change-Id: I2208cee290d086339aba705f959c57e0f6a73a87
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-10-25 08:55:01 +02:00
Mikhail Svetkin
e35fdc4763 Fix compilation with gcc 4.8
GCC 4.8 doesn't like using QPointers in signal connections.

Fixes: QTBUG-79345
Change-Id: I7cd4d79eee3ce7f07874e13f5ecfa9925090d68d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-10-24 14:10:01 +02:00
Mikhail Svetkin
3eebefcd27 QHttpServerRouterViewTraits: Make it simpler and testable
Currently QHttpServerRouterViewTraits contains all helpers and tools
inside itself. It is hard to read and extend.

This patch:
- Moves all helper and tools to QtPrivate namespace
- Tries to "simplify" template magic
- Adds support for unit test

Change-Id: I6aa443b286c4c896b8dbfee85fffb638328868ad
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-10-24 11:56:21 +02:00
Sylvain Garcia
52bce52413 Fix memory leak in QHttpServerRequest
Using QSharedPointer rather than raw pointer for private data

[ChangeLog][QHttpServerRequest][Fix QHttpServerRequest memory leak] Fixed: memory leak in QHttpServerRequest

Change-Id: I419ec22e56f199677d058938cee046a60a3c2450
Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
2019-10-14 10:39:29 +02:00
Sylvain Garcia
f04a6809b1 HTTPS support
Added new `QAbstractHttpServer::sslSetup` which enables HTTPS usage.
Added new `QSslServer` which inherits from `QTcpServer` and configures
incoming TCP clients to use SSL.

[ChangeLog][QHttpServer][Https support] Https support added to
QAbstractHttpServer class

Change-Id: I536cf48b86b246e3f4b9d960f793b93670afe06f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Guy Poizat <gerrit.qt@gmail.com>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2019-10-04 17:16:09 +02:00
Mikhail Svetkin
73175545e6 QHttpServerResponse: Extend the API
Add new API for HTTP headers manipulations.
Add QHttpServerResponse::write function which will
allow to write custom response objects in a future.

Fixes: QTBUG-76933
Change-Id: I744303be1b517c07f698c4a3dd2c4296f77e3b03
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@tqcs.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-10-03 19:40:22 +02:00
Mikhail Svetkin
b838370769 QHttpServerResponse: Change text/html -> application/x-empty
It does not make sense to set "text/html" as content type for empty
responses.

Change-Id: I93f540c97cef38409f1479f1c332349155edd176
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
2019-08-22 06:38:26 +02:00
Mikhail Svetkin
f46cb8832f Add QHttpServerLiterals
Currently we have a lot of duplication of most common HTTP headers and their
values.
This patch moves them to one place.

Change-Id: Idf9ddc5164e81649b4cc37ed92a516eb1eedab3a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
2019-08-21 22:07:26 +02:00
Mikhail Svetkin
03f911fd0a QHttpServerResponse: Use rvalue more
Change-Id: I442245dc800a545142f3f28ea51a4465d6eaff84
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-20 20:20:52 +02:00
Mikhail Svetkin
055d36692b QHttpServerResponder: refactor and extend the API
Currently QHttpServerResponder is not flexible enough:
 - Does not allow to rewrite headers
 - Does not allow to write headers without storing them internaly first
 - Does not provide API to make your own HTTP response

This patch will help to implement QHttpServerResponse
setHeaders/addHeaders

Change-Id: If9e21f7f7a58629bfedad0f10cab67d67fce0a89
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-20 18:40:26 +02:00
Mikhail Svetkin
b63b0862c9 QHttpServerResponse: add ctor for QJsonArray
Task-number: QTBUG-76619
Change-Id: Ibce12e33754e950f467c8fb291d447cfc0694062
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-11 21:56:24 +02:00
Mikhail Svetkin
a8777eb51e QHttpServerResponse: use compact mode for json objects
Change-Id: Ia01f2f9a1483b326bc92eda20045f9764616cf66
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-11 20:10:31 +02:00
Tasuku Suzuki
b025906bf7 Add remoteAddress() to QHttpServerRequest
Change-Id: If72ff6f96a645e86f718d61e57e1f8549f8806da
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-10 16:20:50 +09:00
Mikhail Svetkin
fb551f9845 QAbstractHttpServer: Simplify handleNewConection/handleReadyRead
Remove usage of QObjectUserData.
Remove usage of QHash of QHttpServerRequest.

Change-Id: I8a6c44bcfefc12c841ae67562e9bbec10f6ab9bf
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-09 20:33:56 +02:00
Mårten Nordheim
ec8a569b68 Example: add 'cmdline' to CONFIG
So it doesn't detach from command line on Windows,
and doesn't generate app bundles on macOS.

Change-Id: I0449b1224b9c01f2f040ac98508732f9d280ee3b
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@gmail.com>
2019-07-08 09:54:03 +00:00
Tasuku Suzuki
fc7908e628 Introduce QHttpServerResponse::fromFile()
This is a shortcut for static file contents.

Change-Id: I54d97c60822e661c1405f27ea8d4598f0363b144
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-06-14 15:19:29 +09:00
Jesus Fernandez
c88c462ac7 Silent -Wdeprecated-declarations warning
warning: ‘QString::QString(const QByteArray&)’ is deprecated: Use fromUtf8, QStringLiteral, or QLatin1String [-Wdeprecated-declarations]
 #  define qPrintable(string) QtPrivate::asString(string).toLocal8Bit().constData()

Change-Id: I24fb34c6ed4dd5ebddf92b988e31a01322fc0a57
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
2019-05-21 13:29:18 +02:00
Mikhail Svetkin
e2c63563d5 Fix crash for passing lambda with captures to QHttpServer::route
QHttpServer::route accepted the lambda by universal reference, but did
not pass it to QHttpServerRouter::addRule by std::forward.

We can not initialize lambda captures with C++11.
So we always need to copy the lambda by value.

Task-number: QTBUG-74882
Change-Id: I3e2dc6003624414d0ff45ba2e2f1af472e219ff1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-15 12:41:43 +00:00
Mikhail Svetkin
3a811fc0cc Use Qt5TestMacros for run cmake tests
Change-Id: I54486c20d047b5aa73e6012d43c9ca5019f9a51f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-15 11:32:34 +00:00
Mikhail Svetkin
6ac5d57697 Remove unused signal
Change-Id: I28fb6f9f45e43d21cace1978c03acd330a9e6faa
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-05-09 17:36:53 +00:00
Tasuku Suzuki
26b4df2582 Change QString for headers in QHttpServerRequest to QByteArray
This is because QHttpServerResponder uses QByteArray for headers' key/
value.

Change-Id: I21b5af4d08e43ee58a1edc95b714c6da0ae10790
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
2019-05-09 15:14:33 +00:00
Tasuku Suzuki
9f7bf6654b Remove a member variable unused
Change-Id: Iacb3259742ca1d3e352624d953b5f5581cb72102
Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-05-09 14:27:21 +00:00
Tasuku Suzuki
f72ced1671 Fix tests failure introduced by the mime type detection
Commit 4f64330b39bd528a84241e976baa464c6dc89de1 changes some mime types
of responses to text/plain.
The commit also FIXED the "No newline at end of file" warning in a test
data for QHttpServerResponder.

Change-Id: I9b6b1878a2b61bf80db1e39b81ae75c4cedce615
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-05-09 13:57:18 +00:00