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 --- src/cmd_clearcache.cpp | 30 ++++++++++++++++++++++++++++++ src/dns.cpp | 9 +++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/cmd_clearcache.cpp (limited to 'src') 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