From ef2f591bcd8a5053f3ee9c15b66eeff962d74792 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 13 Nov 2017 01:26:48 +0100 Subject: [PATCH] HttpServer: use settings structures in place of QSettings (3) --- httpserver/httplistener.cpp | 34 ++++++++++++++++++++++++++-------- httpserver/httplistener.h | 7 +++++++ httpserver/httprequest.cpp | 14 +++++++++++++- httpserver/httprequest.h | 6 ++++++ 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/httpserver/httplistener.cpp b/httpserver/httplistener.cpp index 7e86653f7..80d549615 100644 --- a/httpserver/httplistener.cpp +++ b/httpserver/httplistener.cpp @@ -6,18 +6,36 @@ #include "httplistener.h" #include "httpconnectionhandler.h" #include "httpconnectionhandlerpool.h" +#include "httplistenersettings.h" + #include using namespace qtwebapp; HttpListener::HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject *parent) - : QTcpServer(parent) + : QTcpServer(parent), useQtSettings(true) { - Q_ASSERT(settings!=0); - Q_ASSERT(requestHandler!=0); - pool=NULL; - this->settings=settings; - this->requestHandler=requestHandler; + Q_ASSERT(settings != 0); + Q_ASSERT(requestHandler != 0); + pool = 0; + this->settings = settings; + this->listenerSettings = 0; + this->requestHandler = requestHandler; + // Reqister type of socketDescriptor for signal/slot handling + qRegisterMetaType("tSocketDescriptor"); + // Start listening + listen(); +} + +HttpListener::HttpListener(HttpListenerSettings* settings, HttpRequestHandler* requestHandler, QObject *parent) + : QTcpServer(parent), useQtSettings(false) +{ + Q_ASSERT(settings != 0); + Q_ASSERT(requestHandler != 0); + pool = 0; + this->settings = 0; + this->listenerSettings = settings; + this->requestHandler = requestHandler; // Reqister type of socketDescriptor for signal/slot handling qRegisterMetaType("tSocketDescriptor"); // Start listening @@ -38,8 +56,8 @@ void HttpListener::listen() { pool=new HttpConnectionHandlerPool(settings,requestHandler); } - QString host = settings->value("host").toString(); - int port=settings->value("port").toInt(); + QString host = useQtSettings ? settings->value("host").toString() : listenerSettings->host; + int port = useQtSettings ? settings->value("port").toInt() : listenerSettings->port; QTcpServer::listen(host.isEmpty() ? QHostAddress::Any : QHostAddress(host), port); if (!isListening()) { diff --git a/httpserver/httplistener.h b/httpserver/httplistener.h index 11b7a420b..57d4b87cd 100644 --- a/httpserver/httplistener.h +++ b/httpserver/httplistener.h @@ -41,6 +41,8 @@ namespace qtwebapp { @see HttpRequest for description of config settings maxRequestSize and maxMultiPartSize */ +class HttpListenerSettings; + class DECLSPEC HttpListener : public QTcpServer { Q_OBJECT Q_DISABLE_COPY(HttpListener) @@ -55,6 +57,7 @@ public: @warning Ensure to close or delete the listener before deleting the request handler. */ HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject* parent = NULL); + HttpListener(HttpListenerSettings* settings, HttpRequestHandler* requestHandler, QObject* parent = NULL); /** Destructor */ virtual ~HttpListener(); @@ -79,6 +82,7 @@ private: /** Configuration settings for the HTTP server */ QSettings* settings; + HttpListenerSettings* listenerSettings; /** Point to the reuqest handler which processes all HTTP requests */ HttpRequestHandler* requestHandler; @@ -86,6 +90,9 @@ private: /** Pool of connection handlers */ HttpConnectionHandlerPool* pool; + /** Settings flag */ + bool useQtSettings; + signals: /** diff --git a/httpserver/httprequest.cpp b/httpserver/httprequest.cpp index 73dcd774a..8b0a6dc91 100644 --- a/httpserver/httprequest.cpp +++ b/httpserver/httprequest.cpp @@ -4,13 +4,15 @@ */ #include "httprequest.h" +#include "httplistenersettings.h" + #include #include #include "httpcookie.h" using namespace qtwebapp; -HttpRequest::HttpRequest(QSettings* settings) +HttpRequest::HttpRequest(QSettings* settings) : useQtSettings(true) { status=waitForRequest; currentSize=0; @@ -20,6 +22,16 @@ HttpRequest::HttpRequest(QSettings* settings) tempFile=NULL; } +HttpRequest::HttpRequest(HttpListenerSettings* settings) : useQtSettings(false) +{ + status=waitForRequest; + currentSize=0; + expectedBodySize=0; + maxSize=settings->maxRequestSize; + maxMultiPartSize=settings->maxMultiPartSize; + tempFile=NULL; +} + void HttpRequest::readRequest(QTcpSocket* socket) { diff --git a/httpserver/httprequest.h b/httpserver/httprequest.h index 46d565b44..9dd7852c0 100644 --- a/httpserver/httprequest.h +++ b/httpserver/httprequest.h @@ -35,6 +35,8 @@ namespace qtwebapp { The body is always a little larger than the file itself. */ +class HttpListenerSettings; + class DECLSPEC HttpRequest { Q_DISABLE_COPY(HttpRequest) friend class HttpSessionStore; @@ -49,6 +51,7 @@ public: @param settings Configuration settings */ HttpRequest(QSettings* settings); + HttpRequest(HttpListenerSettings* settings); /** Destructor. @@ -232,6 +235,9 @@ private: /** Buffer for collecting characters of request and header lines */ QByteArray lineBuffer; + /** settings flag */ + bool useQtSettings; + }; } // end of namespace