diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-01-08 00:18:52 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-01-08 00:18:52 +0000 |
commit | bf3acfa61d702eef0303bc4743592669cebebabf (patch) | |
tree | 58121680fe56f229554a50219e6a11ff1d121505 /src | |
parent | 2bd5a5b5a268351e179bea928a44c546a442a1a2 (diff) |
Add /CLEARCACHE, oper only command which completely purges the DNS cache -- useful if you just want to cut down on ram use at any point.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6259 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd_clearcache.cpp | 30 | ||||
-rw-r--r-- | src/dns.cpp | 9 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/cmd_clearcache.cpp b/src/cmd_clearcache.cpp new file mode 100644 index 000000000..22e219a83 --- /dev/null +++ b/src/cmd_clearcache.cpp @@ -0,0 +1,30 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "configreader.h" +#include "users.h" +#include "commands/cmd_admin.h" + +extern "C" command_t* init_command(InspIRCd* Instance) +{ + return new cmd_admin(Instance); +} + +/** Handle /ADMIN + */ +CmdResult cmd_admin::Handle (const char** parameters, int pcnt, userrec *user) +{ + int n = ServerInstance->Res->ClearCache(); + user->WriteServ("NOTICE %s :*** Cleared DNS cache of %d items.", user->nick, n); + return CMD_SUCCESS; +} diff --git a/src/dns.cpp b/src/dns.cpp index 844077cf4..cea1c4a43 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -253,6 +253,15 @@ DNSRequest* DNS::AddQuery(DNSHeader *header, int &id, const char* original) return req; } +int DNS::ClearCache() +{ + /* This ensures the buckets are reset to sane levels */ + int rv = this->cache->size(); + delete this->cache; + this->cache = new dnscache(); + return rv; +} + void DNS::Rehash() { insp_inaddr addr; |