diff options
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; |