]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - include/commands/cmd_whowas.h
8033f1796fc4b3cf585808e6fcabcd8bc2b779dd
[user/henk/code/inspircd.git] / include / commands / cmd_whowas.h
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
5  *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
6  *   Copyright (C) 2006 Craig Edwards <craigedwards@brainbox.cc>
7  *
8  * This file is part of InspIRCd.  InspIRCd is free software: you can
9  * redistribute it and/or modify it under the terms of the GNU General Public
10  * License as published by the Free Software Foundation, version 2.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21
22 #ifndef CMD_WHOWAS_H
23 #define CMD_WHOWAS_H
24 #include "modules.h"
25
26 /* Forward ref for typedefs */
27 class WhoWasGroup;
28
29 /** A group of users related by nickname
30  */
31 typedef std::deque<WhoWasGroup*> whowas_set;
32
33 /** Sets of users in the whowas system
34  */
35 typedef std::map<irc::string,whowas_set*> whowas_users;
36
37 /** Sets of time and users in whowas list
38  */
39 typedef std::deque<std::pair<time_t,irc::string> > whowas_users_fifo;
40
41 /** Handle /WHOWAS. These command handlers can be reloaded by the core,
42  * and handle basic RFC1459 commands. Commands within modules work
43  * the same way, however, they can be fully unloaded, where these
44  * may not.
45  */
46 class CommandWhowas : public Command
47 {
48   private:
49         /** Whowas container, contains a map of vectors of users tracked by WHOWAS
50          */
51         whowas_users whowas;
52
53         /** Whowas container, contains a map of time_t to users tracked by WHOWAS
54          */
55         whowas_users_fifo whowas_fifo;
56
57   public:
58         CommandWhowas(Module* parent);
59         /** Handle command.
60          * @param parameters The parameters to the comamnd
61          * @param pcnt The number of parameters passed to teh command
62          * @param user The user issuing the command
63          * @return A value from CmdResult to indicate command success or failure.
64          */
65         CmdResult Handle(const std::vector<std::string>& parameters, User *user);
66         void AddToWhoWas(User* user);
67         std::string GetStats();
68         void PruneWhoWas(time_t t);
69         void MaintainWhoWas(time_t t);
70         ~CommandWhowas();
71 };
72
73 /** Used to hold WHOWAS information
74  */
75 class WhoWasGroup
76 {
77  public:
78         /** Real host
79          */
80         std::string host;
81         /** Displayed host
82          */
83         std::string dhost;
84         /** Ident
85          */
86         std::string ident;
87         /** Server name
88          */
89         std::string server;
90         /** Fullname (GECOS)
91          */
92         std::string gecos;
93         /** Signon time
94          */
95         time_t signon;
96
97         /** Initialize this WhoWasFroup with a user
98          */
99         WhoWasGroup(User* user);
100         /** Destructor
101          */
102         ~WhoWasGroup();
103 };
104
105 #endif