summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2014-02-15 10:11:57 +0100
committerTreeki <treeki@gmail.com>2014-02-15 10:11:57 +0100
commit848c96b0df5282a9089bd4259e3e6ae3620f3ec9 (patch)
tree6343900bef4dd1d5c74836b639028678acd32316
parent878a0c157b772a7ed04d4cc395059087f964b823 (diff)
downloadbounce4-848c96b0df5282a9089bd4259e3e6ae3620f3ec9.tar.gz
bounce4-848c96b0df5282a9089bd4259e3e6ae3620f3ec9.zip
add limiting of the amount of messages in a window
Diffstat (limited to '')
-rw-r--r--bouncer/core.h1
-rw-r--r--bouncer/netcore.cpp8
-rw-r--r--bouncer/window.cpp2
3 files changed, 11 insertions, 0 deletions
diff --git a/bouncer/core.h b/bouncer/core.h
index a8f5d9b..4bb266e 100644
--- a/bouncer/core.h
+++ b/bouncer/core.h
@@ -397,6 +397,7 @@ public:
bool quitFlag;
std::string bouncerPassword;
+ int maxWindowMessageCount;
int execute();
diff --git a/bouncer/netcore.cpp b/bouncer/netcore.cpp
index 98f13a1..7c2305e 100644
--- a/bouncer/netcore.cpp
+++ b/bouncer/netcore.cpp
@@ -331,6 +331,10 @@ void NetCore::loadConfig() {
for (auto &section : sections) {
if (section.title == "Header") {
bouncerPassword = section.data["password"];
+
+ maxWindowMessageCount = atoi(section.data["maxBufferSize"].c_str());
+ if (maxWindowMessageCount < 5 || maxWindowMessageCount > 2000)
+ maxWindowMessageCount = 1000;
}
if (section.title == "Server" && serverCount < SERVER_LIMIT) {
@@ -351,6 +355,10 @@ void NetCore::saveConfig() {
header.data["password"] = bouncerPassword;
+ char conv[50];
+ sprintf(conv, "%d", maxWindowMessageCount);
+ header.data["maxWindowMessageCount"] = conv;
+
sections.push_back(header);
for (int i = 0; i < serverCount; i++) {
diff --git a/bouncer/window.cpp b/bouncer/window.cpp
index 1f6aa4a..04689f5 100644
--- a/bouncer/window.cpp
+++ b/bouncer/window.cpp
@@ -31,6 +31,8 @@ void Window::notifyWindowRename() {
}
void Window::pushMessage(const char *str, int priority) {
+ if (messages.size() >= core->maxWindowMessageCount)
+ messages.pop_front();
messages.push_back(str);
bool createdPacket = false;