summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-08-20 19:00:13 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-08-20 19:00:13 +0200
commit541b7c36250aa0338665a83fab6abf3bd30e36b2 (patch)
treeb13eecaed1a558a3e92e2a8e71ffa0b163419f03
parent957e3cc7e3722bd93f78976c68eba0e5a0535f61 (diff)
Add an active session limit
-rw-r--r--demos/irc/main.cpp2
-rw-r--r--src/webclient.cpp11
-rw-r--r--src/webclient.h4
-rw-r--r--src/webclientserver.cpp9
-rw-r--r--src/webclientserver.h4
5 files changed, 30 insertions, 0 deletions
diff --git a/demos/irc/main.cpp b/demos/irc/main.cpp
index e505173..947e352 100644
--- a/demos/irc/main.cpp
+++ b/demos/irc/main.cpp
@@ -66,6 +66,8 @@ int main(int argc, char **argv)
WebClient webClient;
+// webClient.setActiveSessionLimit(100);
+
QRcServer qrcServer;
QRcServer object;
diff --git a/src/webclient.cpp b/src/webclient.cpp
index 517d971..3a5320d 100644
--- a/src/webclient.cpp
+++ b/src/webclient.cpp
@@ -16,6 +16,7 @@ void WebClient::setPort(quint16 port)
{
delete server;
server = new Server(port);
+
connect(server, SIGNAL(sessionBegin(Session *)),
this, SLOT(newSession_internal(Session *)));
@@ -31,6 +32,16 @@ void WebClient::setRootWidget(QWidget *widget)
globalRootWidget = widget;
}
+void WebClient::setActiveSessionLimit(int sessionLimit)
+{
+ this->server->activeSessionLimit = sessionLimit;
+}
+
+void WebClient::setActiveSessionLimitHtml(const QString &html)
+{
+ this->server->activeSessionLimitHtml = html.toUtf8();
+}
+
void WebClient::newSession_internal(Session *session)
{
QWidget *rootWidget = 0;
diff --git a/src/webclient.h b/src/webclient.h
index c6f7e2c..f59d90f 100644
--- a/src/webclient.h
+++ b/src/webclient.h
@@ -19,8 +19,12 @@ public:
void setRootWidget(QWidget *widget);
void setPort(quint16 port);
+ void setActiveSessionLimit(int sessionLimit);
+ void setActiveSessionLimitHtml(const QString &html);
+
enum WidgetHint { StaticWidget, NoDisplayWidget };
void setWidgetHint(QWidget *widget, WidgetHint hint);
+
signals:
void newSession(QWidget **rootWidget, Session *session);
private slots:
diff --git a/src/webclientserver.cpp b/src/webclientserver.cpp
index f690cf5..3e0f7eb 100644
--- a/src/webclientserver.cpp
+++ b/src/webclientserver.cpp
@@ -187,6 +187,8 @@ Server::Server(quint16 port)
bytesRead = 0;
serverStart = QDateTime::currentDateTime();
totalSessions = 0;
+
+ activeSessionLimitHtml = "<html><body>Active session limit exceeded.</body></html>";
}
Server::~Server()
@@ -264,6 +266,13 @@ void Server::dataOnSocket()
// ### accept unknown sessions for now, TODO do authentication here.
DEBUG << "new session for" << sessionId;
+ if (totalSessions >= activeSessionLimit) {
+ dynamicBytesWritten += activeSessionLimitHtml.size();
+ socket->write(activeSessionLimitHtml);
+ socket->disconnectFromHost();
+ return;
+ }
+
++totalSessions;
sessionId = nextCookieId;
nextCookieId = qrand(); // ###
diff --git a/src/webclientserver.h b/src/webclientserver.h
index 9a823df..ebaf6a4 100644
--- a/src/webclientserver.h
+++ b/src/webclientserver.h
@@ -115,6 +115,10 @@ private:
int totalSessions;
QDateTime serverStart;
QByteArray createStatiticsPage();
+
+public:
+ int activeSessionLimit;
+ QByteArray activeSessionLimitHtml;
};
#endif