8 #include "httpconnectionhandlerpool.h"
9 #include <QCoreApplication>
11 using namespace stefanfrings;
16 Q_ASSERT(settings!=
nullptr);
17 Q_ASSERT(requestHandler!=
nullptr);
19 this->settings=settings;
20 this->requestHandler=requestHandler;
22 qRegisterMetaType<tSocketDescriptor>(
"tSocketDescriptor");
31 qDebug(
"HttpListener: destroyed");
41 QString host = settings->value(
"host").toString();
42 quint16 port=settings->value(
"port").toUInt() & 0xFFFF;
43 QTcpServer::listen(host.isEmpty() ? QHostAddress::Any : QHostAddress(host), port);
46 qCritical(
"HttpListener: Cannot bind on port %i: %s",port,qPrintable(errorString()));
49 qDebug(
"HttpListener: Listening on port %i",port);
56 qDebug(
"HttpListener: closed");
65 qDebug(
"HttpListener: New connection");
78 QMetaObject::invokeMethod(freeHandler,
"handleConnection", Qt::QueuedConnection, Q_ARG(
tSocketDescriptor, socketDescriptor));
83 qDebug(
"HttpListener: Too many incoming connections");
84 QTcpSocket* socket=
new QTcpSocket(
this);
85 socket->setSocketDescriptor(socketDescriptor);
86 connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
87 socket->write(
"HTTP/1.1 503 too many connections\r\nConnection: close\r\n\r\nToo many connections\r\n");
88 socket->disconnectFromHost();
Pool of http connection handlers.
HttpConnectionHandler * getConnectionHandler()
Get a free connection handler, or 0 if not available.
Alias for QSslConfiguration if OpenSSL is not supported.
void listen()
Restart listeing after close().
HttpListener(const QSettings *settings, HttpRequestHandler *requestHandler, QObject *parent=nullptr)
Constructor.
void close()
Closes the listener, waits until all pending requests are processed, then closes the connection pool.
void incomingConnection(tSocketDescriptor socketDescriptor)
Serves new incoming connection requests.
virtual ~HttpListener()
Destructor.
The request handler generates a response for each HTTP request.
qintptr tSocketDescriptor
Alias type definition, for compatibility to different Qt versions.