summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-07-31 16:00:33 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-07-31 16:00:33 +0200
commit1ac68ee8e31c48d63eeb286dfa28d72162a213d0 (patch)
tree74ab369438218352094ab7fd57947cf038af81f6 /src
parent488f3e0e855dc3eefefdc946aff542c1d0dd3668 (diff)
Implement static content and session statistics
Diffstat (limited to 'src')
-rw-r--r--src/sessionserver.cpp4
-rw-r--r--src/sessionserver.h7
-rw-r--r--src/webclientserver.cpp39
-rw-r--r--src/webclientserver.h27
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