HttpServer: use settings structures in place of QSettings (3)

This commit is contained in:
f4exb 2017-11-13 01:26:48 +01:00
parent 3fb9d56d85
commit ef2f591bcd
4 changed files with 52 additions and 9 deletions

View File

@ -6,18 +6,36 @@
#include "httplistener.h" #include "httplistener.h"
#include "httpconnectionhandler.h" #include "httpconnectionhandler.h"
#include "httpconnectionhandlerpool.h" #include "httpconnectionhandlerpool.h"
#include "httplistenersettings.h"
#include <QCoreApplication> #include <QCoreApplication>
using namespace qtwebapp; using namespace qtwebapp;
HttpListener::HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject *parent) HttpListener::HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject *parent)
: QTcpServer(parent) : QTcpServer(parent), useQtSettings(true)
{ {
Q_ASSERT(settings!=0); Q_ASSERT(settings != 0);
Q_ASSERT(requestHandler!=0); Q_ASSERT(requestHandler != 0);
pool=NULL; pool = 0;
this->settings=settings; this->settings = settings;
this->requestHandler=requestHandler; this->listenerSettings = 0;
this->requestHandler = requestHandler;
// Reqister type of socketDescriptor for signal/slot handling
qRegisterMetaType<tSocketDescriptor>("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 // Reqister type of socketDescriptor for signal/slot handling
qRegisterMetaType<tSocketDescriptor>("tSocketDescriptor"); qRegisterMetaType<tSocketDescriptor>("tSocketDescriptor");
// Start listening // Start listening
@ -38,8 +56,8 @@ void HttpListener::listen()
{ {
pool=new HttpConnectionHandlerPool(settings,requestHandler); pool=new HttpConnectionHandlerPool(settings,requestHandler);
} }
QString host = settings->value("host").toString(); QString host = useQtSettings ? settings->value("host").toString() : listenerSettings->host;
int port=settings->value("port").toInt(); int port = useQtSettings ? settings->value("port").toInt() : listenerSettings->port;
QTcpServer::listen(host.isEmpty() ? QHostAddress::Any : QHostAddress(host), port); QTcpServer::listen(host.isEmpty() ? QHostAddress::Any : QHostAddress(host), port);
if (!isListening()) if (!isListening())
{ {

View File

@ -41,6 +41,8 @@ namespace qtwebapp {
@see HttpRequest for description of config settings maxRequestSize and maxMultiPartSize @see HttpRequest for description of config settings maxRequestSize and maxMultiPartSize
*/ */
class HttpListenerSettings;
class DECLSPEC HttpListener : public QTcpServer { class DECLSPEC HttpListener : public QTcpServer {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY(HttpListener) Q_DISABLE_COPY(HttpListener)
@ -55,6 +57,7 @@ public:
@warning Ensure to close or delete the listener before deleting the request handler. @warning Ensure to close or delete the listener before deleting the request handler.
*/ */
HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject* parent = NULL); HttpListener(QSettings* settings, HttpRequestHandler* requestHandler, QObject* parent = NULL);
HttpListener(HttpListenerSettings* settings, HttpRequestHandler* requestHandler, QObject* parent = NULL);
/** Destructor */ /** Destructor */
virtual ~HttpListener(); virtual ~HttpListener();
@ -79,6 +82,7 @@ private:
/** Configuration settings for the HTTP server */ /** Configuration settings for the HTTP server */
QSettings* settings; QSettings* settings;
HttpListenerSettings* listenerSettings;
/** Point to the reuqest handler which processes all HTTP requests */ /** Point to the reuqest handler which processes all HTTP requests */
HttpRequestHandler* requestHandler; HttpRequestHandler* requestHandler;
@ -86,6 +90,9 @@ private:
/** Pool of connection handlers */ /** Pool of connection handlers */
HttpConnectionHandlerPool* pool; HttpConnectionHandlerPool* pool;
/** Settings flag */
bool useQtSettings;
signals: signals:
/** /**

View File

@ -4,13 +4,15 @@
*/ */
#include "httprequest.h" #include "httprequest.h"
#include "httplistenersettings.h"
#include <QList> #include <QList>
#include <QDir> #include <QDir>
#include "httpcookie.h" #include "httpcookie.h"
using namespace qtwebapp; using namespace qtwebapp;
HttpRequest::HttpRequest(QSettings* settings) HttpRequest::HttpRequest(QSettings* settings) : useQtSettings(true)
{ {
status=waitForRequest; status=waitForRequest;
currentSize=0; currentSize=0;
@ -20,6 +22,16 @@ HttpRequest::HttpRequest(QSettings* settings)
tempFile=NULL; 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) void HttpRequest::readRequest(QTcpSocket* socket)
{ {

View File

@ -35,6 +35,8 @@ namespace qtwebapp {
The body is always a little larger than the file itself. The body is always a little larger than the file itself.
*/ */
class HttpListenerSettings;
class DECLSPEC HttpRequest { class DECLSPEC HttpRequest {
Q_DISABLE_COPY(HttpRequest) Q_DISABLE_COPY(HttpRequest)
friend class HttpSessionStore; friend class HttpSessionStore;
@ -49,6 +51,7 @@ public:
@param settings Configuration settings @param settings Configuration settings
*/ */
HttpRequest(QSettings* settings); HttpRequest(QSettings* settings);
HttpRequest(HttpListenerSettings* settings);
/** /**
Destructor. Destructor.
@ -232,6 +235,9 @@ private:
/** Buffer for collecting characters of request and header lines */ /** Buffer for collecting characters of request and header lines */
QByteArray lineBuffer; QByteArray lineBuffer;
/** settings flag */
bool useQtSettings;
}; };
} // end of namespace } // end of namespace