]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_spanningtree/main.h
fc59a3c7d398965a248da9b0a40e79eef63fb5be
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / main.h
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
5  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
6  *   Copyright (C) 2007-2008 Craig Edwards <craigedwards@brainbox.cc>
7  *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
8  *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
9  *
10  * This file is part of InspIRCd.  InspIRCd is free software: you can
11  * redistribute it and/or modify it under the terms of the GNU General Public
12  * License as published by the Free Software Foundation, version 2.
13  *
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
17  * details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  */
22
23
24 #pragma once
25
26 #include "inspircd.h"
27 #include <stdarg.h>
28
29 /** If you make a change which breaks the protocol, increment this.
30  * If you  completely change the protocol, completely change the number.
31  *
32  * IMPORTANT: If you make changes, document your changes here, without fail:
33  * http://wiki.inspircd.org/List_of_protocol_changes_between_versions
34  *
35  * Failure to document your protocol changes will result in a painfully
36  * painful death by pain. You have been warned.
37  */
38 const long ProtocolVersion = 1202;
39 const long MinCompatProtocol = 1202;
40
41 /** Forward declarations
42  */
43 class SpanningTreeCommands;
44 class SpanningTreeUtilities;
45 class CacheRefreshTimer;
46 class TreeServer;
47 class Link;
48 class Autoconnect;
49
50 /** This is the main class for the spanningtree module
51  */
52 class ModuleSpanningTree : public Module
53 {
54         SpanningTreeCommands* commands;
55
56  public:
57         SpanningTreeUtilities* Utils;
58
59         CacheRefreshTimer *RefreshTimer;
60         /** Set to true if inside a spanningtree call, to prevent sending
61          * xlines and other things back to their source
62          */
63         bool loopCall;
64
65         /** Constructor
66          */
67         ModuleSpanningTree();
68         void init();
69
70         /** Shows /LINKS
71          */
72         void ShowLinks(TreeServer* Current, User* user, int hops);
73
74         /** Counts local and remote servers
75          */
76         int CountServs();
77
78         /** Handle LINKS command
79          */
80         void HandleLinks(const std::vector<std::string>& parameters, User* user);
81
82         /** Show MAP output to a user (recursive)
83          */
84         void ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats);
85
86         /** Handle MAP command
87          */
88         bool HandleMap(const std::vector<std::string>& parameters, User* user);
89
90         /** Handle SQUIT
91          */
92         ModResult HandleSquit(const std::vector<std::string>& parameters, User* user);
93
94         /** Handle remote WHOIS
95          */
96         ModResult HandleRemoteWhois(const std::vector<std::string>& parameters, User* user);
97
98         /** Ping all local servers
99          */
100         void DoPingChecks(time_t curtime);
101
102         /** Connect a server locally
103          */
104         void ConnectServer(Link* x, Autoconnect* y = NULL);
105
106         /** Connect the next autoconnect server
107          */
108         void ConnectServer(Autoconnect* y, bool on_timer);
109
110         /** Check if any servers are due to be autoconnected
111          */
112         void AutoConnectServers(time_t curtime);
113
114         /** Check if any connecting servers should timeout
115          */
116         void DoConnectTimeout(time_t curtime);
117
118         /** Handle remote VERSON
119          */
120         ModResult HandleVersion(const std::vector<std::string>& parameters, User* user);
121
122         /** Handle CONNECT
123          */
124         ModResult HandleConnect(const std::vector<std::string>& parameters, User* user);
125
126         /** Attempt to send a message to a user
127          */
128         void RemoteMessage(User* user, const char* format, ...) CUSTOM_PRINTF(3, 4);
129
130         /** Returns oper-specific MAP information
131          */
132         const std::string MapOperInfo(TreeServer* Current);
133
134         /** Display a time as a human readable string
135          */
136         std::string TimeToStr(time_t secs);
137
138         /**
139          ** *** MODULE EVENTS ***
140          **/
141
142         ModResult OnPreCommand(std::string &command, std::vector<std::string>& parameters, LocalUser *user, bool validated, const std::string &original_line);
143         void OnPostCommand(const std::string &command, const std::vector<std::string>& parameters, LocalUser *user, CmdResult result, const std::string &original_line);
144         void OnGetServerDescription(const std::string &servername,std::string &description);
145         void OnUserConnect(LocalUser* source);
146         void OnUserInvite(User* source,User* dest,Channel* channel, time_t);
147         void OnPostTopicChange(User* user, Channel* chan, const std::string &topic);
148         void OnWallops(User* user, const std::string &text);
149         void OnUserNotice(User* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list);
150         void OnUserMessage(User* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list);
151         void OnBackgroundTimer(time_t curtime);
152         void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts);
153         void OnChangeHost(User* user, const std::string &newhost);
154         void OnChangeName(User* user, const std::string &gecos);
155         void OnChangeIdent(User* user, const std::string &ident);
156         void OnUserPart(Membership* memb, std::string &partmessage, CUList& excepts);
157         void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message);
158         void OnUserPostNick(User* user, const std::string &oldnick);
159         void OnUserKick(User* source, Membership* memb, const std::string &reason, CUList& excepts);
160         void OnRemoteKill(User* source, User* dest, const std::string &reason, const std::string &operreason);
161         void OnPreRehash(User* user, const std::string &parameter);
162         void OnRehash(User* user);
163         void OnOper(User* user, const std::string &opertype);
164         void OnLine(User* source, const std::string &host, bool adding, char linetype, long duration, const std::string &reason);
165         void OnAddLine(User *u, XLine *x);
166         void OnDelLine(User *u, XLine *x);
167         void OnMode(User* user, void* dest, int target_type, const std::vector<std::string> &text, const std::vector<TranslateType> &translate);
168         ModResult OnStats(char statschar, User* user, string_list &results);
169         ModResult OnSetAway(User* user, const std::string &awaymsg);
170         void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::vector<std::string> &modeline, const std::vector<TranslateType> &translate);
171         void ProtoSendMetaData(void* opaque, Extensible* target, const std::string &extname, const std::string &extdata);
172         void OnLoadModule(Module* mod);
173         void OnUnloadModule(Module* mod);
174         ModResult OnAcceptConnection(int newsock, ListenSocket* from, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server);
175         CullResult cull();
176         ~ModuleSpanningTree();
177         Version GetVersion();
178         void Prioritize();
179 };