From 659530cbab286a2fbb38eee16d290cd202704452 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 20 Jan 2014 16:48:20 +0100 Subject: Update example configs/helpop --- docs/conf/modules.conf.example | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'docs/conf/modules.conf.example') diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index 54a667f34..b65a0ca02 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -1554,7 +1554,8 @@ #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # SASL authentication module: Provides support for IRC Authentication -# Layer (aka: atheme SASL) via AUTHENTICATE. +# Layer via AUTHENTICATE. Note: You also need to have m_cap.so loaded +# for SASL to work. # #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# -- cgit v1.2.3 From ef264e2dca03126e1ea38ee05594bd015384622b Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 20 Jan 2014 16:57:30 +0100 Subject: m_httpd Add timeout option; remove timed out connections --- docs/conf/modules.conf.example | 3 +++ src/modules/m_httpd.cpp | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) (limited to 'docs/conf/modules.conf.example') diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index b65a0ca02..09a8514a4 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -870,6 +870,9 @@ # a tag with type "httpd", and load at least one of the other # m_httpd_* modules to provide pages to display. # +# You can adjust the timeout for HTTP connections below. All HTTP +# connections will be closed after (roughly) this many seconds. +# #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # http ACL module: Provides access control lists for m_httpd dependent diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp index 6315809a9..a853e12c2 100644 --- a/src/modules/m_httpd.cpp +++ b/src/modules/m_httpd.cpp @@ -59,9 +59,11 @@ class HttpServerSocket : public BufferedSocket std::string http_version; public: + const time_t createtime; HttpServerSocket(int newfd, const std::string& IP, ListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server) : BufferedSocket(newfd), ip(IP), postsize(0) + , createtime(ServerInstance->Time()) { InternalState = HTTP_SERVE_WAIT_REQUEST; @@ -339,12 +341,22 @@ class HttpServerSocket : public BufferedSocket class ModuleHttpServer : public Module { + unsigned int timeoutsec; + public: void init() { HttpModule = this; - ServerInstance->Modules->Attach(I_OnAcceptConnection, this); + Implementation eventlist[] = { I_OnAcceptConnection, I_OnBackgroundTimer, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); + OnRehash(NULL); + } + + void OnRehash(User* user) + { + ConfigTag* tag = ServerInstance->Config->ConfValue("httpd"); + timeoutsec = tag->getInt("timeout"); } void OnRequest(Request& request) @@ -367,6 +379,24 @@ class ModuleHttpServer : public Module return MOD_RES_ALLOW; } + void OnBackgroundTimer(time_t curtime) + { + if (!timeoutsec) + return; + + time_t oldest_allowed = curtime - timeoutsec; + for (std::set::const_iterator i = sockets.begin(); i != sockets.end(); ) + { + HttpServerSocket* sock = *i; + ++i; + if (sock->createtime < oldest_allowed) + { + sock->cull(); + delete sock; + } + } + } + CullResult cull() { std::set local; -- cgit v1.2.3 From b8f0e349ce8891d6236fc026c47139af1f05912c Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Mon, 20 Jan 2014 17:05:01 +0100 Subject: m_svshold Add config option to hide snotices --- docs/conf/modules.conf.example | 2 ++ src/modules/m_svshold.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'docs/conf/modules.conf.example') diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index 09a8514a4..e9304f390 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -1776,6 +1776,8 @@ # SVSHold module: Implements SVSHOLD. Like Q:Lines, but can only be # # added/removed by Services. # # +# If silent is true no snotices will be generated by SVSHOLD. +# #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # SWHOIS module: Allows you to add arbitary lines to user WHOIS. diff --git a/src/modules/m_svshold.cpp b/src/modules/m_svshold.cpp index d8176043e..e666b0fe2 100644 --- a/src/modules/m_svshold.cpp +++ b/src/modules/m_svshold.cpp @@ -25,6 +25,11 @@ /* $ModDesc: Implements SVSHOLD. Like Q:Lines, but can only be added/removed by Services. */ +namespace +{ + bool silent; +} + /** Holds a SVSHold item */ class SVSHold : public XLine @@ -58,8 +63,11 @@ public: void DisplayExpiry() { - ServerInstance->SNO->WriteToSnoMask('x',"Removing expired SVSHOLD %s (set by %s %ld seconds ago)", - this->nickname.c_str(), this->source.c_str(), (long int)(ServerInstance->Time() - this->set_time)); + if (!silent) + { + ServerInstance->SNO->WriteToSnoMask('x',"Removing expired SVSHOLD %s (set by %s %ld seconds ago)", + this->nickname.c_str(), this->source.c_str(), (long int)(ServerInstance->Time() - this->set_time)); + } } const char* Displayable() @@ -114,7 +122,8 @@ class CommandSvshold : public Command { if (ServerInstance->XLines->DelLine(parameters[0].c_str(), "SVSHOLD", user)) { - ServerInstance->SNO->WriteToSnoMask('x',"%s removed SVSHOLD on %s",user->nick.c_str(),parameters[0].c_str()); + if (!silent) + ServerInstance->SNO->WriteToSnoMask('x',"%s removed SVSHOLD on %s",user->nick.c_str(),parameters[0].c_str()); } else { @@ -132,6 +141,9 @@ class CommandSvshold : public Command if (ServerInstance->XLines->AddLine(r, user)) { + if (silent) + return CMD_SUCCESS; + if (!duration) { ServerInstance->SNO->WriteGlobalSno('x', "%s added permanent SVSHOLD for %s: %s", user->nick.c_str(), parameters[0].c_str(), parameters[2].c_str()); @@ -174,8 +186,15 @@ class ModuleSVSHold : public Module { ServerInstance->XLines->RegisterFactory(&s); ServerInstance->Modules->AddService(cmd); - Implementation eventlist[] = { I_OnUserPreNick, I_OnStats }; + Implementation eventlist[] = { I_OnUserPreNick, I_OnStats, I_OnRehash }; ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); + OnRehash(NULL); + } + + void OnRehash(User* user) + { + ConfigTag* tag = ServerInstance->Config->ConfValue("svshold"); + silent = tag->getBool("silent"); } virtual ModResult OnStats(char symbol, User* user, string_list &out) -- cgit v1.2.3