diff options
author | Morten Sorvig <msorvig@trolltech.com> | 2009-07-31 16:00:33 +0200 |
---|---|---|
committer | Morten Sorvig <msorvig@trolltech.com> | 2009-07-31 16:00:33 +0200 |
commit | 1ac68ee8e31c48d63eeb286dfa28d72162a213d0 (patch) | |
tree | 74ab369438218352094ab7fd57947cf038af81f6 /src | |
parent | 488f3e0e855dc3eefefdc946aff542c1d0dd3668 (diff) |
Implement static content and session statistics
Diffstat (limited to 'src')
-rw-r--r-- | src/sessionserver.cpp | 4 | ||||
-rw-r--r-- | src/sessionserver.h | 7 | ||||
-rw-r--r-- | src/webclientserver.cpp | 39 | ||||
-rw-r--r-- | src/webclientserver.h | 27 |
4 files changed, 48 insertions, 29 deletions
diff --git a/src/sessionserver.cpp b/src/sessionserver.cpp index 9489aa6..07c1212 100644 --- a/src/sessionserver.cpp +++ b/src/sessionserver.cpp @@ -34,10 +34,6 @@ void SessionServer::handleRequest(HttpRequest *request, HttpResponse *response) { DEBUG << "SingleUserServer::handleRequest!" << request->path(); widgetEventHandler->handleRequest(request, response); - - if (response->body == QByteArray()) { - FileServer::handleRequest(request, response); - } } diff --git a/src/sessionserver.h b/src/sessionserver.h index 9f844e7..d9c3e46 100644 --- a/src/sessionserver.h +++ b/src/sessionserver.h @@ -5,15 +5,16 @@ #include <webclientserver.h> #include <widgeteventhandler.h> -class SessionServer : public FileServer +class SessionServer : public QObject { Q_OBJECT public: SessionServer(QWidget *widget, Session *session); ~SessionServer(); - +private slots: void handleRequest(HttpRequest *request, HttpResponse *response); - + +public: QWidget *rootWidget; WidgetEventHandler *widgetEventHandler; }; diff --git a/src/webclientserver.cpp b/src/webclientserver.cpp index 3b802c9..37a7f86 100644 --- a/src/webclientserver.cpp +++ b/src/webclientserver.cpp @@ -148,8 +148,10 @@ Server::Server(quint16 port) qDebug() << QString("Server running on: http://" + QHostInfo::localHostName() + ":" + QString::number(port) + "/"); qsrand(QDateTime::currentDateTime().toTime_t()); nextCookieId = qrand(); - bytesWritten = 0; + dynamicBytesWritten = 0; + staticBytesWritten = 0; bytesRead = 0; + totalSessions = 0; } Server::~Server() @@ -225,7 +227,7 @@ void Server::dataOnSocket() // ### accept unknown sessions for now, TODO do authentication here. DEBUG << "new session for" << sessionId; - + ++totalSessions; sessionId = nextCookieId; nextCookieId = qrand(); // ### @@ -251,6 +253,12 @@ void Server::dataOnSocket() } */ session->emitRequestContent(&request, &response); + if (response.body.isEmpty() == false) { + QByteArray responseText = response.toText(); + dynamicBytesWritten += responseText.count(); + socket->write(responseText); + return; + } const QByteArray path = request.path(); @@ -272,24 +280,35 @@ void Server::dataOnSocket() return; } else if (path.startsWith("/statistics")) { response.setBody(createStatiticsPage()); - + } else if (response.body == QByteArray()) { + fileServer.handleRequest(&request, &response); + QByteArray responseText = response.toText(); + staticBytesWritten += responseText.count(); + socket->write(responseText); + return; } - -// DEBUG << "socket write response"; -// DEBUG << "response" << response.toText(); + QByteArray responseText = response.toText(); - bytesWritten += responseText.count(); socket->write(responseText); + + // DEBUG << "socket write response"; +// DEBUG << "response" << response.toText(); + // DEBUG << "socket write response done"; } QByteArray Server::createStatiticsPage() { QByteArray stats; - stats += "<b> Statistics: </b><br><br>"; - stats += "Bytes transferred, dynamic content: <br>"; - stats += "Sent " + QByteArray::number(bytesWritten / 1024) + " K<br>"; + stats += "<b> Statistics </b><br><br>"; + stats += "Data transfers: <br>"; stats += "Received " + QByteArray::number(bytesRead / 1024) + " K<br>"; + stats += "Sent (dynamic content)" + QByteArray::number(dynamicBytesWritten / 1024) + " K<br>"; + stats += "Sent (static content) " + QByteArray::number(staticBytesWritten / 1024) + " K<br>"; + + stats += "<br>Sessions: <br>"; + stats += "Active :" + QByteArray::number(activeSessions.count()) + "<br>"; + stats += "Total :" + QByteArray::number(totalSessions) + "<br>"; return stats; } diff --git a/src/webclientserver.h b/src/webclientserver.h index 068b347..6a29f1e 100644 --- a/src/webclientserver.h +++ b/src/webclientserver.h @@ -66,6 +66,17 @@ public: Server *m_server; }; +class FileServer : public QObject +{ +Q_OBJECT +public: + FileServer(); +public slots: + virtual void handleRequest(HttpRequest *request, HttpResponse *response); +private: + QSet<QString> allowedFileNames; +}; + class Server : public QTcpServer { Q_OBJECT @@ -87,22 +98,14 @@ private: QHash<int, Session *> activeSessions; int nextCookieId; quint16 port; + FileServer fileServer; // statistics int bytesRead; - int bytesWritten; + int dynamicBytesWritten; + int staticBytesWritten; + int totalSessions; QByteArray createStatiticsPage(); }; -class FileServer : public QObject -{ -Q_OBJECT -public: - FileServer(); -public slots: - virtual void handleRequest(HttpRequest *request, HttpResponse *response); -private: - QSet<QString> allowedFileNames; -}; - #endif |