summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;