]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_spanningtree/main.h
062ee283bbd075fa1fcd47282823e5b0dc951cc1
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / main.h
1 #ifndef __ST_MAIN__
2 #define __ST_MAIN__
3
4 #include "inspircd.h"
5 #include "modules.h"
6
7 /** If you make a change which breaks the protocol, increment this.
8  * If you  completely change the protocol, completely change the number.
9  *
10  * IMPORTANT: If you make changes, document your changes here, without fail:
11  * http://www.inspircd.org/wiki/List_of_protocol_changes_between_versions
12  *
13  * Failure to document your protocol changes will result in a painfully
14  * painful death by pain. You have been warned.
15  */
16 const long ProtocolVersion = 1105;
17
18 /** Forward declarations
19  */
20 class cmd_rconnect;
21 class SpanningTreeUtilities;
22 class TimeSyncTimer;
23 class TreeServer;
24 class Link;
25
26 /** This is the main class for the spanningtree module
27  */
28 class ModuleSpanningTree : public Module
29 {
30         int line;
31         int NumServers;
32         unsigned int max_local;
33         unsigned int max_global;
34         cmd_rconnect* command_rconnect;
35         SpanningTreeUtilities* Utils;
36
37  public:
38         /** Timer for clock syncs
39          */
40         TimeSyncTimer *SyncTimer;
41
42         /** Constructor
43          */
44         ModuleSpanningTree(InspIRCd* Me);
45
46         /** Shows /LINKS
47          */
48         void ShowLinks(TreeServer* Current, userrec* user, int hops);
49
50         /** Counts local servers
51          */
52         int CountLocalServs();
53
54         /** Counts local and remote servers
55          */
56         int CountServs();
57
58         /** Handle LINKS command
59          */
60         void HandleLinks(const char** parameters, int pcnt, userrec* user);
61
62         /** Handle LUSERS command
63          */
64         void HandleLusers(const char** parameters, int pcnt, userrec* user);
65
66         /** Show MAP output to a user (recursive)
67          */
68         void ShowMap(TreeServer* Current, userrec* user, int depth, char matrix[128][80], float &totusers, float &totservers);
69
70         /** Handle remote MOTD
71          */
72         int HandleMotd(const char** parameters, int pcnt, userrec* user);
73
74         /** Handle remote ADMIN
75          */
76         int HandleAdmin(const char** parameters, int pcnt, userrec* user);
77
78         /** Handle remote STATS
79          */
80         int HandleStats(const char** parameters, int pcnt, userrec* user);
81
82         /** Handle MAP command
83          */
84         void HandleMap(const char** parameters, int pcnt, userrec* user);
85
86         /** Handle SQUIT
87          */
88         int HandleSquit(const char** parameters, int pcnt, userrec* user);
89
90         /** Handle TIME
91          */
92         int HandleTime(const char** parameters, int pcnt, userrec* user);
93
94         /** Handle remote WHOIS
95          */
96         int HandleRemoteWhois(const char** parameters, int pcnt, userrec* user);
97
98         /** Handle remote MODULES
99          */
100         int HandleModules(const char** parameters, int pcnt, userrec* user);
101
102         /** Ping all local servers
103          */
104         void DoPingChecks(time_t curtime);
105
106         /** Connect a server locally
107          */
108         void ConnectServer(Link* x);
109
110         /** Check if any servers are due to be autoconnected
111          */
112         void AutoConnectServers(time_t curtime);
113
114         /** Handle remote VERSON
115          */
116         int HandleVersion(const char** parameters, int pcnt, userrec* user);
117
118         /** Handle CONNECT
119          */
120         int HandleConnect(const char** parameters, int pcnt, userrec* user);
121
122         /** Send out time sync to all servers
123          */
124         void BroadcastTimeSync();
125
126         /** Returns oper-specific MAP information
127          */
128         const std::string MapOperInfo(TreeServer* Current);
129
130         /**
131          ** *** MODULE EVENTS ***
132          **/
133
134         virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, bool validated, const std::string &original_line);
135         virtual void OnPostCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, CmdResult result, const std::string &original_line);
136         virtual void OnGetServerDescription(const std::string &servername,std::string &description);
137         virtual void OnUserInvite(userrec* source,userrec* dest,chanrec* channel);
138         virtual void OnPostLocalTopicChange(userrec* user, chanrec* chan, const std::string &topic);
139         virtual void OnWallops(userrec* user, const std::string &text);
140         virtual void OnUserNotice(userrec* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list);
141         virtual void OnUserMessage(userrec* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list);
142         virtual void OnBackgroundTimer(time_t curtime);
143         virtual void OnUserJoin(userrec* user, chanrec* channel);
144         virtual void OnChangeHost(userrec* user, const std::string &newhost);
145         virtual void OnChangeName(userrec* user, const std::string &gecos);
146         virtual void OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage);
147         virtual void OnUserConnect(userrec* user);
148         virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message);
149         virtual void OnUserPostNick(userrec* user, const std::string &oldnick);
150         virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason);
151         virtual void OnRemoteKill(userrec* source, userrec* dest, const std::string &reason);
152         virtual void OnRehash(userrec* user, const std::string &parameter);
153         virtual void OnOper(userrec* user, const std::string &opertype);
154         void OnLine(userrec* source, const std::string &host, bool adding, char linetype, long duration, const std::string &reason);
155         virtual void OnAddGLine(long duration, userrec* source, const std::string &reason, const std::string &hostmask);
156         virtual void OnAddZLine(long duration, userrec* source, const std::string &reason, const std::string &ipmask);
157         virtual void OnAddQLine(long duration, userrec* source, const std::string &reason, const std::string &nickmask);
158         virtual void OnAddELine(long duration, userrec* source, const std::string &reason, const std::string &hostmask);
159         virtual void OnDelGLine(userrec* source, const std::string &hostmask);
160         virtual void OnDelZLine(userrec* source, const std::string &ipmask);
161         virtual void OnDelQLine(userrec* source, const std::string &nickmask);
162         virtual void OnDelELine(userrec* source, const std::string &hostmask);
163         virtual void OnMode(userrec* user, void* dest, int target_type, const std::string &text);
164         virtual int OnStats(char statschar, userrec* user, string_list &results);
165         virtual void OnSetAway(userrec* user);
166         virtual void OnCancelAway(userrec* user);
167         virtual void ProtoSendMode(void* opaque, int target_type, void* target, const std::string &modeline);
168         virtual void ProtoSendMetaData(void* opaque, int target_type, void* target, const std::string &extname, const std::string &extdata);
169         virtual void OnEvent(Event* event);
170         virtual ~ModuleSpanningTree();
171         virtual Version GetVersion();
172         void Implements(char* List);
173         Priority Prioritize();
174 };
175
176 #endif