diff options
author | Tasuku Suzuki <tasuku.suzuki@qbc.io> | 2019-06-14 14:43:06 +0900 |
---|---|---|
committer | Tasuku Suzuki <tasuku.suzuki@qbc.io> | 2019-07-10 16:20:50 +0900 |
commit | b025906bf73a2a571fe4c6ad8aea6331d4cc59b7 (patch) | |
tree | 48a25d8edf1482b4f90f1fb59c0cdf4bfb3cc332 | |
parent | fb551f9845126ba991ecc13455fcc67bc42c0fe1 (diff) |
Add remoteAddress() to QHttpServerRequest
Change-Id: If72ff6f96a645e86f718d61e57e1f8549f8806da
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r-- | examples/httpserver/simple/main.cpp | 4 | ||||
-rw-r--r-- | src/httpserver/qabstracthttpserver.cpp | 2 | ||||
-rw-r--r-- | src/httpserver/qhttpserverrequest.cpp | 12 | ||||
-rw-r--r-- | src/httpserver/qhttpserverrequest.h | 4 | ||||
-rw-r--r-- | src/httpserver/qhttpserverrequest_p.h | 4 |
5 files changed, 20 insertions, 6 deletions
diff --git a/examples/httpserver/simple/main.cpp b/examples/httpserver/simple/main.cpp index b76f944..0bf21e2 100644 --- a/examples/httpserver/simple/main.cpp +++ b/examples/httpserver/simple/main.cpp @@ -108,6 +108,10 @@ int main(int argc, char *argv[]) return QHttpServerResponse::fromFile(QStringLiteral(":/assets/%1").arg(url.path())); }); + httpServer.route("/remote_address", [](const QHttpServerRequest &request) { + return request.remoteAddress().toString(); + }); + const auto port = httpServer.listen(QHostAddress::Any); if (port == -1) { qDebug() << QCoreApplication::translate( diff --git a/src/httpserver/qabstracthttpserver.cpp b/src/httpserver/qabstracthttpserver.cpp index f31e7b8..1ccd91d 100644 --- a/src/httpserver/qabstracthttpserver.cpp +++ b/src/httpserver/qabstracthttpserver.cpp @@ -57,7 +57,7 @@ void QAbstractHttpServerPrivate::handleNewConnections() auto tcpServer = qobject_cast<QTcpServer *>(q->sender()); Q_ASSERT(tcpServer); while (auto socket = tcpServer->nextPendingConnection()) { - auto request = new QHttpServerRequest; // TODO own tcp server could pre-allocate it + auto request = new QHttpServerRequest(socket->peerAddress()); // TODO own tcp server could pre-allocate it http_parser_init(&request->d->httpParser, HTTP_REQUEST); QObject::connect(socket, &QTcpSocket::readyRead, q_ptr, diff --git a/src/httpserver/qhttpserverrequest.cpp b/src/httpserver/qhttpserverrequest.cpp index 4b0b1e1..da51fb6 100644 --- a/src/httpserver/qhttpserverrequest.cpp +++ b/src/httpserver/qhttpserverrequest.cpp @@ -78,7 +78,8 @@ http_parser_settings QHttpServerRequestPrivate::httpParserSettings { &QHttpServerRequestPrivate::onChunkComplete }; -QHttpServerRequestPrivate::QHttpServerRequestPrivate() +QHttpServerRequestPrivate::QHttpServerRequestPrivate(const QHostAddress &remoteAddress) + : remoteAddress(remoteAddress) { httpParser.data = this; } @@ -248,8 +249,8 @@ int QHttpServerRequestPrivate::onChunkComplete(http_parser *httpParser) return 0; } -QHttpServerRequest::QHttpServerRequest() : - d(new QHttpServerRequestPrivate) +QHttpServerRequest::QHttpServerRequest(const QHostAddress &remoteAddress) : + d(new QHttpServerRequestPrivate(remoteAddress)) {} QHttpServerRequest::QHttpServerRequest(const QHttpServerRequest &other) : @@ -309,4 +310,9 @@ QByteArray QHttpServerRequest::body() const return d->body; } +QHostAddress QHttpServerRequest::remoteAddress() const +{ + return d->remoteAddress; +} + QT_END_NAMESPACE diff --git a/src/httpserver/qhttpserverrequest.h b/src/httpserver/qhttpserverrequest.h index 11754b2..eadb5f7 100644 --- a/src/httpserver/qhttpserverrequest.h +++ b/src/httpserver/qhttpserverrequest.h @@ -36,6 +36,7 @@ #include <QtCore/qglobal.h> #include <QtCore/qurl.h> #include <QtCore/qurlquery.h> +#include <QtNetwork/qhostaddress.h> QT_BEGIN_NAMESPACE @@ -86,6 +87,7 @@ public: Method method() const; QVariantMap headers() const; QByteArray body() const; + QHostAddress remoteAddress() const; protected: QHttpServerRequest(const QHttpServerRequest &other); @@ -95,7 +97,7 @@ private: friend Q_HTTPSERVER_EXPORT QDebug operator<<(QDebug debug, const QHttpServerRequest &request); #endif - QHttpServerRequest(); + explicit QHttpServerRequest(const QHostAddress &remoteAddress); QHttpServerRequestPrivate *d = nullptr; }; diff --git a/src/httpserver/qhttpserverrequest_p.h b/src/httpserver/qhttpserverrequest_p.h index 04b3e79..ae0216b 100644 --- a/src/httpserver/qhttpserverrequest_p.h +++ b/src/httpserver/qhttpserverrequest_p.h @@ -38,6 +38,7 @@ #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> #include <QtCore/qurl.h> +#include <QtNetwork/qhostaddress.h> #include "../3rdparty/http-parser/http_parser.h" @@ -56,7 +57,7 @@ QT_BEGIN_NAMESPACE class QHttpServerRequestPrivate : public QSharedData { public: - QHttpServerRequestPrivate(); + QHttpServerRequestPrivate(const QHostAddress &remoteAddress); quint16 port = 0; enum class State { @@ -86,6 +87,7 @@ public: uint headerHash(const QByteArray &key) const; void clear(); + QHostAddress remoteAddress; private: static http_parser_settings httpParserSettings; |