1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd is copyright (C) 2002-2007 ChatSpike-Dev.
\r * E-mail:
\r * <brain@chatspike.net>
\r * <Craig@chatspike.net>
\r *
\r * Written by Craig Edwards, Craig McLure, and others.
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#ifndef __CMD_WHOWAS_H__
\r#define __CMD_WHOWAS_H__
\r\r\r// include the common header files
\r\r#include "users.h"
\r#include "channels.h"
\r\r/* list of available internal commands */
\renum Internals
\r{
\r WHOWAS_ADD = 1,
\r WHOWAS_STATS = 2,
\r WHOWAS_PRUNE = 3,
\r WHOWAS_MAINTAIN = 4
\r};
\r\r/* Forward ref for timer */
\rclass WhoWasMaintainTimer;
\r\r/* Forward ref for typedefs */
\rclass WhoWasGroup;
\r\r/** InspTimer that is used to maintain the whowas list, called once an hour
\r */
\rextern WhoWasMaintainTimer* timer;
\r\r/** A group of users related by nickname
\r */
\rtypedef std::deque<WhoWasGroup*> whowas_set;
\r\r/** Sets of users in the whowas system
\r */
\rtypedef std::map<irc::string,whowas_set*> whowas_users;
\r\r/** Sets of time and users in whowas list
\r */
\rtypedef std::deque<std::pair<time_t,irc::string> > whowas_users_fifo;
\r\r/** Handle /WHOWAS. These command handlers can be reloaded by the core,
\r * and handle basic RFC1459 commands. Commands within modules work
\r * the same way, however, they can be fully unloaded, where these
\r * may not.
\r */
\rclass cmd_whowas : public command_t
\r{
\r private:
\r /** Whowas container, contains a map of vectors of users tracked by WHOWAS
\r */
\r whowas_users whowas;
\r \r /** Whowas container, contains a map of time_t to users tracked by WHOWAS
\r */
\r whowas_users_fifo whowas_fifo;
\r\r /* String holding stats so it can be collected
\r */
\r std::string stats;
\r\r public:
\r cmd_whowas(InspIRCd* Instance);
\r /** Handle command.
\r * @param parameters The parameters to the comamnd
\r * @param pcnt The number of parameters passed to teh command
\r * @param user The user issuing the command
\r * @return A value from CmdResult to indicate command success or failure.
\r */
\r CmdResult Handle(const char** parameters, int pcnt, userrec *user);
\r /** Handle command.
\r * @param parameters The parameters to the comamnd
\r * @param pcnt The number of parameters passed to teh command
\r * @param user The user issuing the command
\r * @return A value from CmdResult to indicate command success or failure.
\r */
\r CmdResult HandleInternal(const unsigned int id, const std::deque<classbase*> ¶meters);
\r void AddToWhoWas(userrec* user);
\r void GetStats(Extensible* ext);
\r void PruneWhoWas(time_t t);
\r void MaintainWhoWas(time_t t);
\r virtual ~cmd_whowas();
\r};
\r\r/** Used to hold WHOWAS information
\r */
\rclass WhoWasGroup : public classbase
\r{
\r public:
\r /** Real host
\r */
\r char* host;
\r /** Displayed host
\r */
\r char* dhost;
\r /** Ident
\r */
\r char* ident;
\r /** Server name
\r */
\r const char* server;
\r /** Fullname (GECOS)
\r */
\r char* gecos;
\r /** Signon time
\r */
\r time_t signon;
\r\r /** Initialize this WhoQasFroup with a user
\r */
\r WhoWasGroup(userrec* user);
\r /** Destructor
\r */
\r ~WhoWasGroup();
\r};
\r\rclass WhoWasMaintainTimer : public InspTimer
\r{
\r private:
\r InspIRCd* ServerInstance;
\r public:
\r WhoWasMaintainTimer(InspIRCd* Instance, long interval)
\r : InspTimer(interval, Instance->Time(), true), ServerInstance(Instance)
\r {
\r }
\r virtual void Tick(time_t TIME);
\r};
\r\r#endif
\r