summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTasuku Suzuki <tasuku.suzuki@qbc.io>2019-06-14 14:43:06 +0900
committerTasuku Suzuki <tasuku.suzuki@qbc.io>2019-07-10 16:20:50 +0900
commitb025906bf73a2a571fe4c6ad8aea6331d4cc59b7 (patch)
tree48a25d8edf1482b4f90f1fb59c0cdf4bfb3cc332
parentfb551f9845126ba991ecc13455fcc67bc42c0fe1 (diff)
Add remoteAddress() to QHttpServerRequest
Change-Id: If72ff6f96a645e86f718d61e57e1f8549f8806da Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r--examples/httpserver/simple/main.cpp4
-rw-r--r--src/httpserver/qabstracthttpserver.cpp2
-rw-r--r--src/httpserver/qhttpserverrequest.cpp12
-rw-r--r--src/httpserver/qhttpserverrequest.h4
-rw-r--r--src/httpserver/qhttpserverrequest_p.h4
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;