diff options
Diffstat (limited to 'tests/auto/shared/httpserver.cpp')
-rw-r--r-- | tests/auto/shared/httpserver.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/auto/shared/httpserver.cpp b/tests/auto/shared/httpserver.cpp index c93d30706..67f491fac 100644 --- a/tests/auto/shared/httpserver.cpp +++ b/tests/auto/shared/httpserver.cpp @@ -27,7 +27,9 @@ ****************************************************************************/ #include "httpserver.h" +#include <QFile> #include <QLoggingCategory> +#include <QMimeDatabase> Q_LOGGING_CATEGORY(gHttpServerLog, "HttpServer") @@ -85,6 +87,29 @@ void HttpServer::handleNewConnection() auto rr = new HttpReqRep(m_tcpServer->nextPendingConnection(), this); connect(rr, &HttpReqRep::requestReceived, [this, rr]() { Q_EMIT newRequest(rr); + if (rr->isClosed()) // was explicitly answered + return; + + // if request wasn't handled or purposely ignored for default behavior + // then try to serve htmls from resources dirs if set + if (rr->requestMethod() == "GET") { + for (auto &&dir : qAsConst(m_dirs)) { + QFile f(dir + rr->requestPath()); + if (f.exists()) { + if (f.open(QFile::ReadOnly)) { + QMimeType mime = QMimeDatabase().mimeTypeForFileNameAndData(f.fileName(), &f); + rr->setResponseHeader(QByteArrayLiteral("Content-Type"), mime.name().toUtf8()); + rr->setResponseBody(f.readAll()); + rr->sendResponse(); + } else { + qWarning() << "Can't open resource" << f.fileName() << ": " << f.errorString(); + rr->sendResponse(500); // internal server error + } + break; + } + } + } + if (!rr->isClosed()) rr->sendResponse(404); }); |