summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMikhail Svetkin <mikhail.svetkin@gmail.com>2019-09-01 21:33:22 +0200
committerMikhail Svetkin <mikhail.svetkin@gmail.com>2019-10-25 08:55:01 +0200
commit43a04e17a1e10425da84b6c725a03dc87834b64a (patch)
tree22d69ba5a1876efde769ba550a9dac955acd780b /src
parente35fdc4763a54aff3768bcd0144ae97249bd7185 (diff)
Allow using QHttpServerRequest/Responder at the same time
Fixes: QTBUG-77088 Change-Id: I2208cee290d086339aba705f959c57e0f6a73a87 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/httpserver/qhttpserver.h24
-rw-r--r--src/httpserver/qhttpserverrouterviewtraits.h4
2 files changed, 25 insertions, 3 deletions
diff --git a/src/httpserver/qhttpserver.h b/src/httpserver/qhttpserver.h
index d5ebdcb..80bad2c 100644
--- a/src/httpserver/qhttpserver.h
+++ b/src/httpserver/qhttpserver.h
@@ -112,7 +112,16 @@ private:
}
template<typename ViewTraits, typename T>
- typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value, void>::type
+ typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value &&
+ ViewTraits::Arguments::PlaceholdersCount == 2, void>::type
+ responseImpl(T &boundViewHandler, const QHttpServerRequest &request, QTcpSocket *socket)
+ {
+ boundViewHandler(makeResponder(request, socket), request);
+ }
+
+ template<typename ViewTraits, typename T>
+ typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value &&
+ ViewTraits::Arguments::PlaceholdersCount == 1, void>::type
responseImpl(T &boundViewHandler, const QHttpServerRequest &request, QTcpSocket *socket)
{
const QHttpServerResponse response(boundViewHandler(request));
@@ -120,7 +129,18 @@ private:
}
template<typename ViewTraits, typename T>
- typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value, void>::type
+ typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value &&
+ ViewTraits::Arguments::PlaceholdersCount == 2, void>::type
+ responseImpl(T &boundViewHandler,
+ const QHttpServerRequest &request,
+ QTcpSocket *socket)
+ {
+ boundViewHandler(request, makeResponder(request, socket));
+ }
+
+ template<typename ViewTraits, typename T>
+ typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value &&
+ ViewTraits::Arguments::PlaceholdersCount == 1, void>::type
responseImpl(T &boundViewHandler,
const QHttpServerRequest &request,
QTcpSocket *socket)
diff --git a/src/httpserver/qhttpserverrouterviewtraits.h b/src/httpserver/qhttpserverrouterviewtraits.h
index b4ce4fb..377811c 100644
--- a/src/httpserver/qhttpserverrouterviewtraits.h
+++ b/src/httpserver/qhttpserverrouterviewtraits.h
@@ -169,8 +169,10 @@ struct ViewTraitsHelper {
static constexpr bool TypeMatched = isType<CleanTypeT, true>();
static constexpr bool TypeCVRefMatched = isType<T>();
+
static constexpr bool ValidPosition =
- (I == FunctionTraits::ArgumentIndexMax);
+ (I == FunctionTraits::ArgumentIndexMax ||
+ I == FunctionTraits::ArgumentIndexMax - 1);
static constexpr bool ValidAll = TypeCVRefMatched && ValidPosition;
static constexpr bool assertCondition =