From bf3acfa61d702eef0303bc4743592669cebebabf Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 8 Jan 2007 00:18:52 +0000 Subject: 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 --- include/commands/cmd_clearcache.h | 33 +++++++++++++++++++++++++++++++++ include/dns.h | 2 ++ src/cmd_clearcache.cpp | 30 ++++++++++++++++++++++++++++++ src/dns.cpp | 9 +++++++++ 4 files changed, 74 insertions(+) create mode 100644 include/commands/cmd_clearcache.h create mode 100644 src/cmd_clearcache.cpp diff --git a/include/commands/cmd_clearcache.h b/include/commands/cmd_clearcache.h new file mode 100644 index 000000000..c575acf64 --- /dev/null +++ b/include/commands/cmd_clearcache.h @@ -0,0 +1,33 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. + * E-mail: + * + * + * + * Written by Craig Edwards, Craig McLure, and others. + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#ifndef __CMD_ADMIN_H__ +#define __CMD_ADMIN_H__ + +#include "users.h" +#include "channels.h" +#include "ctables.h" + +/** Handle /ADMIN + */ +class cmd_clearcache : public command_t +{ + public: + cmd_clearcache (InspIRCd* Instance) : command_t(Instance,"CLEARCACHE",'o',0) { } + CmdResult Handle(const char** parameters, int pcnt, userrec *user); +}; + +#endif diff --git a/include/dns.h b/include/dns.h index c7283f6b8..8011d069c 100644 --- a/include/dns.h +++ b/include/dns.h @@ -448,6 +448,8 @@ class DNS : public EventHandler CachedQuery* GetCache(const std::string &source); void DelCache(const std::string &source); + + int ClearCache(); }; #endif 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; -- cgit v1.2.3